python

Python: días que tiene un mes

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

6 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

6 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

6 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

6 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

6 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

7 días hace

Esta web usa cookies.