26. Когда католическая Пасха? (в коде есть строки из следующих тем: "строки, библиотеки, функции").
Условие:
Пасха традиционно празднуется в воскресенье, следующее за первым полнолунием после дня весеннего равноденствия.
Поскольку здесь есть зависимость от фазы луны, фиксированной даты для этого праздника в григорианском календаре не существует.
Фактически Пасха может выпасть на любую дату между 22 марта и 25 апреля. День и месяц Пасхи для конкретного года можно вычислить по следующему алгоритму:
- в переменную "a" запишите остаток от деления "year" на 19;
- в переменную "b" запишите частное от деления "year" на 100 с округлением вниз;
- в переменную "c" запишите остаток от деления "year" на 100;
- в переменную "d" запишите частное от деления "b" на 4 с округлением вниз;
- в переменную "e" запишите остаток от деления "b" на 4;
- в переменную "f" запишите результат вычисления формулы "(b + 8) / 25" с округлением вниз;
- в переменную "g" запишите результат вычисления формулы "(b - f + 1) / 3 " с округлением вниз;
- в переменную "h" запишите остаток от деления выражения "(19a + b - d - g + 15) / 30";
- в переменную "i" запишите частное от деления "c" на 4 с округлением вниз;
- в переменную "k" запишите остаток от деления "c" на 4;
- в переменную "l" запишите остаток от деления выражения (32 + 2e + 2i - h - k) на 7;
- в переменную "m" запишите результат вычисления формулы ((a + 11h +22l) / 451) с округлением вниз;
- установите месяц равным результату вычисления формулы ((h + l +7m + 114) / 31);
- установите день равным единице плюс остаток от деления выражения (h + l - 7m + 114) на 31.
Напишите программу, реализующую этот алгоритм. Пользователь должен ввести год, для которого его интересует дата Пасхи, и получить ответ на свой вопрос. Дата должна соответствовать воскресенью.
Код:
import datetime
def pasxa_2(year, month, day): # функция определяет точное число Пасхи (уже с переносом на воскресенье)
day_of_week = datetime.datetime(year, month, day, 00, 00, 00).weekday() # определим день недели
slagaemoe = 6 - day_of_week # дельта между воскресеньем и днём недели
date = str(datetime.datetime(year, month, day, 00, 00, 00) + datetime.timedelta(days=slagaemoe))[0:10] # прибавляет к дате дельту (получаем искомую дату)
return date
def pasxa(year): # функция определяет точное число Пасхи (без переноса на воскресенье)
a = year % 19
b = int(year / 100)
c = year % 100
d = int(b / 4)
e = b % 4
f = int((b + 8) / 25)
g = int((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) % 30
i = int(c / 4)
k = c % 4
l = (32 + 2 * e + 2 * i - h - k) % 7 # лучше не называть переменную буквой "l" - правило хорошего тона в python
m = int((a + 11 * h + 22 * l) / 451)
month = int((h + l + 7 * m + 114) / 31)
day = 1 + (h + 1 - 7 * m + 114) % 31
date = pasxa_2(year, month, day)
date = f"Пасха приходится на {date}"
return date
try:
year = int(input("Введите год и программа определит, когда Пасха? Год: "))
print(pasxa(year))
except:
print("Вы ввели неверно.")