if语句将多个变量与1个字符串进行比较

时间:2017-09-21 23:09:15

标签: python python-3.x

所以无论我尝试使用这些如果staments

if (x,y,z == "no no yes"):
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY")
if (x,y,z ==  "no yes no"):
    print ("PERFECT SOLDOER DETECTED, REPORT TO US ARMY")
if (x,y,z == "yes no no"):
    print ("LONER ROBOT DETECTED, DESTROY IMMEDIATELY")
if (x,y,z == "no yes yes"):
    print ("THIS ROBOT HURTS HUMANS")
if (x,y,z == "yes yes no"):
    print ("This robot is self destructive")
if (x,y,z == "yes no yes"):
    print ("This robot disobeys orders")
if (x,y,z  == "no no no"):
    print ("YOU HAVE A PHYCOPATH ROBOT, DESTROY AT ALL COSTS")

它只是打印所有字符串,有人可以用这个帮助我

2 个答案:

答案 0 :(得分:3)

x, y, z == "no no yes"计算为三个值的元组:xy和布尔值(true / false),表示z是否等于{{1 }}。这是一个非零长度的元组,它是真实的,因此所有"no no yes"条件都通过了。

相反,请写if等等。

答案 1 :(得分:0)

(x,y,z == "no no yes")

这不符合您的预期。首先,您无法同时将多个变量与单个字符串进行比较。您需要将其拆分为单独的检查。

但为什么你的代码会打印所有字符串?如果你是Python的新手,这可能有点令人惊讶:Python中的逗号分隔元组元素,因此x, y, z将是一个包含三个元素的元组,xy和{ {1}}。一个元组永远不会等于一个字符串,那么为什么你的所有支票都成功了呢?

原因是z运算符绑定比逗号更强。所以你实际写的是这样的:==。因此,您将(x, y, (z == "no no yes"))(并且仅z)与字符串进行比较,并将结果作为第三个值放在元组中。 zx被视为元组的第一个和第二个元素。

非空元组碰巧在Python中评估为y。所以以下内容始终有效:

True

如上所述,要修复代码,您必须分别针对每个值检查每个变量:

if (x, y, False):
    print('Works')

由于您正在检查是否相等,因此您也可以使用此处的if x == "no no yes" or y == "no no yes" or z == "no no yes": print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY") 运算符并反转逻辑:

in

您可以从以下问题中了解有关此内容的更多信息(仅在另一个方向):How do I test one variable against multiple values?

正如我刚从kindall’s answer意识到的那样,您可能希望将这些字符串拆分为单独的字符串,并分别对每个变量进行检查:

if "no no yes" in (x, y, z):
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY")