【问题标题】:Why does this code go into infinite while loop?为什么这段代码会进入无限的while循环?
【发布时间】:2021-09-18 04:35:05
【问题描述】:

下面的代码进入无限循环,实际上如果我一步一步做,它应该在i 的值变为0 时终止,此时while 条件变为False。因此,while 循环应该终止。根据我的理解,输出应该是-5 -4 -3 -2 -1 0,因为0False,这使得while True 条件False。有人能解释一下为什么代码没有终止并进入无限循环吗?

i = -5        # initialization
while True:   # condition
    print(i)  # statement
    i += 1

print("exit")

【问题讨论】:

  • while 条件是True,而不是值取决于i 的表达式。您认为True 的值何时不再为真?
  • 你想要while i(或者更明确,while i != 0)。
  • 真实总是真实的。真永远不会“变成假”。

标签: python while-loop boolean


【解决方案1】:

i 的值是多少无关紧要;您的循环只考虑True 的值,这是一个永远不会变为假的常量。

i = -5
while i != 0:  # i alone works, but this is clearer
  print(i)
  i += 1   

【讨论】:

  • 感谢您的回答。我认为0 总是转换为布尔值的False,任何其他值都转换为True
  • 确实如此,但您的循环条件中没有使用值 0(来自任何来源)。
  • 假设您有两个变量ij,一个是零,一个是非零。您是否希望您的循环知道哪个“应该”是循环条件?
  • 没错。最后一个澄清请求,Python 中的整数范围是 -2147483648 到 2147483647 如果我初始化`i = 2147483647`,那么您的代码会打印负数直到零吗?我尝试使用您更正的代码这样做,但代码没有进入负整数范围,而是继续打印正数 2147483648,2147483649,.......,2149456699....... 等等。
  • Python 中没有“整数范围”。整数的大小仅受计算机上可用内存的限制。 x + 1 > x 对任何类型为 intx 都为真。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多