试图根据服务为小费计算器编写一个python代码,我遇到了一个问题,我的while循环。
service = ""
while service != "excellent" or service != "good" or service != "bad":
service = input("(Please choose excellent, good, or bad): ")
这部分导致无限循环,但我不确定为什么或如何修复它......
答案 0 :(得分:2)
您正在使用or
,and
。
如果三个条件中的任何一个为真,循环将继续。
如果您的输入为"excellent"
,则service != "good"
和service != "bad"
都将为真,因此循环将继续。其他值也是如此。
你想要的是:
service = ""
while service != "excellent" and service != "good" and service != "bad":
service = input("(Please choose excellent, good, or bad): ")
更好(和各种评论者指出的更多Pythonic)是:
service = ""
while service.lower() not in ["excellent", "good", "bad"]:
service = input("(Please choose excellent, good, or bad): ")
这在任何情况下(上,下,混合)都更容易阅读并接受输入。
答案 1 :(得分:0)
在这种情况下,您想使用“和”而不是“或”。但是,另一个更清洁的选择是:
while service not in ['excellent', 'good', 'bad]:
service = input('(Please choose excellent, good, or bad): ')
这将测试service
的值是否在可接受的答案列表中,以便以后更容易编辑。
答案 2 :(得分:0)
现在,您正在说"如果这些陈述中的任何三个都是真的,请继续while循环"。
你想要的是:
service = ""
while service != "excellent" and service != "good" and service != "bad":
service = input("(Please choose excellent, good, or bad): ")
答案 3 :(得分:0)
您的逻辑有点混乱 - 您使用or
代替and
。
无论你有什么输入,它都会(不是很好)或(不好)或(不坏)!
例如,即使您输入" good",good is(不是很好),因此整体条件返回True,并且您将继续循环。
更清楚地写出这种情况的方法是:
while service not in ["excellent", "good", "bad"]:
service = input("(Please choose excellent, good, or bad): ")
答案 4 :(得分:0)
要循环直到满足任何条件(因为同时满足所有这些条件既不可能也没有意义),你需要在时循环所有这些都没有得到满足(逻辑否定)。表达这种我能想到的最具可读性和pythonic的方式是:
service = ''
while service not in ('excellent', 'good', 'bad'):
service = input("(Please choose excellent, good, or bad): ")