Você está na página 1de 2

# isLeapYear(year) deve devolver True se year é um ano bissexto

# e False se é um ano comum. Corrija-a.


# (See: https://en.wikipedia.org/wiki/Leap_year)
def isLeapYear(year):
if year%100 == 0 and year%400 != 0:
return(False)
return year%4 == 0

# monthDays deve devolver o número de dias de um dado mês num dado ano.
# Por exemplo, monthDays(2004, 2) deve devolver 29.
# Corrija-a.
def monthDays(year, month):
MONTHDAYS = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
days = MONTHDAYS[month]
if days == 28 and isLeapYear(year) == True :
days = 29
return days

# nextDay deve devolver o dia a seguir a uma dada data.


# Por exemplo, nextDay(2017, 1, 31) deve devolver (2017, 2, 1)
def nextDay(year, month, day):
if day == monthDays(year, month):
if month == 12 :
year += 1
month =1
day =1
else :
month += 1
day =1
else :
day += 1
return (year, month, day)

# Defina uma função dateIsValid que deve


# devolver True se os seus argumentos formarem uma data válida
# e devolver False no caso contrário.
# Por exemplo, dateIsValid(1980, 2, 29) deve devolver True,
# dateIsValid(1980, 2, 30) deve devolver False.
def dateIsValid(year, month, day):
if month == {1,3,5,7,8,10,12} and day>31:
return(False)
elif month == {4,6,9,11} and day> 30:
return(False)
elif isLeapYear(year) == False and day> 28:
return(False)
elif day>29:
return(False)
elif month> 12 :
return(False)
return(True)

# Defina uma função previousDay que devolva o dia anterior a uma dada data.
# Por exemplo, previousDay(1980, 3, 1) deve devolver (1980, 2, 29)
...
def previousDay(year, month, day):
if day == 1:
if month == 1:
year -= 1
month = 12
day = 31
elif month ==3 and isLeapYear(year) ==True:
month -=1
day= 29
elif month ==3 and isLeapYear(year) == False:
month -=1
day= 28
elif month == {2,4,6,9,11}:
month -= 1
day=28
elif month == {5,7,8,10,12}:
month -= 1
day = 30
else :
month -=1
day = 31
else:
day -= 1
return (year, month, day)

# No Codecheck, não chame nenhuma função: o sistema trata disso.

Você também pode gostar