Как создать собственный календарь и проиндексировать его в Python?

Я хочу создать собственный календарь на Python, который по-прежнему поддерживает 365 дней, но имеет шесть месяцев. Чего я хочу добиться - программы, в которой пользователь вводит дату, например 15.01.2020, и программа выводит дату из созданного пользовательского календаря. До сих пор я создал собственный календарь в виде списка кортежей, подобных следующему:

Calendar = [("Leo", range(1, 61)), 
                ("Gemini", range(1, 62)), 
                ("Pegasus", range(1, 62)),
                ("Orion", range(1, 62)),
                ("Scorpius", range(1, 62)),
                ("Taurus", range(1, 62))]

Следуя примеру, первым нестандартным месяцем будет «Лев», и он будет иметь 60 дней. Но я сталкиваюсь с проблемами, повторяющимися по дням для каждого месяца. Как я могу получить конкретный день определенного месяца из этого списка кортежей? И затем, как я могу связать это с форматом григорианского календаря (например, 15 января).

Я очень новичок в программировании, поэтому любая помощь будет благодарна! заранее спасибо

Всего 2 ответа


Получить прошедшие дни с начала года с даты

from datetime import datetime
day_of_year = datetime.now().timetuple().tm_yday

Затем используйте простое, если проверить, где день находится в диапазоне 365.


В настоящее время вы можете получить доступ к определенному дню определенного месяца, например, так

wanted_month = 'Orion'
wanted_day = 6

for month, days in calendar:           # python allows you to unpack tuples using commas
    if month == wanted_month:
        return month[wanted_day + 1]   # indexes are zero based and your ranges start at 1 so we have to add

Это может быть более производительным и простым, если вы преобразуете кортежи в словарь

calendar = {'leo': range(1,61), 'orion': range(61,122)}

calendar[wanted_month][wanted_day + 1]

Вы можете легко преобразовать его в обычный календарный день, если знаете, какой это день года. Так что, если вы хотели 300-й день в году, вы могли бы сделать это.

import datetime
datetime.datetime(datetime.datetime.now().year, 1, 1) + datetime.timedelta(300 - 1)

Есть идеи?

10000