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("Вы ввели неверно.")