条件语句中多个'或'语句的有效方法

时间:2015-08-22 01:50:02

标签: python python-2.7 conditional-statements

只学习Python几个月,所以请耐心等待......

创建一个非常简单的游戏作为Python教程的一部分,其中用户基本上从一个类跳到另一个类,所有这些都需要用户输入并打印出各种语句。

例如,给定以下类:

class ChipCar(Scene):

    def enter(self):
        print "What's up? Get in the Bran Muffin car!"

        action = raw_input(">  ")

        if action == "shut up chip":
            print "Screw you!"
            print action
            return next_scene('Your_death')
            #return 'Death' 
        elif action == "hi chip":
            print "What's up loser?!?! Let's go to O&A..."
            return next_scene('Chip_in_studio')
        else:
            print "what's wrong with you? Let's go to my mother's house, I think Lamar's there..."
            return 'Chip_mom_house'

假设我希望能够检查第一个if语句的多个正确选项,例如,除了"shut up chip""go away dude""screw you""Java sucks"之外 - 什么是最好的方法?

3 个答案:

答案 0 :(得分:2)

如果您的所有测试都是相同的,那么您可以在集合上使用in运算符,它将检查您正在测试的值是否存在。我建议使用set,因为它的成员资格测试速度非常快,但使用listtuple可能会在Python 2中获得更好的性能(我认为它仅适用于Python的最新版本) 3常量集文字存储为常量,而不是每次函数运行时都重新创建):

if action in {"shut up chip", "go away dude", "screw you", "Java sucks"}:
    # ...

如果您的非相等性测试不是那么相关,那么您可以使用anyall函数将它们链接起来,就好像使用or或{{ 1}}。例如,这段代码将测试与上面相同的字符串,但是允许任意大小写,并且在我们正在检查的位(包括子字符串搜索)旁边包含额外的文本:

and

这是在if any(phrase in action.lower() for phrase in ("shut up chip", "go away dude", "screw you", "java sucks")): # ... 调用中使用生成器表达式,这是Python中非常常见的习惯用法(但可能比你学到的更先进)。

答案 1 :(得分:1)

您可以执行以下操作:

def enter(self):
    print "What's up? Get in the Bran Muffin car!"

    action = raw_input(">  ")

    if(action == "shut up chip" or action == "go away dude" or action == "screw you"):
        print "Screw you!"
        print action
        return next_scene('Your_death')
        #return 'Death' 
    elif action == "hi chip":
        print "What's up loser?!?! Let's go to O&A..."
        return next_scene('Chip_in_studio')
    else:
        print "what's wrong with you? Let's go to my mother's house, I think Lamar's there..."
        return 'Chip_mom_house'

我们在这个条件语句中使用or的方式是从左到右在布尔上下文中计算值,就像使用and一样。如果任何值为true,则or会立即返回该值。您可以考虑在括号内打包所有不同的用户响应选项,其中我们正在评估action的每个实例是否都有您的一个用户输入值。

答案 2 :(得分:0)

您可以在字符串元组上使用in运算符。如果匹配,则返回True

class ChipCar(Scene):
    def enter(self):
        print "What's up? Get in the Bran Muffin car!"

        action = raw_input(">  ")

        if action in ("shut up chip", "go away dude", "screw you"):
            print "Screw you!"
            print action
            return next_scene('Your_death')
            #return 'Death' 
        elif action == "hi chip":
            print "What's up loser?!?! Let's go to O&A..."
            return next_scene('Chip_in_studio')
        else:
            print "what's wrong with you? Let's go to my mother's house, I think Lamar's there..."
            return 'Chip_mom_house'