为什么 AND 退出我的 while 循环但 OR 离开它 运行?
Why does AND exit my while loop but OR leaves it running?
我能够为我的作业编写这个程序 (python 3.9),但我无法理解它背后的逻辑。
我需要求多项式函数 f(x) = ^3 − 4^2 + 3 − 4 的根。提供了变量,所以我只需要编写函数,一个 while 循环来找到根,并格式化输出。所需框架的一部分是“执行直到 val1 和 val2 的绝对值都小于 0.000001”
我的第一次尝试是
x1 = 0
x2 = 5
val1 = x1**3 - (4*x1**2) + 3*x1 - 4
val2 = x2**3 - (4*x2**2) + 3*x2 - 4
n = 0
while abs(val1) or abs(val2) >= .000001:
n += 1
new_x = (x1+x2)/2
new_val = (new_x**3) - (4 * new_x**2) + (3 * new_x) - 4
if new_val < 0:
x1 = new_x
val1 = new_val
else:
x2 = new_x
val2 = new_val
solution = (x1+x2)/2
print(f"{'The approximate solution is x = '}{solution:.7f}{'.'}")
print(f"{'The algorithm took '}{n}{' iterations to converge.'}")
我选择 OR 的理由是: abs(val1) 和 abs(val2) 必须 <.000001,所以只要其中一个值大于或等于.000001,则循环将继续执行。然而,这导致循环无限期地 运行 。我能够通过将行更改为:
来解决此问题并完成作业
while abs(val1) and abs(val2) >= .000001:
我的困惑源于我的信念,即当这些语句中只有一个变为假时,这会退出循环,而不是两个都变为假。
提前感谢您提供的任何指导。
如果您将代码更改为以下内容,它将 运行:
while abs(val1) >= .000001 or abs(val2) >= .000001:
在 python 中,与许多编程语言一样,用作谓词的数字(例如整数、浮点数)将解析为真,除非该数字为 0。例如,
if 2:
print('2')
if 0.1:
print('0.1')
if 0:
print('0')
在上面的代码中,只会打印2和0.1。在你的场景中
while abs(val1) or abs(val2) >= .000001:
第一个谓词 (abs(val1)
) 总是解析为 true 所以 while 循环永远不会退出
我能够为我的作业编写这个程序 (python 3.9),但我无法理解它背后的逻辑。
我需要求多项式函数 f(x) = ^3 − 4^2 + 3 − 4 的根。提供了变量,所以我只需要编写函数,一个 while 循环来找到根,并格式化输出。所需框架的一部分是“执行直到 val1 和 val2 的绝对值都小于 0.000001”
我的第一次尝试是
x1 = 0
x2 = 5
val1 = x1**3 - (4*x1**2) + 3*x1 - 4
val2 = x2**3 - (4*x2**2) + 3*x2 - 4
n = 0
while abs(val1) or abs(val2) >= .000001:
n += 1
new_x = (x1+x2)/2
new_val = (new_x**3) - (4 * new_x**2) + (3 * new_x) - 4
if new_val < 0:
x1 = new_x
val1 = new_val
else:
x2 = new_x
val2 = new_val
solution = (x1+x2)/2
print(f"{'The approximate solution is x = '}{solution:.7f}{'.'}")
print(f"{'The algorithm took '}{n}{' iterations to converge.'}")
我选择 OR 的理由是: abs(val1) 和 abs(val2) 必须 <.000001,所以只要其中一个值大于或等于.000001,则循环将继续执行。然而,这导致循环无限期地 运行 。我能够通过将行更改为:
来解决此问题并完成作业while abs(val1) and abs(val2) >= .000001:
我的困惑源于我的信念,即当这些语句中只有一个变为假时,这会退出循环,而不是两个都变为假。
提前感谢您提供的任何指导。
如果您将代码更改为以下内容,它将 运行:
while abs(val1) >= .000001 or abs(val2) >= .000001:
在 python 中,与许多编程语言一样,用作谓词的数字(例如整数、浮点数)将解析为真,除非该数字为 0。例如,
if 2:
print('2')
if 0.1:
print('0.1')
if 0:
print('0')
在上面的代码中,只会打印2和0.1。在你的场景中
while abs(val1) or abs(val2) >= .000001:
第一个谓词 (abs(val1)
) 总是解析为 true 所以 while 循环永远不会退出