Proc 55. Используя функцию MonthDays из задания Proc53, описать процедуру NextDate(D, M, Y), которая по информации о правильной дате, включающей день D, номер месяца M и год Y, определяет следующую дату (параметры целого типа D, M, Y являются одновременно входными и выходными). Применить процедуру NextDate к трем исходным датам и вывести полученные значения следующих дат.

Решение на Python 3

import random

def GetDMY():
Year = random.randint(1,2020)
Month = random.randint(1,12)
#Month = 12
Day_Max = MonthDays(Month,Year)
Day = random.randint(1,Day_Max)
#Day = 1
#Day = Day_Max
R = {'Day' : Day, 'Month' : Month, 'Year' : Year}
return R

def IsLeapYear(Y):
result = False
if (Y%4 == 0) and not(Y%100 == 0 and Y%400 != 0):
result = True
return result

def MonthDays(M,Y):
if IsLeapYear(Y) and M == 2:
Days = 29
else:
m = {
1: 31,
2: 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
}
try:
Days = m[M]
except KeyError as e:
print('Ошибка')
return Days

def NextDate(Day,Month,Year):
MaxDays = MonthDays(Month,Year)
if Day < MaxDays:
Day += 1
elif Month < 12:
Month += 1
Day = 1
else:
Year += 1
Month = 1
Day = 1
R = {'Day' : Day, 'Month' : Month, 'Year' : Year}
return R


for i in range(0,5):
R = GetDMY()
print("Current:")
print(R)
print("Previous:")
R_new = NextDate(R['Day'], R['Month'], R['Year'])
print(R_new)
print()