Python中的无限循环帮助



谁能帮我弄清楚为什么这个循环是无限的?我所在的类根据最后两行自动为我输入变量。它通过了数字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

为什么会这样?在N == 6(或任何大于5的值)之前循环不会停止。

N == 5?我们打印"太多";然后继续循环,不再次增加N。因此循环总是卡在N = 5处。

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

修复无限循环的方法取决于所需的行为。您可以在N超过4时立即break循环:

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

另一种选择是确保N总是递增,要么在条件块内递增,要么在整个if...elif...else语句外递增,而不是在else语句内递增(CC_10只对1到4之间的值运行)。

相关内容

  • 没有找到相关文章

最新更新