Contando las vocales

¿Puede alguien decirme qué está mal con este script? Soy un Python Newb pero parece que no entiendo qué podría estar causando que no funcione.

def find_vowels(sentence): """ >>> find_vowels(test) 1 """ count = 0 vowels = "aeiuoAEIOU" for letter in sentence: if letter in vowels: count += 1 print count if __name__ == '__main__': import doctest doctest.testmod() 

Además del hecho de que está devolviendo un conteo pero esperando una cadena de vocales, como han dicho otros, también debe cambiar la línea

 >>> find_vowels(test) 

a

 >>> find_vowels('test') 

¡Olvidaste las citas!

Está imprimiendo count (un número), pero su prueba espera la letra e .

Además, la forma más python de contar las vocales sería una comprensión de lista :

 >>> len([letter for letter in 'test' if letter in vowels]) 1 

¿Quieres ver las vocales que has encontrado? Simplemente suelta la función de len líder:

 >>> [letter for letter in 'stackoverflow' if letter in vowels] ['a', 'o', 'e', 'o'] 

Su prueba espera que la función imprima las vocales que encontró, pero en cambio está imprimiendo el conteo. También le está pasando la test variable en lugar de la cadena 'test' , que debe hacer

 >>> find_vowels('test') 

Finalmente, la sangría está desactivada, pero supongo que fue un problema de pegado

 def count_vowels(word): ''' str->(number) returns the number of vowels used count_vowels('ramesh') >>>2 count_vowels('sindhu') >>>2 ''' vowels=list('a,e,i,o,u') return vowels.count(word) 

Necesitas sangrar el cuerpo de find_vowels.

¿Por qué no usar str.count ()? Por ejemplo, s = ‘heeello world’

imprimir str.count (s, ‘e’) 3

Esta solución es bastante limpia y más eficiente que las soluciones ya publicadas para cadenas grandes; todo el trabajo duro ocurre en el C-loop de la construcción del objeto Counter.

 from collections import Counter vowels = "aeiuoAEIOU" def count_vowels(txt): c = Counter(txt) return sum(c[v] for v in vowels) print count_vowels('testing')