1 usuario conectado

Justificar cadena. Ejercicio en Python

Comparte esto

 
Escribe una función en Python llamada justificar_texto que tome una cadena de texto y un ancho como entrada. La función debe devolver una nueva cadena donde las palabras de la línea original estén separadas por suficientes espacios para que la línea alcance el ancho especificado. Si una línea ya es más larga que el ancho, se devuelve sin cambios (en esta versión simplificada).

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  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}'")


  1. Explicación del Código:

    1. 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.
    2. palabras = texto.split():

      • Divide el texto en una lista de palabras.
    3. if not palabras::

      • Si no hay palabras, devuelve una cadena vacía.
    4. 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).
    5. num_palabras = len(palabras):

      • Obtiene el número de palabras en la lista.
    6. if num_palabras == 1::

      • Si solo hay una palabra, se justifica a la izquierda al ancho especificado usando ljust().
    7. espacios_necesarios = ancho - len(texto):

      • Calcula el número total de espacios que se necesitan añadir para alcanzar el ancho deseado.
    8. 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.
    9. 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.
    10. linea_justificada = "":

      • Inicializa una cadena vacía para construir la línea justificada.
    11. 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.
    12. linea_justificada += palabras[-1]:

      • Añade la última palabra a la línea justificada (sin espacios adicionales después).
    13. 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.