2014-10-28 80 views
1

好了,所以我所做的就是計數元音的數量在一個字符串在Python

def countvowels(st): 
    result=st.count("a")+st.count("A")+st.count("e")+st.count("E")+st.count("i")+st.count("I")+st.count("o")+st.count("O")+st.count("u")+st.count("U") 
    return result 

這工作(我知道壓痕可能是錯的這個職位,但我的方式有它在python縮進,有用)。

有沒有更好的方法來做到這一點?使用for循環?

+0

還看到:http://stackoverflow.com/questions/19237791/counting-vowels-in-python – Paul 2014-10-28 05:15:32

+0

這個問題似乎會偏離因爲它是關於改善工作代碼 – 2014-10-28 15:29:22

回答

1

我會做類似

def countvowels(st): 
    return len ([c for c in st if c.lower() in 'aeiou']) 
+0

+1以避免「count」。 – 2014-10-28 04:46:57

+1

'sum(c.lower()in'aeiou'for c in st)'保存臨時列表 – 2014-10-28 05:02:45

0

你可以做,使用列表理解

def countvowels(w): 
    vowels= "aAiIeEoOuU" 
    return len([i for i in list(w) if i in list(vowels)]) 
+0

您不需要'list'構造函數。字符串在Python中是可迭代的。 – 2014-10-28 04:46:22

+0

這是真的! +1 – user3378649 2014-10-28 04:48:02

1

肯定有更好的方法。這是一個。

def countvowels(s): 
     s = s.lower() 
     return sum(s.count(v) for v in "aeiou") 
0

你可以使用正則表達式很容易地做到這一點。但是在我看來,你希望不這樣做。因此,這裏是一些代碼,這樣做的:

string = "This is a test for vowel counting" 
print [(i,string.count(i)) for i in list("AaEeIiOoUu")] 
0

可以以不同的方式,在谷歌先看看前問這樣做,我就複製粘貼其中2

def countvowels(string): 
    num_vowels=0 
    for char in string: 
     if char in "aeiouAEIOU": 
      num_vowels = num_vowels+1 
    return num_vowels 

data = raw_input("Please type a sentence: ") 
vowels = "aeiou" 
for v in vowels: 
    print v, data.lower().count(v) 
0

您也可以嘗試Countercollections(僅適用於Python 2.7+),如下所示。它會顯示每個字母重複了多少次。

from collections import Counter 
st = raw_input("Enter the string") 
print Counter(st) 

但是你想要特別的元音然後試試這個。

import re 

def count_vowels(string): 
    vowels = re.findall('[aeiou]', string, re.IGNORECASE) 
    return len(vowels) 

st = input("Enter a string:") 
print count_vowels(st) 
0

這裏是一個版本使用地圖:

phrase=list("This is a test for vowel counting") 
base="AaEeIiOoUu" 
def c(b): 
    print b+":",phrase.count(b) 
map(c,base)