You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')

修复说明

  1. 先捕获原始输入:把用户输入先存在字符串变量里,优先判断是否是done(加了strip()处理空格,lower()兼容大小写输入,比如Done或DONE也能识别),符合条件就直接跳出循环。
  2. 缩小try-except范围:只把整数转换和奇偶判断的逻辑放在try块里,这样只有非数字且非退出指令的输入才会触发"Invalid Input"提示。
  3. 优化奇偶判断:去掉多余的elif (num % 2) == 1,用else直接处理奇数场景,既简洁又能避免负数取模的小问题(比如-3 % 2在Python里结果是1,但如果是其他语言可能有差异,用else更通用)。

内容的提问来源于stack exchange,提问作者Vinny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:26