2022-10-11 19:27:51 +00:00
|
|
|
def isLeapYear(year):
|
2022-10-23 15:24:24 +00:00
|
|
|
return year % 400 == 0 if year % 100 == 0 else year % 4 == 0
|
2022-10-21 13:44:50 +00:00
|
|
|
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-11 19:27:51 +00:00
|
|
|
def monthDays(year, month):
|
2022-10-21 13:44:50 +00:00
|
|
|
assert month > 0
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-11 19:27:51 +00:00
|
|
|
MONTHDAYS = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
|
|
|
|
days = MONTHDAYS[month]
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-23 15:24:24 +00:00
|
|
|
return days + 1 if (isLeapYear(year) and month == 2) else days
|
2022-10-21 13:44:50 +00:00
|
|
|
|
2023-05-16 20:18:38 +00:00
|
|
|
|
|
|
|
def nextDay(year, month, day):
|
2022-10-23 15:24:24 +00:00
|
|
|
# Verifica se é o último dia do ano
|
2022-10-11 19:27:51 +00:00
|
|
|
if (month, day) == (12, 31):
|
|
|
|
year += 1
|
|
|
|
month = 1
|
|
|
|
day = 1
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-23 15:24:24 +00:00
|
|
|
# Verifica se é o último dia do mês
|
2023-05-16 20:14:36 +00:00
|
|
|
elif (monthDays(year, month) == day):
|
2022-10-11 19:27:51 +00:00
|
|
|
month += 1
|
|
|
|
day = 1
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-21 13:44:50 +00:00
|
|
|
# Dia comum
|
2022-10-11 19:27:51 +00:00
|
|
|
else:
|
|
|
|
day += 1
|
|
|
|
|
|
|
|
return year, month, day
|
|
|
|
|
|
|
|
|
|
|
|
# This is the main function
|
|
|
|
def main():
|
2023-05-16 20:18:38 +00:00
|
|
|
print("Was", 2017, "a leap year?", isLeapYear(2017)) # False?
|
|
|
|
print("Was", 2016, "a leap year?", isLeapYear(2016)) # True?
|
|
|
|
print("Was", 2000, "a leap year?", isLeapYear(2000)) # True?
|
|
|
|
print("Was", 1900, "a leap year?", isLeapYear(1900)) # False?
|
|
|
|
|
|
|
|
print("January 2017 had", monthDays(2017, 1), "days") # 31?
|
2022-10-11 19:27:51 +00:00
|
|
|
print("February 2017 had", monthDays(2017, 2), "days") # 28?
|
|
|
|
print("February 2016 had", monthDays(2016, 2), "days") # 29?
|
|
|
|
print("February 2000 had", monthDays(2000, 2), "days") # 29?
|
|
|
|
print("February 1900 had", monthDays(1900, 2), "days") # 28?
|
2023-05-16 20:18:38 +00:00
|
|
|
|
2022-10-11 19:27:51 +00:00
|
|
|
y, m, d = nextDay(2017, 1, 30)
|
2023-05-16 20:18:38 +00:00
|
|
|
print(y, m, d) # 2017 1 31 ?
|
2022-10-11 19:27:51 +00:00
|
|
|
y, m, d = nextDay(2017, 1, 31)
|
2023-05-16 20:18:38 +00:00
|
|
|
print(y, m, d) # 2017 2 1 ?
|
2022-10-11 19:27:51 +00:00
|
|
|
y, m, d = nextDay(2017, 2, 28)
|
2023-05-16 20:18:38 +00:00
|
|
|
print(y, m, d) # 2017 3 1 ?
|
2022-10-11 19:27:51 +00:00
|
|
|
y, m, d = nextDay(2016, 2, 29)
|
2023-05-16 20:18:38 +00:00
|
|
|
print(y, m, d) # 2016 3 1 ?
|
2022-10-11 19:27:51 +00:00
|
|
|
y, m, d = nextDay(2017, 12, 31)
|
2023-05-16 20:18:38 +00:00
|
|
|
print(y, m, d) # 2018 1 1 ?
|
|
|
|
|
2022-10-11 19:27:51 +00:00
|
|
|
|
|
|
|
# call the main function
|
2022-10-18 17:18:56 +00:00
|
|
|
if __name__ == "__main__":
|
2023-05-16 20:18:38 +00:00
|
|
|
main()
|