2014-10-28 4 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 

Это работает (я знаю отступ может быть неправильным в этом посте, но так она у меня с отступом в питоне, оно работает).

Есть ли лучший способ сделать это? Использование для циклов?

+0

Смотри также: http://stackoverflow.com/questions/19237791/counting-vowels-in-python – Paul

+0

Этот вопрос, как представляется, OFF- потому что речь идет об улучшении рабочего кода –

ответ

1

Я хотел бы сделать что-то вроде

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

+1 для избежания 'count'. –

+1

'sum (c.lower() в 'aeiou' для c в st)' сохраняет временный список –

0

Вы можете сделать это, используя список понимание

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

Вам не нужны конструкторы 'list'. Строки повторяются в python. –

+0

Это правда! +1 – user3378649

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

Вы также можете попробовать Counter от collections (доступно только от 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) 
Смежные вопросы