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

Python程序中逻辑运算符or失效问题咨询及代码排查

修复你的访客姓名收集代码问题

嘿,我瞅见你的代码里有几个小问题,导致循环停不下来还没法过滤掉"done"/"DONE"输入,咱们一步步捋清楚解决:

问题1:while循环的条件逻辑+语法错误

你写的while name != "done" or "DONE"有俩坑:

  • 语法上缺了冒号:,Python直接会报错
  • 逻辑上,or "DONE"会被当成布尔值True(非空字符串在Python里都是True),所以不管name是不是"done",这个条件永远为真,循环根本停不下来

正确的写法要么是检查name不在("done", "DONE")里,要么更简洁的用name.lower() != 'done'——把输入转成小写后判断,不管用户输done、DONE还是Done都能识别。

问题2:if判断的逻辑冗余+语法缺失

你写的if name.lower() != 'done' or name.upper() != 'DONE'逻辑有点绕,而且同样缺了冒号:。其实没必要同时判断小写和大写,直接用name.lower() != 'done'就够了,和循环条件保持一致,既简洁又不容易出错。

问题3:其他细碎语法问题

  • 输入语句input(...)后面少了闭合的括号)
  • while循环和if语句末尾都没加冒号:,这是Python的硬性语法要求,没加的话程序直接跑不起来

修正后的完整代码

print("Enter the names of guests")
guest = []  # 空列表存访客姓名
name = ""   # 初始化空字符串,避免初始空格干扰判断

while name.lower() != 'done':  # 转小写判断,兼容各种大小写的终止输入
    name = input('Enter the name of a guest (enter "done" when finished): ')
    if name.lower() != 'done':  # 过滤掉终止词,不加入列表
        guest.append(name)

guest.sort()  # 对访客姓名按字母排序
print("Sorted guest list:", guest)

简单解释下修改点

  1. 初始化name为空字符串,避免初始空格导致第一次循环判断出错
  2. 用name.lower() != 'done'统一判断终止条件,不管用户输入什么大小写的"done"都能触发循环结束
  3. 每次输入后先判断是不是终止词,不是的话再添加到列表,避免把"done"这类无效内容加进去
  4. 补全了所有遗漏的括号和冒号,修复语法错误

这样改完后,程序就能正常收集姓名,输入任意大小写的"done"都会终止循环,最后输出排序好的访客名单啦。

内容的提问来源于stack exchange,提问作者Jonathan Akwetey Okine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:29:37