python:这是python故障吗?如果 STR 或 STR 在 i 问题中



这让我困惑了很长时间。我不明白为什么if "str" or "str2" in i:如此故障。您甚至不必具有这些输入中的任何一个即可在 if 中运行代码。

我问是否有任何方法可以解决这个问题,(可选)我想看看为什么会发生这种情况。

下面是示例脚本 1

i = input(">>> ")
if ";" in i:
    print("Command")
else: 
    print("Nope")

>>> ;
Command
>>> da
Nope

现在对于越野车部分,我无法解释

i = input(">>> ")
if ";" or ":" in i:
    print("Command")
>>> ;hello
Command
>>> anything
Command
>>> this doesn't have semicolon or colon, yet still says command.
Command

我的 IDE 是 IDLE(最新版本),它创建与运行的终端相同的输出...

不,

这不是Python故障。

看:

i = "anything"
if (";" in i) or (":" in i):
    print("Command")
else:
    print("No command")

与。

i = "anything"
if ";" or ":" in i:
    print("Command")
else:
    print("No command")
第一个代码示例

有效,而第二个代码示例无效。原因是:如果您指定";" or ":" in i,Python 会将字符串(与任何其他值一样)评估为布尔值。因此,您的表达式计算结果为 True - 我猜 - 不是您想要的:-)

我尝试一个通用答案:这是一个常见的误解(完全独立于编程语言;但是有些人可能会将其标记为语法错误)。

or比英语OR更具体。它只是结合了两个真值。

STR in I

是一个真理值,所以必须有人决定如何对待str2,。如果字符串为非空,Python 认为它是真的,其他编程语言可能会报告错误,因为找到的不是真值,而是字符串。你的预期行为,即str2也(自动)与i进行比较,在英语中是合理的,但必须用我所知道的任何编程语言明确说明。

最新更新