Пасхальная смена месяца - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно печатать каждое пасхальное воскресенье 21-го века. Мне нужно определить месяц: 4 (апрель), когда день d не больше 30; если это больше, то мне нужно преобразовать это в подходящий день в мае. Например, d=32 будет m=5, d=2 или 2 мая.

import calendar
import datetime


def easter():
    for y in range(2001, 2101):
        m2 = 2 * (y % 4)
        m4 = 4 * (y % 7)
        m19 = 19 * (y % 19)
        v2 = (16 + m19) % 30
        v1 = (6 * v2 + m4 + m2) % 7
        p = v1 + v2
        d = 3 + p
        print ('Easter Sunday for the year', y, 'is',
               datetime.date(2015, m, 1).strftime('%B'),
               '{}.'.format(int(d)))


easter()

1 Ответ

0 голосов
/ 07 ноября 2018

У вас есть только одна настройка: если день больше 30, увеличьте месяц с апреля по май и уменьшите день на 30:

    if d <= 30:
        m, d = 4, d
    else:
        m, d = 5, d-30

    print("Easter Sunday for the year", y, "is",
          datetime.date(y, m, d).
             strftime('%B'), '{}.'.format(int(d)))

Частичный вывод, включая пограничные случаи:

Easter Sunday for the year 2073 is April 30.
Easter Sunday for the year 2074 is April 22.
Easter Sunday for the year 2075 is April 7.
Easter Sunday for the year 2076 is April 26.
Easter Sunday for the year 2077 is April 18.
Easter Sunday for the year 2078 is May 8.
...
Easter Sunday for the year 2088 is April 18.
Easter Sunday for the year 2089 is May 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...