¿Cómo contar las letras de una palabra?

Estoy tratando de hacer un script de Python que cuente la cantidad de letras en una palabra elegida al azar para mi juego de Hangman.

Ya miré a mi alrededor en la web, pero lo más que pude encontrar fue contar letras específicas en una palabra. Después de mirar más alrededor, terminé con esto, que no funciona por alguna razón. Si alguien pudiera señalar los errores, eso sería muy apreciado.

wordList = ["Tree", "Fish", "Monkey"] wordChosen = random.choice(wordList) wordCounter = wordChosen.lower().count['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] print(wordCounter) 

En primer lugar, su código contiene un error que es bastante importante de entender:

 wordChosen.lower().count['a', 'b'] #... 

count es una función y, por lo tanto, requiere que rodee sus parámetros con paréntesis y no con corchetes.

A continuación, debe intentar consultar la documentación de Python cuando utilice una función por primera vez. Eso debería ayudarte a entender por qué tu enfoque no funcionará.

Ahora para abordar su problema. Si desea contar el número de letras en su cadena, use len(wordChosen) que cuenta el número total de caracteres en la cadena.

Si desea contar las frecuencias de cada letra, ya se han sugerido algunos métodos. Aquí hay uno más usando un diccionario:

 import string LetterFreq={} for letter in string.ascii_lowercase: LetterFreq[letter] = 0 for letter in wordChosen.lower(): LetterFreq[letter] += 1 

Esto tiene la ventaja de que todas las letras no están presentes en la palabra a una frecuencia de 0 🙂

¡Espero que esto ayude!

¿Buscas collections.Counter ? collections.Counter ?

 >>> import collections >>> print(collections.Counter("Monkey")) Counter({'M': 1, 'y': 1, 'k': 1, 'o': 1, 'n': 1, 'e': 1}) >>> print(collections.Counter("Tree")) Counter({'e': 2, 'T': 1, 'r': 1}) >>> c = collections.Counter("Tree") >>> print("The word 'Tree' has {} distinct letters".format(len(c))) The word 'Tree' has 3 distinct letters >>> print("The word 'Tree' has {} instances of the letter 'e'".format(c['e'])) The word 'Tree' has 2 instances of the letter 'e' 

Problema:
El método de conteo solo toma un argumento y usted está tratando de pasar una lista completa.

Solución:
Simplemente itere sobre todas las letras, luego pruebe si están en la cadena antes de imprimirlas y su cantidad.

 import random wordList = ["Tree", "Fish", "Monkey"] wordChosen = random.choice(wordList) letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] for letter in letters: if letter in wordChosen.lower(): amount = str(wordChosen.lower().count(letter)) print(letter + " : " + amount) 

Resultado:
Si la palabra elegida al azar es “Árbol”:

 e : 2 r : 1 t : 1 

Conclusión:
El uso de colecciones es definitivamente un método más efectivo, pero creo que la forma en que lo he mostrado anteriormente crea más de la salida que estaba buscando.