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

Решение на Python 3

import random

def GetDMY():
Year = random.randint(1,2020)
Month = random.randint(1,12)
Day_Max = MonthDays(Month,Year)
Day = random.randint(1,Day_Max)
#Month = 1
#Day = 1
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 PrevDate(Day,Month,Year):
if Day > 1:
Day -= 1
elif Month > 1:
Month -= 1
Day = MonthDays(Month,Year)
else:
Year -= 1
Month = 12
Day = 31
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 = PrevDate(R['Day'], R['Month'], R['Year'])
print(R_new)
print()