python:这是python的小故障吗?如果我遇到STR或STR问题

时间:2018-12-28 08:21:58

标签: python

这让我很困惑。我不明白为什么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(最新版本),它与正在运行的终端创建相同的输出...

2 个答案:

答案 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进行比较,这是您预期的行为,在英语中似乎是合理的,但是必须用我所知道的任何编程语言来明确说明。