Python 中的无限循环帮助

Infinite Loop help in Python

谁能帮我弄清楚为什么这个循环是无限的?我所在的 class 根据最后两行自动为我输入变量。它通过了数字 2 和 4 的测试。但是还有另一个我看不到的输入,它使 运行 保持为无限循环。我无法弄清楚这段代码中哪里存在允许无限循环的差距。有什么建议吗?

def shampoo_instructions(user_cycles):
    N = 1
    while N <= user_cycles:
        if N < 1:
            print('Too few')
        elif N > 4:
            print('Too many')
        else:
            print(N,': Lather and rinse.')
            N = N + 1
    print('Done.')
                
user_cycles = int(input())
shampoo_instructions(user_cycles)

在循环之外缩进 N = N + 1,否则永远不会添加。

或者更好地使用 N += 1:

def shampoo_instructions(user_cycles):
    N = 1
    while N <= user_cycles:
        if N < 1:
            print('Too few')
        elif N > 4:
            print('Too many')
        else:
            print(N,': Lather and rinse.')
        N = N + 1
    print('Done.')
                
user_cycles = int(input())
shampoo_instructions(user_cycles)

第一:习惯测试你的代码。由于您有涉及数字 1 和 4 的条件,因此您应该测试小于 1 和大于 4 的数字,以查看超出这些边缘会发生什么。果然,给 5 作为输入会产生一个无限循环:

0
Done.
1
1 : Lather and rinse.
Done.
4
1 : Lather and rinse.
2 : Lather and rinse.
3 : Lather and rinse.
4 : Lather and rinse.
Done.
5
1 : Lather and rinse.
2 : Lather and rinse.
3 : Lather and rinse.
4 : Lather and rinse.
Too many
Too many
Too many
Too many
Too many
Too many

为什么会这样? user_cycles == 5 所以循环不会停止,直到 N == 6(或任何大于 5 的值。

N == 5 时会发生什么?我们打印“Too many”然后继续循环而不再次增加 N。因此循环将总是卡在 N = 5.

请注意,使用这些值进行的测试还表明我们从未达到 Too few 条件——这是死代码!永远不可能达到这个条件,因为 N 总是从 1 开始并且永远不会减少。

修复无限循环的方法取决于所需的行为。一旦 N 超过 4,您就可以 break 循环:

        elif N > 4:
            print('Too many')
            break

另一种选择是确保 N 始终递增,方法是在该条件块内递增它或在整个 if...elif...else 语句外而不是在 else 内递增(这将对于 1 到 4 之间的值,仅 运行。