REVIT ARCHITECTURE (931) – PYTHON – Funciones (15) –  Devolver el resultado de una función (6) Ejemplo de función con tres argumentos

En el siguiente artículo se va a presentar una función que tome tres argumentos (un año, un mes y un día del mes) y devuelva el día correspondiente del año, o devuelva None si alguno de los argumentos es inválido.

Función is_year_leap(year)

Esta función determina si un año es bisiesto. Un año es bisiesto si:

Es divisible por 4.
No es divisible por 100, a menos que también sea divisible por 400.

7244

Función days_in_month(year, month)

Esta función devuelve el número de días en un mes dado de un año específico.

Primero verifica si el mes es válido (entre 1 y 12).
Si el mes es válido, retorna el número de días de ese mes considerando si el año es bisiesto para el mes de febrero.

def days_in_month(year, month):
if month < 1 or month > 12:
return None

if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
return 31
elif month == 4 or month == 6 or month == 9 or month == 11:
return 30
elif month == 2:
if is_year_leap(year):
return 29
else:
return 28
return None

Función day_of_year(year, month, day)
Esta función calcula el día del año para una fecha dada (año, mes y día).

Verifica si el mes y el día son válidos.
Suma los días de todos los meses anteriores al mes dado.
Añade los días del mes actual hasta el día dado.

7245

Caso de prueba
Finalmente, se prueba la función con una fecha específica: 31 de diciembre de 2000. Esta fecha debería retornar 366, ya que el año 2000 es un año bisiesto.

7246

Este print debería mostrar 366.

Explicación de los pasos:
Comprobación de validez del mes:

Si el mes es menor que 1 o mayor que 12, la función devuelve None.
Comprobación de validez del día:

Si el día es menor que 1 o mayor que el número de días en ese mes (days_in_month), la función devuelve None.
Cálculo del día del año:

Se inicializa total_days en 0.
Se itera sobre los meses anteriores al mes dado, sumando el número de días de cada mes al total_days.
Se añaden los días del mes actual hasta el día dado.
Devolución del resultado:

La función devuelve el número total de días calculado.
Así, el código verifica la validez de los argumentos y calcula el día del año de manera precisa, considerando los años bisiestos.

Nota aclaratoria sobre el funcionamiento del bucle for presentado en la función superior.

for m in range(1, month):
days_in_current_month = days_in_month(year, m)
if days_in_current_month is None:
return None
total_days += days_in_current_month

total_days += day

return total_days

7247

Esta línea inicializa la variable total_days en 0. Esta variable se usará para acumular el número total de días desde el inicio del año hasta la fecha especificada (año, mes y día).

Iteración sobre los meses anteriores

7248

Este bloque de código hace lo siguiente:

Bucle for:

for m in range(1, month): Este bucle itera sobre los meses desde enero (m = 1) hasta el mes anterior al mes dado (month – 1).
Por ejemplo, si month es 4 (abril), el bucle iterará sobre los valores 1 (enero), 2 (febrero) y 3 (marzo).
Obtención de días en el mes actual:

days_in_current_month = days_in_month(year, m): Esta línea llama a la función days_in_month para obtener el número de días en el mes m del año dado.
days_in_month(year, m) devuelve el número de días en el mes m considerando si el año es bisiesto.
Verificación de validez del mes:

if days_in_current_month is None: Si days_in_month devuelve None, significa que el mes no es válido.
return None: Si se encuentra un mes no válido, la función day_of_year termina y devuelve None.
Acumulación de días:

total_days += days_in_current_month: Si el mes es válido, el número de días en ese mes se suma a total_days.
Este proceso se repite para cada mes desde enero hasta el mes anterior al mes dado, acumulando el total de días transcurridos en esos meses.
Adición de los días del mes actual

7249

Después de salir del bucle, se añaden los días del mes actual (day) a total_days.

Devolución del resultado

7250

Finalmente, la función devuelve total_days, que ahora contiene el número total de días desde el inicio del año hasta el día dado del mes dado.

Ejemplo detallado
Supongamos que la fecha es 15 de abril de 2023 (año = 2023, mes = 4, día = 15):

Inicialización: total_days se inicializa en 0.

Iteración sobre los meses anteriores:

Para enero (m = 1): days_in_month(2023, 1) devuelve 31, entonces total_days se incrementa a 31.
Para febrero (m = 2): days_in_month(2023, 2) devuelve 28 (2023 no es bisiesto), entonces total_days se incrementa a 31 + 28 = 59.
Para marzo (m = 3): days_in_month(2023, 3) devuelve 31, entonces total_days se incrementa a 59 + 31 = 90.
Adición de los días de abril:

total_days += 15, entonces total_days se incrementa a 90 + 15 = 105.
Devolución del resultado:

La función devuelve 105, indicando que el 15 de abril de 2023 es el día 105 del año.
Este proceso asegura que el cálculo del día del año sea preciso, considerando la longitud de cada mes y los años bisiestos.

Licencia Creative Commons Contenido Web de Yolanda Muriel está sujeto bajo Licencia Creative Commons Atribución-NoComercial-SinDerivadas 3.0 Unported.

Deja un comentario