我的if语句为何失效?输入remove/removeall无对应提示输出
问题分析与修复方案
你的问题核心出在第一个if语句的逻辑判断上——这个条件的逻辑写反了,导致无论输入什么内容,代码都会优先执行recipients.append(user)的分支,后面处理remove和removeall的逻辑根本没机会运行。
为什么原逻辑不生效?
看一下你写的判断条件:
if user.lower() != "remove" or user.lower() != "removeall":
这个判断永远为True!举两个实际场景例子:
- 当你输入
"remove"时,user.lower() != "remove"是False,但user.lower() != "removeall"是True。or逻辑只要有一个条件为真,整个表达式就为真,所以代码会执行添加操作,完全跳过后面的elif分支。 - 当你输入
"removeall"时,同理,第一个条件为True、第二个为False,or的结果还是True,依然会走到添加分支里。
修复方法
把第一个条件里的or改成and,这样只有当输入**既不是"remove"也不是"removeall"**的时候,才会执行添加操作:
while user != "": lower_user = user.lower() # 先转成小写存起来,避免重复调用,代码更高效清晰 if lower_user != "remove" and lower_user != "removeall": recipients.append(user) user = userQuery() # 注意要把userQuery的返回值赋值给user,否则循环会卡死 elif lower_user == "remove": if not recipients: print("You haven't added any recipients yet.") user = userQuery() else: del recipients[-1] # Removes the last item of the list user = userQuery() # 这里也要记得更新user变量 elif lower_user == "removeall": if recipients: print("Removed every user from the recipient list.") recipients = [] # Removes every item from the list user = userQuery() else: print("Can't delete an empty recipients list.") user = userQuery()
另外还要注意一个潜在问题:原代码里调用userQuery()后没有把返回值赋值给user,这会导致user变量一直保留原来的输入,循环永远不会结束。所以每次调用userQuery()后都要把结果赋值给user,确保循环能获取新的输入。
内容的提问来源于stack exchange,提问作者Carlos Menezes
相关产品推荐
相关产品推荐

