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 unif
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')
Método 3
Aplicamos en cascada los condicionales para llegar a la definición de año bisiesto que da la Wikipedia.def is_leap(year):
if year%400==0:
return True
else:
if year%100==0:
return False
else:
if year%4==0:
return True
else:
return False
print('El año {} ¿es bisiesto?: {}'.format(1800,is_leap(1800)))
print('El año {} ¿es bisiesto:? {}'.format(1900,is_leap(1900)))
print('El año {} ¿es bisiesto:? {}'.format(2000,is_leap(2000)))
print('El año {} ¿es bisiesto:? {}'.format(2040,is_leap(2040)))
print('El año {} ¿es bisiesto:? {}'.format(2400,is_leap(2400)))
print('El año {} ¿es bisiesto:? {}'.format(2100,is_leap(2100)))
print('El año {} ¿es bisiesto:? {}'.format(2200,is_leap(2200)))
print('El año {} ¿es bisiesto:? {}'.format(2300,is_leap(2300)))
print('El año {} ¿es bisiesto:? {}'.format(2500,is_leap(2500)))
Método 4
Este método es equivalente al anterior pero necesita menos líneas. Se van probando tres condicionales if por ese orden. Si el primero es cierto se entra dentro y se ejecuta el return que contiene, y ya no se sigue. Si es falso se pasa a evaluar el siguiente if, y así con el resto de los condicionales. Si no se cumple ninguno de los tres se ejecuta el último return que indica que el año analizado no es bisiesto. Esto se basa en la idea de que en una función cuando se ejecuta un return ya no se sigue con el código restante de la función.def is_leap(year):
if year%400==0: return True
if year%100==0: return False
if year%4==0: return True
return False
print('El año {} ¿es bisiesto?: {}'.format(1800,is_leap(1800)))
print('El año {} ¿es bisiesto:? {}'.format(1900,is_leap(1900)))
print('El año {} ¿es bisiesto:? {}'.format(2000,is_leap(2000)))
print('El año {} ¿es bisiesto:? {}'.format(2040,is_leap(2040)))
print('El año {} ¿es bisiesto:? {}'.format(2400,is_leap(2400)))
print('El año {} ¿es bisiesto:? {}'.format(2100,is_leap(2100)))
print('El año {} ¿es bisiesto:? {}'.format(2200,is_leap(2200)))
print('El año {} ¿es bisiesto:? {}'.format(2300,is_leap(2300)))
print('El año {} ¿es bisiesto:? {}'.format(2500,is_leap(2500)))
#Crear un programa que indique si el año introducido es bisiesto o no.
ResponderEliminarfrom calendar import isleap
def Bisiesto_o_no(a:int):
if isleap(a):
an='Si'
else:
an='No'
print( f'El año {n} {an} es bisiesto')
if __name__=='__main__':
n=int(input('Introduzca un año (ejemplo: 1992): ')or'1992')
Bisiesto_o_no(n)