为什么str.count('')≠(来自str.count('A')+ str.count('B')+ ... + str.count('Z'))

时间:2012-10-16 05:50:26

标签: python string count equals false-positive

如果字符串(短语)中只有元音,那么(对我而言)会说True;否则说False。我不明白为什么它总会返回False,因为(x> = x)总是返回True。 我感谢任何人检查此查询的解决方案。

(str) - >布尔

def valid_letter_sequence(abc):

    valid_letters = abc.count('A') + abc.count('E') + abc.count('I') + abc.count('O') + abc.count('U')
    counted_letters = abc.count('')
    if valid_letters >= counted_letters:
        return True
    else:
        return False

2 个答案:

答案 0 :(得分:6)

观察:

>>> 'abc'.count('')
4

将空字符串传递给count会给你多一个字符串的长度(因为它在两端以及每对字符之间找到空字符串)。你为什么不用len(abc)

更一般地说,有更好的方法来做你正在做的事情。就像这样:

def valid_letter_sequence(abc):
    return not (set(abc) - set('AEIOU'))

答案 1 :(得分:1)

您当然应该使用len()来查找abc的长度。 count()的另一个缺点是它需要再次扫描字符串。 Python已经知道了它的长度,因此只需要它就可以了。

all允许函数在遇到不在“AEIOU”中的字符时立即返回。这称为short circuit evaluation

def valid_letter_sequence(abc):
    return all(x in "AEIOU" for x in abc)