python中字符的比较

时间:2015-05-07 16:35:50

标签: python

我是编程中的菜鸟,我在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'

我可以从中解释的是'或'正在返回第一个元素,而'和'正在返回第二个元素,但我不确定为什么会发生这种情况,有人可以对此进行一些说明。我无法搜索这个,因为我不知道究竟要搜索什么,为此。

4 个答案:

答案 0 :(得分:2)

在此上下文中使用,orand将返回最后评估的值。 or要求其中一个元素为真。当您检查"A" or "a"时,“A”立即评估为true,因此评估结束,并返回“A”。当您检查"A" and "a"时,“A”立即评估为真,但and也需要“a”,因此也会检查它,然后返回“a”。

这种行为不太清晰。检查None或空容器时,它主要有用。

对于那些感兴趣的人,在Python和许多其他语言中,这种andor逻辑是一种特殊的采用所谓的“正常秩序”的范式,否则遵循“应用顺序” “评价。看看超级棒的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"。如果你有很多选择并且你关心速度,那么套装可能会更好,但在这里它们会过度杀伤。