为什么我的 while 循环输出越界值?

新手上路,请多包涵

所以我在做 while 循环时发现了一些奇怪的事情。

 count = 0

while count <= 5:
    count += 1
    print(count)

输出:

 1
2
3
4
5
6

并不是我不理解 while 循环。这就是为什么计数打印到六?当它应该打印 count 只有当 count 小于或等于 5 时?

井 6 超过 5。这是为什么?

我知道我能做到

count = 0

    while count != 5:
        count += 1
        print(count)

但我只是想了解为什么 putting <= 表现得很奇怪?

原文由 Zion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 703
2 个回答

<= 没什么奇怪的;您的循环条件允许数字达到 并包括 5 。但是你增加 count 然后 打印它,所以你将打印 6 最后。

那是因为 count = 5 满足你的循环条件,然后你添加一个使其成为 6 并打印。下一次循环 count <= 5 不再为真, 然后 循环才结束。

所以你的代码这样做:

  1. count = 0 , count <= 5 -> True , count += 1 makes count = 1 , print 1 .
  2. count = 1 , count <= 5 -> True , count += 1 makes count = 2 , print 2 .
  3. count = 2 , count <= 5 -> True , count += 1 makes count = 3 , print 3 .
  4. count = 3 , count <= 5 -> True , count += 1 makes count = 4 , print 4 .
  5. count = 4 , count <= 5 -> True , count += 1 makes count = 5 , print 5 .
  6. count = 5 , count <= 5 -> True , count += 1 makes count = 6 , print 6 .
  7. count = 6 , count <= 5 -> False ,结束循环。

您可以在打印 增加计数器:

 while count <= 5:
    print(count)
    count += 1

或者您可以使用 < 只允许 小于 5 的数字:

 while count < 5:
    count += 1
    print(count)

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

让我们浏览一下代码,看看发生了什么。

注意:如果您的代码正在做一些您不希望它做的事情,这是一个值得遵循的好习惯。

 count = 0

while count <= 5:
    count += 1
    print(count)

count 从0开始

count = 0

while count <= 5: # count = 0. Is 0 <= 5? Yes. Run the code.
    count += 1
    print(count)

增加计数,使其现在等于 1。打印它。

 while count <= 5: # count = 1. Is 1 <= 5? Yes. Run the code.
    count += 1
    print(count)

增量。打印。重复。

让我们继续讨论导致问题的有趣案例。

 while count <= 5: # count = 5. Is 5 <= 5? Yes. Run the code.
    count += 1
    print(count)

在这种情况下 count 仍然满足不等式,因此代码运行。

怎么了?

count 为 5,递增并因此打印出 6。


既然我希望您理解问题存在的原因,那么让我们探讨替代方案及其优点、缺点和输出。


让我们从您的代码开始。

 count = 0

while count <= 5:
    count += 1
    print(count)

优点:不打印出0

缺点:打印出 6


如果我们删除 = 标志会怎样?

 count = 0

while count < 5:
    count += 1
    print(count)

输出:

 1
2
3
4
5

优点:做你想做的

缺点:你必须从 0 而不是 1 开始


如果我们按照您的建议将 < 符号替换为 --- ! 符号会怎么样?

 count = 0

while count != 5:
    count += 1
    print(count)

输出:

 1
2
3
4
5

优点:做你想做的

缺点:易碎。如果你改变了你的增量,让它增加了一个数字,比如 3,终点将被意外跳过,代码将继续运行下去。最好使用不等式


如果我们希望我们开始显示的第一个数字怎么办?好吧,要做到这一点,我们必须在更改之前打印出当前数字,这意味着我们必须翻转事件的顺序。

 count = 1 # Change the first number so it's what we want displayed first.

while count <= 5:
    print(count)
    count += 1

输出:

 1
2
3
4
5

优点:做你想做的,从第一个显示的数字开始,而不是在它下面。

缺点:如果你想坚持使用 while 循环,这是可行的方法,但在这种情况下有更好的方法。


在这种情况下,您递增数字然后对它们执行操作,只使用 for 循环 更合乎逻辑,它是为像这样的实例设计的。

 for count in range(1,5):
    print(count)

输出:

 1
2
3
4
5

优点:做你想做的,更容易阅读,更容易编写,不太可能导致基于放置的错误。

缺点:上边界必须是已知的,不像在 while 循环中。

原文由 Zenohm 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题