提问人:Thanach 提问时间:9/7/2023 最后编辑:juanpa.arrivillagaThanach 更新时间:9/7/2023 访问量:46
关于在“if x or y or z”中链接多个“not”的问题
Question about chaining multiple "not" in "if x or y or z"
问:
美好的一天,我目前正在尝试编写一个简单的程序,作为我课程练习的一部分,它与用户一起玩石头剪刀布。我已经完成了任务本身,但想充实一下,并尝试添加以下代码,该代码应该检查单词的拼写错误变体,并让用户知道他们的输入无效:
elif not b=="schere" or b=="stein" or b=="papier":
print("Zu dumm zum tippen!?")
现在我的问题是,在这种形式下,代码实际上不起作用。虽然它正确地承认“schere”是正确的输入,并且在这种情况下有效地“不做任何事情”,但它会阻止其他输入无效。这对我来说是有道理的,因为代码将输入“stein”或“papier”转换为 True,从而触发打印。目前为止,一切都好?
但是,我似乎无法弄清楚如何正确地将它们链接在一起。如果我在每个后面放置额外的“not”,或者,正如我所假设的那样,它应该起作用,它似乎不再正确地做任何事情,并将任何输入标记为不正确并打印上述短语。当我“仅”尝试将另一个而不是添加到其中一个“或”时,会发生相同的故障。有没有可能像我一样把它们链接在一起?我尝试在这里进行谷歌搜索和搜索,但我找到的都是关于链接多个和/或语句的帖子/教程,但没有关于否定这些的帖子/教程。
IIRC 我们正在使用 python 3.5
答:
1赞
juanpa.arrivillaga
9/7/2023
#1
因为:
not b == "schere" or b == "stein" or b == "papier"
相当于:
(not b == "schere") or b == "stein" or b == "papier"
因为 not
的优先级高于 or
。
一个简单的解决方案:
not (b == "schere" or b == "stein" or b == "papier")
请注意,如果你想通过分发 来获得等效逻辑,你必须使用 De Morgan 定律!not
等价物是:
(not b == "schere") and (not b == "stein") and (not b == "papier")
即,等价于not (P or Q)
(not P) and (not Q)
评论
1赞
deceze
9/7/2023
注意:您应该使用而不是...!=
not ==
0赞
juanpa.arrivillaga
9/7/2023
@deceze在这种特殊情况下肯定是这样
评论
not
具有比 和 运算符更高的优先级,但您需要先应用这些运算符,然后再应用于该结果。因此,将括号括起来,以括号括住您想要拥有的表达式。您也可以查看操作员。==
or
==
or
not
not
not in