Hoy vamos a ver un ejercicio de programación en Python sobre conteo de letras en una cadena.
Lo que tenemos que hacer es contar cuántas veces aparece una letra en una cadena y luego mostrar la letra, un asterisco por cada ocurrencia y el porcentaje que ocupa esa letra dentro de la cadena.
Por poner un ejemplo, al invocar a la función como se ve a continuación:
imprimir_porcentaje_letras("Hola mundo. Me gusta mucho programar en Python y publicarlo en mi blog: https://parzibyte.me/blog")
La salida sería la siguiente:
H * 1.0 %
o ******** 8.2 %
l ***** 5.2 %
a ****** 6.2 %
************* 13.4 %
m ***** 5.2 %
u **** 4.1 %
n **** 4.1 %
d * 1.0 %
. ** 2.1 %
M * 1.0 %
e ***** 5.2 %
g **** 4.1 %
s ** 2.1 %
t ***** 5.2 %
c ** 2.1 %
h *** 3.1 %
p **** 4.1 %
r ***** 5.2 %
P * 1.0 %
y *** 3.1 %
b **** 4.1 %
i *** 3.1 %
: ** 2.1 %
/ *** 3.1 %
z * 1.0 %
Si te fijas, también cuenta cuántas veces aparece el carácter del espacio, dos puntos, barra, etcétera. Muestra el conteo de las letras junto con su porcentaje y una cantidad de asteriscos.
Explicación del algoritmo
Contando letras
Para contar el porcentaje de aparición de letras en una cadena con Python vamos a usar un diccionario, usando la letra como clave. Entonces la clave será la letra, y el valor será otro diccionario que tendrá el conteo.
Recorremos la cadena o frase letra por letra. En cada iteración comprobamos si el carácter existe en el diccionario; en caso de que no entonces lo agregamos con un conteo de 0 por defecto.
Después de hacer la comparación anterior aumentamos el conteo del diccionario en esa clave. Básicamente si la letra no existe la agregamos, y si existe le aumentamos el conteo.
Calculando porcentaje
Hasta ahora ya tenemos el diccionario con cada letra y la cantidad de veces que aparece. Lo que haremos a continuación será recorrer el diccionario y calcular el porcentaje.
La fórmula es:
Porcentaje = (cantidad de veces que aparece la letra * 100) / cantidad total de letras
Finalmente el diccionario tendrá como clave la letra, y como valor el conteo y porcentaje. Ya solo falta imprimir.
Porcentaje de ocurrencia de letras en frase con Python
Es momento de pasar al código. Es importante mencionar que la función puede ser modificada a tu gusto, y que por ejemplo podrías hacer que solo devuelva el diccionario para que lo imprimas en otro lugar.
Comenzamos contando las letras:
diccionario = {}
for letra in cadena:
if not letra in diccionario:
diccionario[letra] = {
"conteo": 0,
}
diccionario[letra]["conteo"] += 1
Después recorremos el diccionario y vamos calculando el porcentaje que representa la letra:
for letra in diccionario:
diccionario[letra]["porcentaje"] = (
diccionario[letra]["conteo"]*100)/cantidad_letras
Finalmente volvemos a iterar el diccionario e imprimimos lo que el ejercicio requiere. Por cierto, para imprimir los asteriscos simplemente hacemos un ciclo for e imprimimos un asterisco indicando el end
en ""
para que no imprima salto de línea.
for letra in diccionario:
print(letra, end=" ")
for i in range(diccionario[letra]["conteo"]):
print("*", end="")
porcentaje_redondeado = round(diccionario[letra]["porcentaje"], 1)
print(f" {porcentaje_redondeado} %")
Nota: estoy usando round para redondear el porcentaje. Puedes modificarlo si quieres mostrarlo completo o con más decimales.
Poniendo todo junto
La función y su modo de uso queda así:
"""
https://parzibyte.me/blog
"""
def imprimir_porcentaje_letras(cadena):
diccionario = {}
for letra in cadena:
if not letra in diccionario:
diccionario[letra] = {
"conteo": 0,
}
diccionario[letra]["conteo"] += 1
cantidad_letras = len(cadena)
for letra in diccionario:
diccionario[letra]["porcentaje"] = (
diccionario[letra]["conteo"]*100)/cantidad_letras
for letra in diccionario:
print(letra, end=" ")
for i in range(diccionario[letra]["conteo"]):
print("*", end="")
porcentaje_redondeado = round(diccionario[letra]["porcentaje"], 1)
print(f" {porcentaje_redondeado} %")
imprimir_porcentaje_letras("Hola mundo. Me gusta mucho programar en Python y publicarlo en mi blog: https://parzibyte.me/blog")
De este modo podemos contar la cantidad de veces que aparece una letra en una oración, indicar ese conteo con asteriscos y también mostrar el porcentaje.
Si quieres aprender Python te recomiendo leer otras entradas de este lenguaje en mi blog.