Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Contar letras de una palabra
#1
Hola 

Perdón por pregunta muy básicas. Si me piden de una lista que cuente el número de palabras y luego que de aquellas que está presente más de dos veces contar el número de letras que aparecen en cada palabra y devolver los valores en un diccionario con la letra en la key y la cuenta en el value.

Gracias
Responder
#2
Hola, bienvenido.

¿Dónde tenés el problema en particular con ese ejercicio?

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(16-11-2020, 03:13 PM)Francisco escribió: Hola, bienvenido.

¿Dónde tenés el problema en particular con ese ejercicio?

Saludos

Creo que la segunda parte está mal. Adjunto el código.


Archivos adjuntos Miniatura(s)
   
Responder
#4
Hola. Si este es tu código:

Código:
def parte_b(palabras):
    dic = {}
    for palabra in palabras:
        count = 0
        for letra in palabra:
            if letra == letra:
                dic[letra] = 0
                count += 1
                dic[letra] = count
    return dic

Tené en cuenta lo siguente. Primero, estás creando un solo diccionario, de modo que se van a contar en el mismo diccionario indistintamente las letras de cualquiera de las palabras pasadas como argumento. Segundo, estás creando un contador por cada palabra (fijate que lo tenés en el bucle "for palabra in palabras"), pero debería ser por cada letra ("for letra in palabra"). Tercero, la condición "letra == letra" es tautológica (o sea, siempre da verdadero, A == A, 1 == 1, cualquier cosa == cualquier cosa).

Haciendo esas correcciones, quedaría así:

Código:
def parte_b(palabras):
    dic_palabras = {}
    for palabra in palabras:
        dic_letras = {}
        for letra in palabra:
            count = 0
            for letra2 in palabra:
                if letra == letra2:
                    count += 1
            dic_letras[letra] = count
        dic_palabras[palabra] = dic_letras
    return dic_palabras

# {'solo': {'s': 1, 'o': 2, 'l': 1}, 'lazo': {'l': 1, 'a': 1, 'z': 1, 'o': 1}, 'soca': {'s': 1, 'o': 1, 'c': 1, 'a': 1}}
print(parte_b(["solo", "lazo", "soca"]))

Se puede simplificar usando count(), que cuenta la cantidad de letras en una palabra:

Código:
def parte_b(palabras):
    dic_palabras = {}
    for palabra in palabras:
        dic_letras = {}
        for letra in palabra:
            if letra in dic_letras:
                continue
            dic_letras[letra] = palabra.count(letra)
        dic_palabras[palabra] = dic_letras
    return dic_palabras

Hay una forma todavía más simplificada usando collections.Counter:

Código:
from collections import Counter

def parte_b(palabras):
    return {palabra: dict(Counter(palabra)) for palabra in palabras}


Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 4 invitado(s)