Siguiendo con los ejercicios de programación en Python vamos a ver cómo descomprimir o expandir cada letra de una cadena según el número que está junto a ella.
Por ejemplo, si tenemos la siguiente cadena formada por pares de letras y números en donde cada número indica las veces que un carácter debe expandirse:
a1e4o6z9
Al expandirla debe aparecer lo siguiente:
aeeeeoooooozzzzzzzzz
Básicamente estamos descomprimiendo la cadena, justamente lo contrario a cuando agrupamos las letras junto con su conteo haciendo un tipo de resumen.
Explicación del algoritmo
Las reglas dicen que el número solo irá del 1 al 9, por lo que podemos estar seguros de que los números serán solo de un dígito.
Al inicio de todo declaramos una cadena vacía que tendrá el resultado.
Con esto podemos recorrer la cadena “de 2 en 2” recortándola, y en cada iteración obtendríamos una letra junto con el número que debe repetirse.
Por ejemplo, si tenemos a1e4o6z9
en el primer paso tendríamos a1
, en el segundo e4
y así sucesivamente; todo en pares.
Entonces ya tenemos el par, en la posición 0 tenemos a la letra y en la 1 al número de veces que se repite.
Extraemos cada cosa, multiplicamos la letra por el número (ya convertido a entero) y concatenamos el resultado en la cadena que declaramos al inicio.
Al final ya habremos expandido la cadena, colocando cada carácter o letra la cantidad de veces que lo indica el número a su derecha.
Expandir letras de cadena con Python
Vayamos al código. Lo he encerrado en una función que recibe la cadena que tiene las letras “comprimidas” y devuelve la cadena expandiendo cada una de sus letras:
def expandir(datos):
salida = ""
# Hacer un ciclo "de 2 en 2", es decir, vamos en 0, 2, 4, 6, etcétera
for i in range(0, len(datos), 2):
# Extraer la base y cantidad
par = datos[i:i+2]
letra = par[0]
cantidad = int(par[1])
# Expandimos la base multiplicando la cadena
letra_expandida = letra * cantidad
# La agregamos al resultado final
salida += letra_expandida
return salida
En la línea 2 declaramos la cadena que tendrá el resultado. Luego usamos range
para iterar la cadena en pasos de 2 en 2, es decir, primero vamos en 0, luego 2, 4, hasta la longitud de la cadena.
Más adelante en la línea 6 cortamos la cadena desde el índice hasta el índice + 2, lo que nos dará el par que necesitamos.
Extraemos los valores en la línea 7 y 8 convirtiendo lo necesario, expandimos la letra según el número en la línea 10 y agregamos al resultado en la línea 12.
Poniendo todo junto
El código completo junto con un ejemplo queda como se ve a continuación:
def expandir(datos):
salida = ""
# Hacer un ciclo "de 2 en 2", es decir, vamos en 0, 2, 4, 6, etcétera
for i in range(0, len(datos), 2):
# Extraer la base y cantidad
par = datos[i:i+2]
letra = par[0]
cantidad = int(par[1])
# Expandimos la base multiplicando la cadena
letra_expandida = letra * cantidad
# La agregamos al resultado final
salida += letra_expandida
return salida
print(expandir("a1e4o6z9"))
La salida es la siguiente para este ejemplo:
Recuerda que por el momento esto solo funciona con números de un dígito, pero con las modificaciones necesarias podría funcionar con más números sin ningún problema.
Por aquí te dejo más tutoriales de Python.