viernes, 3 de agosto de 2018

Años bisiestos en Python

Reto: Bisiesto

Crear una función que dado un año diga si es bisiesto.



Podemos consultar la Wikipedia para saber qué años son bisiestos.
El calendario Juliano dio paso a calendario Gregoriano en 1582. Desde entonces se estableció la regla que nos dice cuando una año es bisiesto y por lo tanto tiene 366 días, en lugar de 365, ya que se añade un día más el 29 de febrero.

  • Un año es bisiesto si es múltiplo de 4, salvo que...
    • el año termine en 00, en cuyo caso, no será bisiesto, salvo que ...
      • el año sea múltiplo de 400, en cuyo caso, si será bisiesto.
Como podemos observar para que un año sea bisiesto existe una regla general (que sea múltiplo de 4) pero a esta regla general existe una excepción (que el año termine en 00, esto es, los finales de siglo) en cuyo caso el año no será bisiesto, y finalmente existe una excepción a la excepción anterior (que el año sea múltiplo de 400) en cuyo caso el año si será bisiesto.

Así por ejemplo, los años 2100, 2200, 2300 no serán bisiestos, pero el 2400 si lo será.


Método 1

Definimos una función que contiene un if con una condición lógica compleja que resume la regla que nos da el año bisiesto.




def bisiesto(x):
  if x%4==0 and (not(x%100==0) or x%400==0 ):
    texto='es bisiesto.'
  else:
    texto='es un año NO bisiesto.'
  return texto
x=int(input('Introduzca un año entre 1600 y 2500:'))
print(x,bisiesto(x))


Método 2

Generamos un año aleatorio y definimos una función que nos retornará True si se trata de una año bisiesto y nos retornará False si el año generado no es bisiesto. Con este método hemos optado por realizar varios if concatenados para resolver la lógica de los años bisiestos.

import random
random.seed()
x=random.randint(1600,2500)
def bisiesto(x):
  if x%4==0:
    if x%100==0:
      if x%400==0:
        return True
      else:
        return False
    else:
      return True
  else:
    return False
if bisiesto(x):
  print(x,'es un año bisiesto.')
elif not(bisiesto(x)):
  print(x,'no es un año bisiesto')

No hay comentarios:

Publicar un comentario