python - 为什么 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:
我的困惑源于我的信念,即当这些陈述中只有一个变为错误时,这将退出循环,而不是两者。
提前感谢您提供的任何指导。
解决方案
如果您将代码更改为以下内容,它将运行:
while abs(val1) >= .000001 or abs(val2) >= .000001:
推荐阅读
- java - 快速排序算法的计数器
- python - 尝试有条件地将元组列表中的元组附加到字典中的元组子列表
- javascript - 为什么
在 JS 中创建一个新行和 \n 失败 - azure - Connect-AzureRmAccount:无法在 DLL“iphlpapi.dll”中找到名为“GetPerAdapterInfo”的入口点
- php - 将字符串多次分解成多维数组
- python - 如何为 python 2.7 安装 pip?
- css - 为什么下面的canvas和div元素之间有间隔?
- java - TwinML Java 说:西里尔字母不读
- python - 这里使用的是哪个 x 顺序树遍历(深度优先搜索)?
- python - 如何避免python中的全局变量和重复