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)
简单解释下修改点
- 初始化
name为空字符串,避免初始空格导致第一次循环判断出错 - 用
name.lower() != 'done'统一判断终止条件,不管用户输入什么大小写的"done"都能触发循环结束 - 每次输入后先判断是不是终止词,不是的话再添加到列表,避免把"done"这类无效内容加进去
- 补全了所有遗漏的括号和冒号,修复语法错误
这样改完后,程序就能正常收集姓名,输入任意大小写的"done"都会终止循环,最后输出排序好的访客名单啦。
内容的提问来源于stack exchange,提问作者Jonathan Akwetey Okine
相关产品推荐
相关产品推荐

