2012-10-16 26 views
1

It(should ,对我来说)如果在字符串(短语)中只有元音,则说True;否则说False。我不明白为什么它总是会返回False,因为(x> = x)总是返回True。 我感谢任何人检查此查询的解决方案。为什么str.count('')≠(来自str.count('A')+ str.count('B')+ ... + str.count('Z'))

(STR) - > BOOL

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 

回答

6

观察:

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

传递一个空字符串count给你比字符串的长度多一个(因为它发现一个空字符串在两端以及每对角色之间)。你为什么不使用len(abc)

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

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

当然,它更容易使用'LEN(ABC)'可惜不知道在'count'这个细节。您的评论当然是有用的,只要我获得声誉,就会投票给您。 我总是试图缩短我的代码,您的反馈肯定是有启发性的。 谢谢。 –

0

你当然应该使用len()找到abc长度。 count()的另一个缺点是它需要再次扫描字符串。 Python已经知道了这个长度,所以问一下它会更有效率。

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

def valid_letter_sequence(abc): 
    return all(x in "AEIOU" for x in abc) 
相关问题