这让我很困惑。我不明白为什么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(最新版本),它与正在运行的终端创建相同的输出...
答案 0 :(得分:1)
不,这不是Python的故障。
请参阅:
SELECT accountrp, SUM(amounteur) AS montant FROM %s
WHERE doctype='1' AND period<>'00' AND
matchno IN(SELECT matchno FROM %s GROUP BY matchno HAVING SUM(amounteur)<>0)
GROUP BY accountrp
vs。
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")
,Python会将字符串(作为任何其他值)评估为布尔值。因此,您的表达式的计算结果为";" or ":" in i
,这是-我猜-不是您的意图:-)
答案 1 :(得分:0)
我尝试一个通用的答案:这是一个常见的误解(非常独立于编程语言;但是有些人可能将其标记为语法错误)。
or
比英文或更加具体。它只是结合了两个真值。
str in i
是一个真值,所以必须决定如何对待str2
。如果字符串非空,Python会确定为真,其他编程语言可能会报告错误,因为找到了字符串而不是真值。 str2
也可以(自动)与i进行比较,这是您预期的行为,在英语中似乎是合理的,但是必须用我所知道的任何编程语言来明确说明。