Напишите программу на питоне, которая дает мне каждый год с 1583 по 2017 год, где новый год - понедельник, а Рождество (24.12) - нет. - PullRequest
0 голосов
/ 01 июля 2019

Я хочу написать программу на python, которая дает мне каждый год с 1583 по 2017 год, где новый год (1.1.) - понедельник, а Рождество (24.12) - нет. Я хочу сделать это с использованием datetime.

Я уже что-то пробовал, но так как я новичок в python и плохо знаю модуль datetime, я не нашел решения

import calendar

def is_ny_monday_while_xmas_not(date,weekday):
    if (calendar.weekday(date.year, date.month, 1) == "Monday":

вывод должен выглядеть так: 1684 1846 1934 ... (Я не знаю правильных лет, так что это всего лишь пример)

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Это довольно смиренно

from datetime import date

for year in range(1583, 2018):
  if date(year, 1, 1).weekday() == 0 and date(year, 12, 24).weekday() != 0:
    print(year)

Упомяните конец диапазона, который я изменил с 2017 по 2018 год, потому что «стоп» не включен в перечисление (но он ничего не изменил, потому что это не понедельник).

Хорошая оптимизация из другого ответа (упомяните 4 в качестве третьего параметра для range ()), но остерегайтесь копировать его в другие условия проверки.

from datetime import date

for year in range(1584, 2018, 4):
  if date(year, 1, 1).weekday() == 0 and date(year, 12, 24).weekday() != 0:
    print(year)
1 голос
/ 01 июля 2019

Во-первых, между 1 января и 24 декабря 357 дней в году, который не является високосным, и 357 делится на 7. Это означает, что если 1 января - понедельник, то 24 декабря также.Следовательно, вопрос эквивалентен следующему: какие годы являются високосными и также начинаются с понедельника?

from datetime import date
year = 1584 #first leap year after 1583
while year < 2017:
    if date(year, 1, 1).weekday() == 0:
        if year % 100 != 0 or year % 400 == 0 #years that are divisible by 100 aren't leap years, unless divisible by 400.
        print(year)
    year += 4

Это должно распечатать все нужные вам годы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...