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 之间的值,仅 运行。
谁能帮我弄清楚为什么这个循环是无限的?我所在的 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 之间的值,仅 运行。