Python shampoo_instructions函数无限循环问题排查求助
死循环原因定位
当输入的user_cycles取值≥5时就会触发无限循环,问题出在循环内部的变量更新逻辑:
- 只有
1≤N≤4的分支里写了N = N + 1的自增逻辑,当N增长到5后,会进入elif N > 4的分支,这个分支仅执行打印Too many,没有任何修改N的操作 - 此时只要
user_cycles≥5,N <= user_cycles的循环判断条件就会永远成立,程序会反复进入N>4的分支执行打印,永远不会退出循环
而输入1~4之间的数值时,N会正常自增到超过user_cycles后退出循环,这也是你测试2、4时功能正常的原因。
修复方案
把N的自增逻辑移到所有判断分支之外,保证每次循环不管进入哪个分支,N都会正常更新:
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)
如果业务要求次数超过4就直接停止流程,也可以在N>4的分支里加break直接终止循环,减少无效执行。
通用排查建议
遇到不明输入导致的死循环时,可以按以下思路快速定位:
- 覆盖所有边界值做测试,比如小于1、等于1、等于4、大于4的情况,验证每个分支的逻辑是否正常
- 在循环内部加临时打印语句,输出每次循环的变量值,能快速定位到哪个变量没有按预期更新
- 调试时可以给循环加临时的最大次数限制,避免调试过程中程序一直卡死
内容的提问来源于stack exchange,提问作者idgiesmom
相关产品推荐
相关产品推荐

