.
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:
-
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".
-
"""Docstring...""":
- La cadena de documentación explica la
función, su argumento y lo que devuelve.
-
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.
-
for hora_24 in lista_horas_24::
- Se inicia un bucle
for para
iterar sobre cada cadena de hora en la lista_horas_24.
-
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).
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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)
-
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.