.
Solución al Ejercicio: Justificar cadena
📋 Copiar código
def justificar_texto(texto, ancho):
"""
Justifica una línea de texto a un ancho específico (versión básica).
Args:
texto: La cadena de texto a justificar.
ancho: El ancho deseado para la línea.
Returns:
La cadena justificada o la original si ya es más larga.
"""
palabras = texto.split()
if not palabras:
return ""
if len(texto) >= ancho:
return texto
num_palabras = len(palabras)
if num_palabras == 1:
return palabras[0].ljust(ancho)
espacios_necesarios = ancho - len(texto)
espacios_entre_palabras = espacios_necesarios // (num_palabras - 1)
espacios_extra = espacios_necesarios % (num_palabras - 1)
linea_justificada = ""
for i in range(num_palabras - 1):
linea_justificada += palabras[i] + " " * espacios_entre_palabras
if i < espacios_extra:
linea_justificada += " "
linea_justificada += palabras[-1]
return linea_justificada
# Ejemplos de uso
texto1 = "Esta es una linea corta."
ancho1 = 30
resultado1 = justificar_texto(texto1, ancho1)
print(f"'{texto1}' justificado a {ancho1}: '{resultado1}'")
texto2 = "Una palabra."
ancho2 = 15
resultado2 = justificar_texto(texto2, ancho2)
print(f"'{texto2}' justificado a {ancho2}: '{resultado2}'")
texto3 = "Texto ya largo."
ancho3 = 10
resultado3 = justificar_texto(texto3, ancho3)
print(f"'{texto3}' justificado a {ancho3}: '{resultado3}'")
texto4 = ""
ancho4 = 20
resultado4 = justificar_texto(texto4, ancho4)
print(f"'' justificado a {ancho4}: '{resultado4}'")
texto5 = "Varias palabras para justificar."
ancho5 = 40
resultado5 = justificar_texto(texto5, ancho5)
print(f"'{texto5}' justificado a {ancho5}: '{resultado5}'")
-
Explicación del Código:
-
def justificar_texto(texto,
ancho):
:
- Define una función llamada
justificar_texto
que toma una cadena de texto (texto
)
y un entero (ancho
) como entrada.
-
palabras = texto.split()
:
- Divide el texto en una lista de
palabras.
-
if not palabras:
:
- Si no hay palabras, devuelve una
cadena vacía.
-
if len(texto) >= ancho:
:
- Si la longitud del texto ya es mayor
o igual al ancho deseado, se devuelve el texto original sin cambios
(en esta versión simple).
-
num_palabras =
len(palabras)
:
- Obtiene el número de palabras en la
lista.
-
if num_palabras == 1:
:
- Si solo hay una palabra, se justifica
a la izquierda al ancho especificado usando
ljust()
.
-
espacios_necesarios = ancho
- len(texto)
:
- Calcula el número total de espacios
que se necesitan añadir para alcanzar el ancho deseado.
-
espacios_entre_palabras =
espacios_necesarios // (num_palabras - 1)
:
- Calcula el número mínimo de espacios
que se deben insertar entre cada par de palabras.
-
espacios_extra =
espacios_necesarios % (num_palabras - 1)
:
- Calcula el número de espacios extra
que sobran después de la distribución uniforme. Estos espacios extra
se distribuirán uno por uno entre los primeros pares de palabras.
-
linea_justificada = ""
:
- Inicializa una cadena vacía para
construir la línea justificada.
-
for i in
range(num_palabras - 1):
:
- Itera a través de las palabras
(excepto la última).
- Añade la palabra actual a
linea_justificada
.
- Añade el número calculado de
espacios_entre_palabras
.
- Si el índice actual es menor que
espacios_extra
, añade un espacio adicional para
distribuir los espacios restantes.
-
linea_justificada +=
palabras[-1]
:
- Añade la última palabra a la línea
justificada (sin espacios adicionales después).
-
return linea_justificada
:
- Devuelve la cadena justificada.
Ejemplos de Uso:
Los ejemplos muestran cómo la función
intenta justificar diferentes líneas de texto a un ancho específico
añadiendo espacios entre las palabras.