提示计算器问题

时间:2016-03-08 22:32:56

标签: python while-loop

试图根据服务为小费计算器编写一个python代码,我遇到了一个问题,我的while循环。

service = ""
while service != "excellent" or service != "good" or service != "bad":
    service = input("(Please choose excellent, good, or bad): ")

这部分导致无限循环,但我不确定为什么或如何修复它......

5 个答案:

答案 0 :(得分:2)

您正在使用orand

如果三个条件中的任何一个为真,循环将继续。

如果您的输入为"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): ")