Python 3.x 在python中,当我使用or运算符时';不显示错误,也不显示我的预期结果 command=input(“什么东西跑得越快越难捕捉?”) ans=command.split(“”) 如果ans中有“呼吸”或“空气”: 打印(“你很聪明”) 其他: 打印(“对不起,你错了”)

Python 3.x 在python中,当我使用or运算符时';不显示错误,也不显示我的预期结果 command=input(“什么东西跑得越快越难捕捉?”) ans=command.split(“”) 如果ans中有“呼吸”或“空气”: 打印(“你很聪明”) 其他: 打印(“对不起,你错了”),python-3.x,Python 3.x,我没有得到预期的结果。输出总是: print("you're smart") 这不起作用的原因是因为或正在检查两个语句的真实性,比较多个值不起作用,只比较或多个布尔值。所以你真正拥有的是 if ("breath") or (("air" in ans) == True): 具体地说,这不是检查“呼吸”是否在ans中,而是检查如果呼吸:。答案的底部有更多关于这方面的内容 您可以通过两次写出ans部分中的来检查这两个值是否都在ans中

我没有得到预期的结果。输出总是:

print("you're smart")

这不起作用的原因是因为
正在检查两个语句的真实性,比较多个值不起作用,只比较
多个布尔值。所以你真正拥有的是

if ("breath") or (("air" in ans) == True): 
具体地说,这不是检查
“呼吸”
是否在
ans
中,而是检查
如果呼吸:
。答案的底部有更多关于这方面的内容

您可以通过两次写出ans部分中的
来检查这两个值是否都在ans
中,如下所示:

if "breath" in ans or "air" in ans:
或者,如果您认为您将检查大量的值,您可以像前面提到的另一个答案那样列出:

wordlist = ["breath", "air", ...]
contains_word = False
for word in wordlist:
  if word in ans:
    contains_word = True
    break
if contains_word:
  #do stuff

注:“
呼吸
”由
评估真实性。在python中,非空字符串是“truthy”,空字符串是“falsy”。如果执行
“呼吸”==True
,则会得到
False
,但如果执行
If“呼吸”:
,则
If
语句将评估为
True
。而
如果“”:
将计算为
False

您可以使用
set.intersection()
速记

#if ans is a list - ex ["your", "breath"]
if {"breath", "air"} & {*ans}:
    #do something
你可以把它绑在一起,这样你所有的问题和答案都在列表中,你可以
zip
并循环

qn = ["What is harder to catch the faster you run? ", ...]
an = [{"breath", "air"}, ...]

for q, a in zip(qn, an):
    ans = input(q).lower().split(" ")
    if a & {*ans}:
        print("You're smart!")
    else:
        print("Sorry, you're wrong.")
您甚至可以在一行上执行
输入
检查
打印

qn = ["What is harder to catch the faster you run? ", ...]
an = [{"breath", "air"}, ...]

for q, a in zip(qn, an):
    print("You're smart!" if {*input(q).lower().split(" ")} & a else "Sorry, you're wrong.")

这应该可以回答您的问题:
“呼吸”==True
总是false。不要把真实性和布尔值混为一谈。
True
。这是一个很好的观点。更正了那个错误。