Есть ли способ создать объект, который представляет определенный месяц и может быть повторен? - PullRequest
0 голосов
/ 15 апреля 2019

На работе нам нужно заполнить ежемесячную ведомость, в которой указаны все уроки, которые мы провели.Каждый учитель проводит одни и те же занятия каждый день недели.

Я пытаюсь разрешить пользователю вводить месяц, затем создавать объект, представляющий этот месяц, и затем циклически повторять объект по дням.,Если день понедельник, заполните классы, которые преподаватель всегда проводит в понедельник.

До сих пор я пытался использовать модуль datetime.Я могу найти способ ввести дату начала и окончания, но не создать месяц, который я мог бы обрабатывать так, как я хочу, из одного фрагмента пользовательского ввода.

Я надеялся, что смогу настроить его, чтобы другие сотрудники могли просто ввести свое имя и месяц, и программа сделает все остальное, поскольку это не технически грамотная среда.Если кто-нибудь знает, как это можно сделать с помощью datetime или другого модуля, я был бы очень рад.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы можете сделать это, используя datetime и timedelta - добавление дней к начальному дню:

import datetime

# 0 == Monday, 1== Tuesday .... the list is the list of lessons taught on that day
teach = {0: ["A","B"], 1:["C","D"],2:["E"],3:["A","E"], 4:["E","B","E"]}

# get a starting month
while True:
    try:
        month = int(input("Month [1-12]: "))
    except:
        continue

    if 1 <= month <= 12:
        break

# date to start at
start = datetime.datetime(2019,month,1)

# create all days of that month 
m = [[date, teach.get(date.weekday())]    # date  + lessons
     for date in (start + datetime.timedelta(days=n) for n in range(32))  # all days
     if date.month == month]  # only those that fit into the month

print()
for day in m:
    print(day) 

Вывод:

Month [1-12]: 4
[datetime.datetime(2019, 4, 1, 0, 0), ['A', 'B']]
[datetime.datetime(2019, 4, 2, 0, 0), ['C', 'D']]
[datetime.datetime(2019, 4, 3, 0, 0), ['E']]
[datetime.datetime(2019, 4, 4, 0, 0), ['A', 'E']]
[datetime.datetime(2019, 4, 5, 0, 0), ['E', 'B', 'E']]
[datetime.datetime(2019, 4, 6, 0, 0), None]
[datetime.datetime(2019, 4, 7, 0, 0), None]
[datetime.datetime(2019, 4, 8, 0, 0), ['A', 'B']]
[datetime.datetime(2019, 4, 9, 0, 0), ['C', 'D']]
[datetime.datetime(2019, 4, 10, 0, 0), ['E']]
[datetime.datetime(2019, 4, 11, 0, 0), ['A', 'E']]
[datetime.datetime(2019, 4, 12, 0, 0), ['E', 'B', 'E']]
[datetime.datetime(2019, 4, 13, 0, 0), None]
[datetime.datetime(2019, 4, 14, 0, 0), None]
[datetime.datetime(2019, 4, 15, 0, 0), ['A', 'B']]
[datetime.datetime(2019, 4, 16, 0, 0), ['C', 'D']]
[datetime.datetime(2019, 4, 17, 0, 0), ['E']]
[datetime.datetime(2019, 4, 18, 0, 0), ['A', 'E']]
[datetime.datetime(2019, 4, 19, 0, 0), ['E', 'B', 'E']]
[datetime.datetime(2019, 4, 20, 0, 0), None]
[datetime.datetime(2019, 4, 21, 0, 0), None]
[datetime.datetime(2019, 4, 22, 0, 0), ['A', 'B']]
[datetime.datetime(2019, 4, 23, 0, 0), ['C', 'D']]
[datetime.datetime(2019, 4, 24, 0, 0), ['E']]
[datetime.datetime(2019, 4, 25, 0, 0), ['A', 'E']]
[datetime.datetime(2019, 4, 26, 0, 0), ['E', 'B', 'E']]
[datetime.datetime(2019, 4, 27, 0, 0), None]
[datetime.datetime(2019, 4, 28, 0, 0), None]
[datetime.datetime(2019, 4, 29, 0, 0), ['A', 'B']]
[datetime.datetime(2019, 4, 30, 0, 0), ['C', 'D']]

Доку:

Вы должны были бы убрать дни, приходящиеся на особую дату, когда ваша школа закрыта - это касается только дня недели.

1 голос
/ 15 апреля 2019

dateutil.rrule в значительной степени именно то, что вам нужно.Интерфейс немного странный, поскольку исходный материал и основной сценарий использования - это правила повторения icalendar , а dateutil следует этой терминологии, но помимо этого он должен тривиально обрабатывать ваш сценарий использования.

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