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