首页 > 解决方案 > 为什么 AND 退出我的 while 循环但 OR 让它运行?

问题描述

我能够为我的作业制作这个程序(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:

我的困惑源于我的信念,即当这些陈述中只有一个变为错误时,这将退出循环,而不是两者。

提前感谢您提供的任何指导。

标签: pythonwhile-loopboolean

解决方案


如果您将代码更改为以下内容,它将运行:

while abs(val1) >= .000001 or abs(val2) >= .000001: 

推荐阅读