繁体   English   中英

使用 BREAK 语句退出此 while 循环会更改变量的值并给出错误的答案。 需要另一种方式吗?

[英]Using a BREAK statement to exit this while loop changes the value of the variable and gives incorrect answer. Need another way?

题:

编写一个应用牛顿法的程序来计算和显示用户输入的数字的平方根。 牛顿法的算法如下: 从用户那里读取 x 将 guess 初始化为 x/2 虽然 guess 不够好 do 将 guess 更新为 guess 和 x/guess 的平均值 当该算法完成时,guess 包含平方根的近似值. 近似值的质量取决于您如何定义“足够好”。 在作者的解决方案中,当 guess ∗ guess 与 x 的差值的绝对值小于或等于 10−12 时,就认为 guess 足够好。

解决方案:

x = int(input("Enter x: "))

guess = x/2

while guess != (abs(guess * guess - x <= 10 ** -12)):

    guess =  (guess + x/guess)/2

    print(guess)

注意:如果我添加 break 语句,它会更改值。 例如:9 的平方根 = 3 使用上述解决方案。

但是如果我添加一个 BREAK 语句......

while guess != (abs(guess * guess - x <= 10 ** -12)):

    guess =  (guess + x/guess)/2

    print(guess)

    break  

输入 x:9 3.25

为什么添加 break 语句会改变 guess 变量的值? 如何在不更改值的情况下终止此循环并简单地打印猜测并退出循环?

endloop 不起作用, exit() 似乎具有相同的效果。 任何帮助将不胜感激。 谢谢 !

if type(guess) != str:
    break

我也试过放置这样的条件。 同样的效果。 打印不正确的猜测值。

这证明了正确的 while 条件:

x = int(input("Enter x: "))
guess = x/2
while abs(guess * guess - x) >= 10 ** -12:
    guess =  (guess + x/guess)/2
    print(guess)

Output:

C:\tmp>python x.py
Enter x: 9
3.25
3.0096153846153846
3.000015360039322
3.0000000000393214
3.0

这是一种略有不同的方法,它使用了一个额外的变量,因此使用了一个不太复杂的条件表达式。 还使用变量来确定准确度水平,并使用相同的变量来表示结果。

x = float(input('X: '))

guess = x / 2
prev = x

DP = 4 # no. of decimal places accuracy
MARGIN = 10 ** -DP

while abs(guess - prev) > MARGIN:
    prev = guess
    guess = (guess + x / guess) / 2

print(f'{guess:.{DP}f}')

例子:

X: 17
4.1231

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM