用户输入断开while循环?

时间:2015-10-13 13:44:51

标签: python-3.x

好吧所以我需要编写代码,以便基本上充当收银员。要做到这一点,收银员必须询问用户他们想要什么,他们想要多少,然后问他们是否需要别的东西,直到他们完成他们的订单。

我已经为我将要使用的任何变量设置了值。

while (order != 'done' or 'Done'): #goal: repeat "can I take your order"
    order == input("Can I take your Order? (Enter food item or 'done' to complete order)  ")
    if (order == 'burger' or 'Burger'): 
        a = float(input("How many would you like?  "))
        break

当我执行上述代码之类的操作时,我的程序将在输入' burger'后中断。

while (order != 'done' or 'Done'): #goal: repeat "can I take your order"
    order == input("Can I take your Order? (Enter food item or 'done' to complete order)  ")
    if (order == 'burger' or 'Burger'): 
        a = float(input("How many would you like?  "))

    elif (order == 'cheeseburger' or 'Cheeseburger'):
        b = float(input("How many would you like?  "))
        break
    elif (order == 'fries' or 'Fries'):
        c = float(input("How many would you like?  "))
        break
    elif (order== 'done' or 'Done'):
        break

当我输入假设是' burger'然后无论输入是否会继续询问我的订单。

  
      
  1. 我可以接受您的订单吗? (输入食品或“完成订单”)汉堡
  2.   
  3. 你想要几个? 3
  4.   
  5. 我可以接受您的订单吗? (输入食品或“完成订单”完成订单)
  6.   
  7. 你想要几个? 0
  8.   
  9. 我可以接受您的订单吗? (输入食品或“完成订单”)巧克力
  10.   
  11. 你想要几个? 0
  12.   
  13. 我可以接受您的订单吗? (输入食品或“完成订单”完成订单)薯条
  14.   
  15. 你想要几个? 2   我可以接受您的订单吗? (输入食品或“完成订单”)
  16.   

我不知道我的代码有什么问题。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

那是因为你没有分配" order",你只是在比较它。 =和==

之间的差异
order = input("Can I take your Order? (Enter food item or 'done' to complete order)  ")

while (order.lower() != 'done'):

因为订单!='已完成'或者订购!='完成' 将始终导致 True

加号

order != 'burger' or 'Burger'

将导致汉堡如果订单是'汉堡'另一方面,它将导致' Burger'

>>> order = raw_input()
burger
>>> order == 'burger' or 'Burger'
True
>>> order = raw_input()
done
>>> order == 'burger' or 'Burger'
'Burger'

所以,不知何故,你的第一个 if 总是如此

答案 1 :(得分:0)

问题是您选择循环表达式。简而言之,or并不像您认为的那样工作。我将重点关注while循环,但你在if语句中犯了同样的错误。

考虑以下代码:

while (order != 'done' or 'Done')

这与:

相同
while ((order != 'done') or ('Done')):

...与

大致相同
while ((order != 'done') or ('Done' != "")):

换句话说,该陈述将成立,因为'Done'被认为是" truthy"。

解决方案:像这样写:

while (order != 'done' and order != "Done"):

......甚至更好,以捕捉所有案例:

while (order.lower() != "done"):