我是编程中的菜鸟,我在codeacademy上使用python而且我遇到了这个代码,它希望改变“a' a' A”的短语通过' X&#39>
phrase = "A bird in the hand..."
for char in phrase:
if char == "A" or char == "a":
print "X",
这段代码对我来说很好,但是当我试图将if语句更改为:
if char == ("A" or "a"):
只有短语中的A变为X. 当我将if语句改为
时if char == ("A" and "a"):
只有短语中的a变为X.
我去了我的终端并尝试了一些or和和字符之间的比较组合并获得了这些结果
>>> "a" or "A"
'a'
>>> "A" or "a"
'A'
>>> "A" and "a"
'a'
>>> "a" and "A"
'A'
>>> 2 or "a"
2
>>> 2 and "a"
'a'
>>> "a" and "b"
'b'
>>> "A" or 2
'A'
我可以从中解释的是'或'正在返回第一个元素,而'和'正在返回第二个元素,但我不确定为什么会发生这种情况,有人可以对此进行一些说明。我无法搜索这个,因为我不知道究竟要搜索什么,为此。
答案 0 :(得分:2)
在此上下文中使用,or
和and
将返回最后评估的值。 or
要求其中一个元素为真。当您检查"A" or "a"
时,“A”立即评估为true,因此评估结束,并返回“A”。当您检查"A" and "a"
时,“A”立即评估为真,但and
也需要“a”,因此也会检查它,然后返回“a”。
这种行为不太清晰。检查None或空容器时,它主要有用。
对于那些感兴趣的人,在Python和许多其他语言中,这种and
和or
逻辑是一种特殊的采用所谓的“正常秩序”的范式,否则遵循“应用顺序” “评价。看看超级棒的SICP:
https://mitpress.mit.edu/sicp/full-text/sicp/book/node85.html
通常,您应该使用or
- 1 > 2 or "a" in "abc"
加入直接布尔表达式,或者更好的是,使用set containment:if char in {"A", "a"}
。
答案 1 :(得分:1)
您想写char == "A" or char == "a"
。
答案 2 :(得分:1)
char == ( "A" or "a")
评估为:
char == (True or True)
因为Python中的字符串是truthy
,如果它们不为空。比较char == True
显然会产生False
。
您想要的是in
运营商
char in {"A", "a"}
答案 3 :(得分:0)
其他人是对的,但我只做char in "Aa"
。如果你有很多选择并且你关心速度,那么套装可能会更好,但在这里它们会过度杀伤。