Ejercicio 2

Escribir una función que cuente las palabras que hay en una frase y las devuelva dentro de un diccionario. También tiene que devolver una lista con las palabras que aparecen más de una vez. Por ejemplo si se le pasa la frase: 'La caracola está enterrada al lado de otra caracola de color' la función debe devolver el diccionario y la lista siguientes:

{'La': 1, 'caracola': 2, 'está': 1, 'enterrada': 1, 'al': 1, 'lado': 1, 'de': 2, 'otra': 1, 'color': 1}
['caracola', 'de']

Solución


In [2]:
def contar_palabras(frase):
    ''' Función que recibe una frase y devuelve la frecuencia de las palabras en la frase y las palabras que se repiten.

    Parámetros:
        - frase: Es una cadena de caracteres.
    Devuelve: Una tupla con un diccionario con las palabras y su frecuencia, y una lista con las palabras que se repiten.
    '''
    # Dividimos la frase por el espacio en blanco y guardamos las palabras en una lista.
    palabras = frase.strip().split()
    # Creamos un diccionario vacío para guardar las frecuencias de las palabras.
    frecuencias = {}
    # Recorremos la lista de palabras y vamos contando sus frecuencias.
    for palabra in palabras:
        # Si la palabra no está todavía en le diccionario, la añadimos con frecuencia 0.
        if palabra not in frecuencias:
            frecuencias[palabra] = 0
        # Incrementamos la frecuencia de la palabra en el diccionario.
        frecuencias[palabra] += 1
    # Creamos una lista vacía para guardar las palabras repetidas.
    repetidas=[]
    # Recorremos el diccionario de frecuencias
    for clave, valor in frecuencias.items():
        # Si la frecuencia de una palabra es mayor que 1 la añadimos a la lista.
        if valor > 1: repetidas.append(clave)
    # Devolvemos el diccionario de frecuencias y la lista de palabras repetidas.
    return frecuencias, repetidas

# Ejemplo
freq, rep = contar_palabras('La caracola está enterrada al lado de otra caracola de color')
print('Frecuencia de palabras:', freq)
print('Palabras repetidas: ', rep)


Frecuencia de palabras: {'La': 1, 'caracola': 2, 'está': 1, 'enterrada': 1, 'al': 1, 'lado': 1, 'de': 2, 'otra': 1, 'color': 1}
Palabras repetidas:  ['caracola', 'de']

Solución 2


In [5]:
def contar_palabras(frase):
    ''' Función que recibe una frase y devuelve la frecuencia de las palabras en la frase y las palabras que se repiten.

    Parámetros:
        - frase: Es una cadena de caracteres.
    Devuelve: Una tupla con un diccionario con las palabras y su frecuencia, y una lista con las palabras que se repiten.
    '''
    # Dividimos la frase por el espacio en blanco y guardamos las palabras en una lista.
    palabras = frase.strip().split()
    # Recorremos la lista de palabras, contamos sus frecuencias y las añadimos a un diccionario.
    frecuencias = {palabra:palabras.count(palabra) for palabra in palabras}
    # Recorremos el diccionario de frecuencias y generamos la lista con las palabras con frecuencia mayor que 1.
    repetidas = [palabra for palabra, frecuencia in frecuencias.items() if frecuencia > 1]
    # Devolvemos el diccionario de frecuencias y la lista de palabras repetidas.
    return frecuencias, repetidas

# Ejemplo
freq, rep = contar_palabras('La caracola está enterrada al lado de otra caracola de color')
print('Frecuencia de palabras:', freq)
print('Palabras repetidas: ', rep)


Frecuencia de palabras: {'La': 1, 'caracola': 2, 'está': 1, 'enterrada': 1, 'al': 1, 'lado': 1, 'de': 2, 'otra': 1, 'color': 1}
Palabras repetidas:  ['caracola', 'de']

In [ ]: