如果语句有两个字符串

时间:2014-06-26 22:58:26

标签: python

我刚刚开始学习Python,并且想要使用if语句练习,因为我正在玩文本冒险游戏。我试图让这样的事情发挥作用。例如,如果要输入“看地板”(或只是“看地板”),其中word1将是“look”和“floor”。

也许有一个简单的答案,我尝试了几种不同的方法,但似乎无法使其发挥作用。谢谢你的帮助!

def test():
    answer = raw_input().lower()
    if ('word1' and 'word2') in answer:
        print "Both words were in the answer."
    else:
        print "Both words were NOT in the answer"

test()

4 个答案:

答案 0 :(得分:2)

您需要为每个单词进行in成员资格测试:

if ('word1' in answer) and ('word2' in answer):

当然,如果你有很多话,这很快就会变得乏味。在这种情况下,您可以使用allgenerator expression

if all(word in answer for word in ('word1', 'word2', ...)):

以上内容将测试元组('word1', 'word2', ...)中的每个单词是否都可以在answer中找到。

答案 1 :(得分:2)

这是一个更彻底的解释:

评估顺序!

你必须记住,虽然一些惯用的结构在英语(或任何其他语言)中有意义,但它们在编程语言中可能没有意义,即使它是有效的语法。

例如,让我们考虑一下您的示例代码的测试表达式:

('word1' and 'word2') in answer

当您应用评估顺序的规则时,首先评估括号中的子表达式(('word1' and 'word2'))。由于and运算符,此子表达式的结果是右操作数,因为左操作数的计算结果为True。在初始表达式中重新插入此值会为我们提供:'word2' in answer。因此,只要在答案中找到第二个单词,测试将始终有效。

编辑:更正布尔评估。

答案 2 :(得分:1)

您可以使用all来实现这一目标:

def test():
    answer = raw_input().lower()
    if all(word in answer for word in ('word1', 'word2')):
        print "Both words were in the answer."
    else:
        print "Both words were NOT in the answer"

test()

这会查看您指定的每个字词,并检查它是否在answer中。内置函数all()将在执行所有检查的情况下返回True,否则将返回False。换句话说,当所有检查都是True时,它只有True

答案 3 :(得分:0)

其他答案都很好,但我会尝试为您解释错误的逻辑

if ('word1' and 'word2') in answer:

根据评估规则的Python顺序,首先评估if语句括号内的组件。

因此,解释器将您的表达式有效地评估为:

temp = ('word1' and 'word2')
if temp in answer:
    print "Both words were in the answer."

上面temp的值将是逻辑上and两个不同字符串的结果,这些字符串并没有多大意义。在这种情况下,如果第一个操作数计算为True(例如空字符串),则第一个操作数计算为False并返回第二个操作数,Python将返回第一个操作数。因此,在您的特定情况下,Python将只返回第二个字符串,所以:

('word1' and 'word2') == 'word2'

因此,解释器将您的代码读取为:

if ('word2') in answer:
    print "Both words were in answer."

写作:

if ('word1' in answer) and ('word2' in answer):
    print "Both words were in answer."

您要进行明确评估的比较,以便解释者能够理解并且不会给您带来奇怪的结果。