-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathget_nearest_lesson_date.py
107 lines (84 loc) · 2.89 KB
/
get_nearest_lesson_date.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "ipetrash"
# SOURCE: https://ru.stackoverflow.com/q/1184070/201445
import datetime as dt
SCHEDULE = {
0: ["История", "Биология", "Химия", "География", "ИЗО", "Технология", "Алгебра"],
1: [
"Обществознание",
"Русский язык",
"Информатика(Малова)",
"Информатика(Чкалова)",
"Музыка",
"Англ.яз (Якушева)",
"Англ.яз (Васильева)",
"Физ-ра",
],
2: [
"Физика",
"Физ-ра",
"Химия",
"Литература",
"Русский язык",
"Алгебра",
"Англ.яз (Якушева)",
"Англ.яз (Васильева)",
],
3: ["Русский язык", "ОБЖ", "Биология", "Русский язык", "Геометрия", "Алгебра"],
4: [
"Литература",
"Физика",
"История",
"Алгебра",
"Англ.яз (Якушева)",
"Англ.яз (Васильева)",
"Геометрия",
"География",
],
}
def get_nearest_lesson_date(lesson: str, d: dt.date = None) -> dt.date | None:
if not d:
d = dt.date.today()
lesson = lesson.lower()
# Перебор дней недели
for i in range(7):
next_day = d + dt.timedelta(days=i + 1)
week_day = next_day.weekday()
# Пропуск отсутствующих дней недели, например выходных
if week_day not in SCHEDULE:
continue
# Регистронезависимый поиск предмета в списке
if lesson in map(str.lower, SCHEDULE[week_day]):
return next_day
# Не нашли урок
return
if __name__ == "__main__":
print(get_nearest_lesson_date("Алгебра"))
# 2020-09-30
print(get_nearest_lesson_date("АЛГЕБРА"))
# 2020-09-30
d = get_nearest_lesson_date("изо", dt.date(2020, 9, 28))
print(d)
# 2020-10-05
assert str(d) == "2020-10-05"
d = get_nearest_lesson_date("Алгебра", dt.date(2020, 9, 29))
print(d)
# 2020-09-30
assert str(d) == "2020-09-30"
d = get_nearest_lesson_date("История", dt.date(2020, 10, 2))
print(d)
# 2020-10-05
assert str(d) == "2020-10-05"
d = get_nearest_lesson_date("ИЗО", dt.date(2020, 9, 26))
print(d)
# 2020-09-28
assert str(d) == "2020-09-28"
d = get_nearest_lesson_date("ИЗО", dt.date(2020, 9, 27))
print(d)
# 2020-09-28
assert str(d) == "2020-09-28"
d = get_nearest_lesson_date("ИЗО", dt.date(2020, 9, 28))
print(d)
# 2020-10-05
assert str(d) == "2020-10-05"