2012-10-16 21 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) 
相關問題