我刚刚开始学习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()
答案 0 :(得分:2)
您需要为每个单词进行in
成员资格测试:
if ('word1' in answer) and ('word2' in answer):
当然,如果你有很多话,这很快就会变得乏味。在这种情况下,您可以使用all
和generator 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."
您要进行明确评估的比较,以便解释者能够理解并且不会给您带来奇怪的结果。