2 usuarios conectados

Hora.De formato 24h a formato 12h en Python

Comparte esto

 
Escribe un código Python que tome una lista de horas en formato de 24 horas (por ejemplo, "09:30", "14:15", "23:00") y devuelva una nueva lista con esas horas convertidas al formato de 12 horas AM/PM (por ejemplo, "9:30 AM", "2:15 PM", "11:00 PM").

.


Más ejercicios




Mostrar/Ocultar ejercicio resuelto


  Solución al Ejercicio: Hora.De formato 24h a formato 12h

📋 Copiar código


def convertir_horas_24_a_12(lista_horas_24):
  """
  Toma una lista de horas en formato de 24 horas y devuelve una nueva lista con esas horas
  convertidas al formato de 12 horas AM/PM.

  Args:
    lista_horas_24: Una lista de cadenas de texto representando horas en formato "HH:MM".

  Returns:
    Una nueva lista de cadenas de texto representando las horas en formato "h:MM AM/PM".
    Devuelve una lista vacía si la lista de entrada está vacía.
    Maneja errores básicos de formato de hora.
  """
  lista_horas_12 = []
  for hora_24 in lista_horas_24:
    try:
      partes = hora_24.split(':')
      hora = int(partes[0])
      minuto = int(partes[1])

      if 0 <= hora <= 23 and 0 <= minuto <= 59:
        periodo = "AM"
        if hora == 0:
          hora_12 = 12
        elif hora == 12:
          hora_12 = 12
          periodo = "PM"
        elif hora > 12:
          hora_12 = hora - 12
          periodo = "PM"
        else:
          hora_12 = hora

        lista_horas_12.append(f"{hora_12}:{minuto:02d} {periodo}")
      else:
        lista_horas_12.append(f"Formato de hora inválido: {hora_24}")
    except (ValueError, IndexError):
      lista_horas_12.append(f"Formato de hora inválido: {hora_24}")
  return lista_horas_12

# Ejemplo de uso
horas_24 = ["09:30", "14:15", "00:00", "23:00", "12:00", "08:05", "25:00", "10;45"]
horas_12 = convertir_horas_24_a_12(horas_24)
print(f"Lista de horas en formato 24 horas: {horas_24}")
print(f"Lista de horas en formato 12 horas AM/PM: {horas_12}")

otra_lista = ["18:00", "05:30"]
otras_horas_12 = convertir_horas_24_a_12(otra_lista)
print(f"Otra lista de horas en formato 24 horas: {otra_lista}")
print(f"Otra lista de horas en formato 12 horas AM/PM: {otras_horas_12}")


Explicación del Código:

  1. def convertir_horas_24_a_12(lista_horas_24)::

    • Se define una función llamada convertir_horas_24_a_12 que toma una lista de cadenas de texto (lista_horas_24) como argumento. Se espera que cada cadena represente una hora en formato "HH:MM".
  2. """Docstring...""":

    • La cadena de documentación explica la función, su argumento y lo que devuelve.
  3. lista_horas_12 = []:

    • Se inicializa una lista vacía llamada lista_horas_12. Esta lista se utilizará para almacenar las horas convertidas al formato de 12 horas AM/PM.
  4. for hora_24 in lista_horas_24::

    • Se inicia un bucle for para iterar sobre cada cadena de hora en la lista_horas_24.
  5. try...except (ValueError, IndexError)::

    • Se utiliza un bloque try...except para manejar posibles errores que puedan ocurrir si la cadena de hora no tiene el formato esperado (por ejemplo, si no contiene un ":", o si las partes no son números).
  6. partes = hora_24.split(':'):

    • Dentro del bloque try, se intenta dividir la cadena hora_24 en dos partes utilizando el carácter ":" como separador. El resultado se almacena en la lista partes.
  7. hora = int(partes[0]) y minuto = int(partes[1]):

    • Se intenta convertir la primera parte (partes[0]) a un entero y se almacena en la variable hora, representando la hora.
    • Se intenta convertir la segunda parte (partes[1]) a un entero y se almacena en la variable minuto, representando los minutos.
  8. if 0 <= hora <= 23 and 0 <= minuto <= 59::

    • Se verifica si los valores de hora y minuto están dentro de los rangos válidos para un formato de 24 horas.
  9. Bloque de conversión a formato 12 horas:

    • periodo = "AM": Se asume inicialmente que el periodo es AM.
    • if hora == 0:: Si la hora es 0 (medianoche), se convierte a 12 AM.
    • elif hora == 12:: Si la hora es 12 (mediodía), se mantiene como 12 y el periodo se establece en PM.
    • elif hora > 12:: Si la hora es mayor que 12, se resta 12 para obtener la hora en formato de 12 horas y el periodo se establece en PM.
    • else:: Para las horas de 1 a 11, la hora se mantiene igual y el periodo es AM (ya establecido por defecto).
    • hora_12 = hora: Se asigna la hora convertida a la variable hora_12.
  10. lista_horas_12.append(f"{hora_12}:{minuto:02d} {periodo}"):

    • Se formatea la hora convertida en una cadena con el formato "h:MM AM/PM". :02d asegura que los minutos siempre se muestren con dos dígitos (por ejemplo, "05" en lugar de "5"). Esta cadena se añade a la lista_horas_12.
  11. else: y except::

    • Si la hora o los minutos están fuera de rango o si ocurre un error de formato (ValueError o IndexError al dividir la cadena), se añade un mensaje de "Formato de hora inválido" a la lista_horas_12 junto con la hora original.
  12. return lista_horas_12:

    • Después de procesar todas las horas de la lista de entrada, la función devuelve la lista_horas_12 que contiene las horas convertidas (o mensajes de error para formatos inválidos)

     

  13. Ejemplo de uso:

    • Se crean dos listas de horas en formato de 24 horas (horas_24 y otra_lista).
    • Se llama a la función convertir_horas_24_a_12 con cada lista y el resultado se imprime. El ejemplo incluye casos válidos e inválidos para demostrar el manejo de errores.