2016-02-04 98 views
1

我正在寫一個函數,它應該計算輸入短語中的數字。這個短語被存儲爲一個元組,while循環應該計算元音的數量。到目前爲止,我已經得到了這個。Python while循環與元組

def whilephrase(): 
    vowels=['A','a','E','e','I','i','O','o','U','u'] 
    print('Please give me a phrase') 
    inputphrase=input() 
    inputphrase=tuple(inputphrase) 
    i=0 
    while True: 
     if vowels in inputphrase: 
      i=i+1 
     else: 
      print(i) 

但是,這只是打印出一個無限循環的零。

+7

無限循環? '而真'將導致... –

+0

當您正在查找物品時,還可以使用一套而不是一個列表。你可以說元音=設置(元音) – sisanared

+3

@shravster - 這是一個很小的性能差異,並沒有解決這裏的問題 –

回答

2

您需要遍歷您inputphrase:

for character in inputphrase: 
    if character in vowels: 
     i = i + 1 
print(i) 

但是,當然,更簡單的方法:

def count_vowels(string): 
    return sum(1 for c in string if c.lower() in "aeiou") 

編輯:使用while循環(雖然我不知道爲什麼你要具體說):

index = 0 
i = 0 
while index < len(inputphrase): 
    if inputphrase[index] in vowels: 
     i += 1 
    index += 1 
print(i) 
+0

我知道使用for循環會工作,但有什麼方法可以使用while循環嗎? – MonkeyMaker21

+0

@MatthewGaray我不知道你爲什麼想這樣做,但肯定,看看編輯。 – L3viathan

+3

**而**在這裏並不特別合適。當你進入循環時,你確切地知道你需要經歷多少次。退出條件不依賴於循環內部的內容。這使得**成爲適當的選擇。 – Prune

2
print len([i for i in inputphrase if i in vowels]) 
+4

總是有一個代碼打高爾夫球的地方;) – Weboide

+2

'sum(1 for in in inputphrase if I in vowels)''better better ... – dawg

+3

'sum(inputphrase.count(x)for x in vowels)' – L3viathan

0

你也可以使用collections

from collections import Counter 
sum([Counter(inputphrase)[i] for i in vowels]) 
+0

這個總和inputphrase中的所有元音,但其他解決方案計算出現的次數,所以也許我只是誤解了這個問題... –

+0

@innoSPG This顯然是一個答案。這可能是錯誤的或不完整的,但它是一個答案。如果它是錯誤的,倒投它。請正確使用審閱隊列,並只刪除那些不是答案的東西。 – Andy

+0

@安迪,我很快判斷錯了;最初的答案是「你也可以使用'收集'」,如果沒有給予足夠的重視,很容易錯失判斷。對不起Juraj。請確保不要因爲這樣的介紹而讓你的答案如此薄弱。我刪除了評論。 – innoSPG