En este post te voy a enseñar a obtener los días totales que tiene un mes, a partir del número de mes, tomando en cuenta el año bisiesto y el mes, ya que no todos los días tienen 30, 31 o 28 días.
Si bien el resultado será confiable, esto que te muestro es más bien la solución a un ejercicio de programación en Python que indica cuántos días tiene un mes tomando en cuenta el año.
Explicación del algoritmo
Para saber la cantidad de días que tiene un mes, necesitamos también el año; esto para el caso de febrero, pues bien sabemos que los años bisiestos agregan un día a febrero.
A partir del año y mes hacemos una comprobación con un if
para evaluar el mes. En caso de que sea febrero, comprobamos si es o no bisiesto con una función expuesta anteriormente.
Código
Veamos el código. Tenemos la siguiente función que recibe dos enteros (año con mes) y devuelve un entero indicando la cantidad de días que tiene el mes en ese año. Toma en cuenta que el mes comienza a contar en 1, así que enero es 1 y diciembre es 12.
def obtener_dias_del_mes(mes: int, anio: int) -> int:
# Abril, junio, septiembre y noviembre tienen 30
if mes in [4, 6, 9, 11]:
return 30
# Febrero depende de si es o no bisiesto
if mes == 2:
if es_bisiesto(anio):
return 29
else:
return 28
else:
# En caso contrario, tiene 31 días
return 31
Como ves el código es fácil de entender. Si el mes es abril, junio, septiembre o noviembre se devuelve 30; en este caso ahorramos if
con el operador in.
En caso de que sea febrero, se evalúa si el año es bisiesto y se devuelve ya sea 28 o 29. Finalmente, si no se cumple ninguno de los otros casos, se devuelve 31.
Poniendo todo junto
El código que demuestra el uso de la función, así como las funciones auxiliares escritas en Python quedan como se ve a continuación:
"""
https://parzibyte.me/blog
"""
def es_bisiesto(anio: int) -> bool:
return anio % 4 == 0 and (anio % 100 != 0 or anio % 400 == 0)
def obtener_dias_del_mes(mes: int, anio: int) -> int:
# Abril, junio, septiembre y noviembre tienen 30
if mes in [4, 6, 9, 11]:
return 30
# Febrero depende de si es o no bisiesto
if mes == 2:
if es_bisiesto(anio):
return 29
else:
return 28
else:
# En caso contrario, tiene 31 días
return 31
# Probamos
mes = 9
anio = 2020
dias = obtener_dias_del_mes(mes, anio)
print(dias)
Para el caso del código que he colocado, se imprimirá 30 días, pues esa es la cantidad de días que tiene el mes de septiembre del 2020.
Puedes leer más sobre Python en mi blog.