Python中输入done无法终止循环?请排查代码问题
问题分析与修复方案
哥们,我一眼就瞅出你代码里的几个关键问题,咱们一步步捋清楚:
你的代码核心错误点
- 先转整数导致退出指令直接触发异常:你上来就把输入用
int()强制转换,当用户输入done时,字符串没法转成整数,直接跳进except块打印"Invalid Input",根本到不了判断退出的逻辑。 - 无效的退出判断:就算输入能走到
else分支,num已经是整数类型了,永远不可能等于字符串'done',这个判断完全起不到作用。 - 逻辑分支错位:你把退出判断放在了奇偶判断的
else里,就算前面的问题都不存在,这个分支也永远不会被触发,因为整数要么是偶数要么是奇数,走不到这个else。
修正后的代码
while True: user_input = input("Enter a number or enter done: ") # 优先处理退出指令,避免触发异常 if user_input.strip().lower() == 'done': break # 仅在输入不是退出指令时,尝试转换为整数 try: num = int(user_input) if num % 2 == 0: print("Number is Even") else: # 整数除了偶数就是奇数,用else更简洁,还能兼容负数场景 print("Number is Odd") except ValueError: print('Invalid Input') print('Done')
修复说明
- 先捕获原始输入:把用户输入先存在字符串变量里,优先判断是否是
done(加了strip()处理空格,lower()兼容大小写输入,比如Done或DONE也能识别),符合条件就直接跳出循环。 - 缩小try-except范围:只把整数转换和奇偶判断的逻辑放在
try块里,这样只有非数字且非退出指令的输入才会触发"Invalid Input"提示。 - 优化奇偶判断:去掉多余的
elif (num % 2) == 1,用else直接处理奇数场景,既简洁又能避免负数取模的小问题(比如-3 % 2在Python里结果是1,但如果是其他语言可能有差异,用else更通用)。
内容的提问来源于stack exchange,提问作者Vinny
相关产品推荐
相关产品推荐

