.
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.