无论输入如何,Python函数都会运行到第一个if语句

时间:2012-08-02 15:33:28

标签: python

我正在通过在线教程学习Python。我的问题是,当我运行脚本时,无论我输入什么响应,我得到的是if go ==“kitchen”......

def go_to():
    go = raw_input("Go to? ")

    if go == Kitchen or breakfast:
         print "You rumble down stairs and into the kitchen. Your mom has left some microwaved waffles on the table for you. Your big boy step sits by the counter."
    elif go == "back to bed" or "back to sleep" or bed or sleep:
        print "You hit snooze and roll over."
    elif go == "bathroom" or "toilet" or "potty" or "pee" or "poop" or "take a sh*t" or "take a dump" or "drop a load":
        print "You make a stop at the head first."
        go_to()
    else:
        print "That is not a command I understand."
        go_to()
go_to()

5 个答案:

答案 0 :(得分:5)

正如评论中所提到的,您在or的使用不正确。这样:

go == "kitchen" or "breakfast"

等同于:

(go == "kitchen") or "breakfast"

or运算符将其两个操作数都转换为布尔值,它为您提供:

(something) or true

总是减少到true,所以你总是输入if语句

答案 1 :(得分:1)

正如伊格纳西奥所说,你需要一个新的教程。

如果子表达式go == Kitchen or breakfastgo == Kitchen中的任何一个评估为breakfast,则表达式True将为true。如果go评估与Kitchen相同的对象,或者它们的类型定义了一个定义它们相等的__eq__方法,或者breakfast就是这种情况,就会发生这种情况。是一个不是None的对象。

检查变量是否包含列表中的值的方法是:

if go in (Kitchen, breakfast):
   # do something

另请注意,您的代码未显示定义变量Kitchenbreakfast的位置,并且您的缩进不正确。

答案 2 :(得分:0)

我相信问题在于你的第一个if语句

在大多数编程语言中,你不能像你一样说“或”。你需要做的是重复所有条件的“go ==”部分。

if go == Kitchen or go == breakfast:

现在正在做的是评估(go == Kitchen)并发现它是假的。然后它正在评估“早餐”,并返回true。因为它是一个“或”语句,所以整个if都是真的。

答案 3 :(得分:0)

语法

if go == "Kitchen" or "breakfast":
由于评估的顺序,

是错误的。看来你打算检查go是“厨房”还是“早餐”。但是,你检查是否是“厨房”或字符串“早餐”是真的。后者总是如此,因为非空字符串的计算结果不是False。

描述你的意图的直观方式是:

if (go == "kitchen") or (go == "breakfast"):

你也可以写下更多的pythonic:

if go in ["kitchen", "breakfast"]:

答案 4 :(得分:0)

要检查某个条件是否是某个条件列表之一,那么您应该使用in,例如:

if go in ('Bathroom', 'take a dump', 'have a beep'):
    # do something...
elif go in ('Kitchen', 'Living room'):
    # etc...
else:
    # no idea where to go?

使用or并不符合您的预期,并已在其他帖子中进行了解释。