rupython 1.2.12__py3-none-any.whl → 1.2.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rupython/__/342/225/250/320/247/342/225/250/342/226/221/342/225/250/342/224/202/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/233/342/225/250/342/226/223/342/225/250/342/225/233/342/225/244/320/227/342/225/250/342/225/234/342/225/244/320/233/342/225/250/342/225/243_/342/225/250/342/225/221/342/225/250/342/225/233/342/225/250/342/224/244__.py +50 -4
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/240/342/225/244/320/221/342/225/250/342/225/225/342/225/250/342/225/234/342/225/244/320/225/342/225/244/320/220.py +100 -100
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/241/342/225/250/320/244.py +56 -56
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/244/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/226/221/342/225/250/320/242/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/225/235/342/225/244/320/237.py +212 -212
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/247/342/225/250/342/226/221/342/225/250/342/224/220/342/225/244/320/220/342/225/250/342/225/233/342/225/244/320/221/342/225/244/320/233.py +141 -0
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/244/320/223/342/225/244/320/227/342/225/250/342/226/221.py +32 -32
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/252/342/225/250/342/225/233/342/225/250/342/225/227/342/225/250/342/225/227/342/225/250/342/225/241/342/225/250/342/225/221/342/225/244/320/226/342/225/250/342/225/225/342/225/250/342/225/225.py +326 -326
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/254/342/225/250/342/226/221/342/225/244/320/222/342/225/250/342/225/241/342/225/250/342/225/235.py +4 -4
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/256/342/225/244/320/227/342/225/250/342/225/241/342/225/244/320/220/342/225/250/342/225/241/342/225/250/342/224/244/342/225/244/320/234.py +82 -82
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/257/342/225/250/342/225/233/342/225/244/320/222/342/225/250/342/225/233/342/225/250/342/225/221/342/225/250/342/225/225.py +121 -121
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/260/342/225/250/342/225/241/342/225/250/342/224/202/342/225/250/320/242/342/225/244/320/233/342/225/244/320/220.py +42 -42
- rupython//342/225/250/320/254/342/225/250/342/225/233/342/225/250/342/224/244/342/225/244/320/223/342/225/250/342/225/227/342/225/250/342/225/225//342/225/250/320/264/342/225/250/342/226/221/342/225/250/342/225/243/342/225/250/342/225/227/342/225/244/320/233.py +123 -0
- rupython-1.2.14.dist-info/LICENSE +55 -0
- {rupython-1.2.12.dist-info → rupython-1.2.14.dist-info}/METADATA +6 -3
- rupython-1.2.14.dist-info/RECORD +21 -0
- rupython-1.2.12.dist-info/LICENSE +0 -27
- rupython-1.2.12.dist-info/RECORD +0 -19
- {rupython-1.2.12.dist-info → rupython-1.2.14.dist-info}/WHEEL +0 -0
- {rupython-1.2.12.dist-info → rupython-1.2.14.dist-info}/top_level.txt +0 -0
@@ -23,537 +23,537 @@ _Изменяемое_множество = collections.abc.MutableSet
|
|
23
23
|
}
|
24
24
|
|
25
25
|
class Именованный_кортеж(_Последовательность):
|
26
|
-
def __init__(
|
27
|
-
|
26
|
+
def __init__(экземпляр, имя, поля):
|
27
|
+
экземпляр._namedtuple = collections.namedtuple(имя, поля)
|
28
28
|
|
29
|
-
def __call__(
|
30
|
-
return
|
29
|
+
def __call__(экземпляр, *ПА, **ИА):
|
30
|
+
return экземпляр._namedtuple(*ПА, **ИА)
|
31
31
|
|
32
|
-
def __getattr__(
|
33
|
-
return getattr(
|
32
|
+
def __getattr__(экземпляр, имя):
|
33
|
+
return getattr(экземпляр._namedtuple, имя)
|
34
34
|
|
35
|
-
def __getitem__(
|
36
|
-
return
|
35
|
+
def __getitem__(экземпляр, индекс):
|
36
|
+
return экземпляр._namedtuple.__getitem__(индекс)
|
37
37
|
|
38
|
-
def __len__(
|
39
|
-
return len(
|
38
|
+
def __len__(экземпляр):
|
39
|
+
return len(экземпляр._namedtuple)
|
40
40
|
|
41
|
-
def __iter__(
|
42
|
-
return iter(
|
41
|
+
def __iter__(экземпляр):
|
42
|
+
return iter(экземпляр._namedtuple)
|
43
43
|
|
44
|
-
def __contains__(
|
45
|
-
return элемент in
|
44
|
+
def __contains__(экземпляр, элемент):
|
45
|
+
return элемент in экземпляр._namedtuple
|
46
46
|
|
47
|
-
def __reversed__(
|
48
|
-
return reversed(
|
47
|
+
def __reversed__(экземпляр):
|
48
|
+
return reversed(экземпляр._namedtuple)
|
49
49
|
|
50
|
-
def __str__(
|
51
|
-
return str(
|
50
|
+
def __str__(экземпляр):
|
51
|
+
return str(экземпляр._namedtuple)
|
52
52
|
|
53
53
|
class Двусторонняя_очередь(_Изменяемая_последовательность):
|
54
|
-
def __init__(
|
54
|
+
def __init__(экземпляр, перебираемый = None, максимальная_длина = None):
|
55
55
|
ИА = {}
|
56
56
|
if перебираемый is not None:
|
57
57
|
ИА['iterable'] = перебираемый
|
58
58
|
if максимальная_длина is not None:
|
59
59
|
ИА['maxlen'] = максимальная_длина
|
60
|
-
|
60
|
+
экземпляр._deque = collections.deque(**ИА)
|
61
61
|
|
62
|
-
def Добавить_в_начало(
|
63
|
-
|
62
|
+
def Добавить_в_начало(экземпляр, элемент):
|
63
|
+
экземпляр._deque.appendleft(элемент)
|
64
64
|
|
65
|
-
def Добавить_в_конец(
|
66
|
-
|
65
|
+
def Добавить_в_конец(экземпляр, элемент):
|
66
|
+
экземпляр._deque.append(элемент)
|
67
67
|
|
68
|
-
def Удалить_с_начала(
|
69
|
-
if not
|
68
|
+
def Удалить_с_начала(экземпляр):
|
69
|
+
if not экземпляр._deque:
|
70
70
|
raise IndexError("Очередь пуста")
|
71
|
-
return
|
71
|
+
return экземпляр._deque.popleft()
|
72
72
|
|
73
|
-
def Удалить_с_конца(
|
74
|
-
if not
|
73
|
+
def Удалить_с_конца(экземпляр):
|
74
|
+
if not экземпляр._deque:
|
75
75
|
raise IndexError("Очередь пуста")
|
76
|
-
return
|
76
|
+
return экземпляр._deque.pop()
|
77
77
|
|
78
|
-
def Очистить(
|
79
|
-
|
78
|
+
def Очистить(экземпляр):
|
79
|
+
экземпляр._deque.clear()
|
80
80
|
|
81
|
-
def Длина(
|
82
|
-
return len(
|
81
|
+
def Длина(экземпляр):
|
82
|
+
return len(экземпляр._deque)
|
83
83
|
|
84
|
-
def Расширить_в_начало(
|
85
|
-
|
84
|
+
def Расширить_в_начало(экземпляр, перебираемый):
|
85
|
+
экземпляр._deque.extendleft(перебираемый)
|
86
86
|
|
87
|
-
def Расширить_в_конец(
|
88
|
-
|
87
|
+
def Расширить_в_конец(экземпляр, перебираемый):
|
88
|
+
экземпляр._deque.extend(перебираемый)
|
89
89
|
|
90
|
-
def Повернуть(
|
91
|
-
|
90
|
+
def Повернуть(экземпляр, количество):
|
91
|
+
экземпляр._deque.rotate(количество)
|
92
92
|
|
93
|
-
def Перевернуть(
|
94
|
-
|
93
|
+
def Перевернуть(экземпляр):
|
94
|
+
экземпляр._deque.reverse()
|
95
95
|
|
96
|
-
def Количество(
|
97
|
-
return sum(1 for x in
|
96
|
+
def Количество(экземпляр, элемент):
|
97
|
+
return sum(1 for x in экземпляр._deque if x == элемент)
|
98
98
|
|
99
|
-
def Индекс(
|
99
|
+
def Индекс(экземпляр, элемент, начало = 0, конец = None):
|
100
100
|
if конец is None:
|
101
|
-
конец = len(
|
102
|
-
for i, x in enumerate(
|
101
|
+
конец = len(экземпляр._deque)
|
102
|
+
for i, x in enumerate(экземпляр._deque):
|
103
103
|
if начало <= i < конец and x == элемент:
|
104
104
|
return i
|
105
105
|
raise ValueError(f"{элемент} не найден в диапазоне")
|
106
106
|
|
107
|
-
def Вставить(
|
108
|
-
|
109
|
-
|
110
|
-
|
107
|
+
def Вставить(экземпляр, индекс, значение):
|
108
|
+
экземпляр._deque.rotate(-индекс)
|
109
|
+
экземпляр._deque.appendleft(значение)
|
110
|
+
экземпляр._deque.rotate(индекс)
|
111
111
|
|
112
|
-
def __getitem__(
|
113
|
-
return
|
112
|
+
def __getitem__(экземпляр, индекс):
|
113
|
+
return экземпляр._deque[индекс]
|
114
114
|
|
115
|
-
def __setitem__(
|
116
|
-
|
115
|
+
def __setitem__(экземпляр, индекс, значение):
|
116
|
+
экземпляр._deque[индекс] = значение
|
117
117
|
|
118
|
-
def __delitem__(
|
119
|
-
del
|
118
|
+
def __delitem__(экземпляр, индекс):
|
119
|
+
del экземпляр._deque[индекс]
|
120
120
|
|
121
|
-
def __len__(
|
122
|
-
return len(
|
121
|
+
def __len__(экземпляр):
|
122
|
+
return len(экземпляр._deque)
|
123
123
|
|
124
|
-
def __iter__(
|
125
|
-
return iter(
|
124
|
+
def __iter__(экземпляр):
|
125
|
+
return iter(экземпляр._deque)
|
126
126
|
|
127
|
-
def __contains__(
|
128
|
-
return элемент in
|
127
|
+
def __contains__(экземпляр, элемент):
|
128
|
+
return элемент in экземпляр._deque
|
129
129
|
|
130
|
-
def __reversed__(
|
131
|
-
return iter(reversed(
|
130
|
+
def __reversed__(экземпляр):
|
131
|
+
return iter(reversed(экземпляр._deque))
|
132
132
|
|
133
|
-
def __str__(
|
134
|
-
элементы = ', '.join(str(x) for x in
|
133
|
+
def __str__(экземпляр):
|
134
|
+
элементы = ', '.join(str(x) for x in экземпляр._deque)
|
135
135
|
return f"Двусторонняя_очередь([{элементы}])"
|
136
136
|
|
137
137
|
class Счётчик(_Отображение):
|
138
|
-
def __init__(
|
139
|
-
|
138
|
+
def __init__(экземпляр, перебираемый = None):
|
139
|
+
экземпляр._counter = collections.Counter(перебираемый or [])
|
140
140
|
|
141
|
-
def Обновить(
|
142
|
-
|
141
|
+
def Обновить(экземпляр, перебираемый):
|
142
|
+
экземпляр._counter.update(перебираемый)
|
143
143
|
|
144
|
-
def Вычесть(
|
145
|
-
|
144
|
+
def Вычесть(экземпляр, перебираемый):
|
145
|
+
экземпляр._counter.subtract(перебираемый)
|
146
146
|
|
147
|
-
def Наиболее_частые(
|
148
|
-
return
|
147
|
+
def Наиболее_частые(экземпляр, количество = None):
|
148
|
+
return экземпляр._counter.most_common(количество)
|
149
149
|
|
150
|
-
def Элементы(
|
151
|
-
return list(
|
150
|
+
def Элементы(экземпляр):
|
151
|
+
return list(экземпляр._counter.elements())
|
152
152
|
|
153
|
-
def Получить(
|
154
|
-
return
|
153
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
154
|
+
return экземпляр._counter.get(ключ, по_умолчанию)
|
155
155
|
|
156
|
-
def __getitem__(
|
157
|
-
return
|
156
|
+
def __getitem__(экземпляр, ключ):
|
157
|
+
return экземпляр._counter[ключ]
|
158
158
|
|
159
|
-
def __setitem__(
|
160
|
-
|
159
|
+
def __setitem__(экземпляр, ключ, значение):
|
160
|
+
экземпляр._counter[ключ] = значение
|
161
161
|
|
162
|
-
def __delitem__(
|
163
|
-
del
|
162
|
+
def __delitem__(экземпляр, ключ):
|
163
|
+
del экземпляр._counter[ключ]
|
164
164
|
|
165
|
-
def __iter__(
|
166
|
-
return iter(
|
165
|
+
def __iter__(экземпляр):
|
166
|
+
return iter(экземпляр._counter)
|
167
167
|
|
168
|
-
def __len__(
|
169
|
-
return len(
|
168
|
+
def __len__(экземпляр):
|
169
|
+
return len(экземпляр._counter)
|
170
170
|
|
171
|
-
def __contains__(
|
172
|
-
return ключ in
|
171
|
+
def __contains__(экземпляр, ключ):
|
172
|
+
return ключ in экземпляр._counter
|
173
173
|
|
174
|
-
def __add__(
|
174
|
+
def __add__(экземпляр, другой):
|
175
175
|
if isinstance(другой, Счётчик):
|
176
|
-
return Счётчик(
|
176
|
+
return Счётчик(экземпляр._counter + другой._counter)
|
177
177
|
return NotImplemented
|
178
178
|
|
179
|
-
def __sub__(
|
179
|
+
def __sub__(экземпляр, другой):
|
180
180
|
if isinstance(другой, Счётчик):
|
181
|
-
return Счётчик(
|
181
|
+
return Счётчик(экземпляр._counter - другой._counter)
|
182
182
|
return NotImplemented
|
183
183
|
|
184
|
-
def __str__(
|
185
|
-
элементы = ', '.join(f"{k}: {v}" for k, v in
|
184
|
+
def __str__(экземпляр):
|
185
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._counter.items())
|
186
186
|
return f"Счётчик({{{элементы}}})"
|
187
187
|
|
188
|
-
def В_строку(
|
189
|
-
if not
|
188
|
+
def В_строку(экземпляр):
|
189
|
+
if not экземпляр._counter:
|
190
190
|
return "Пустой счётчик"
|
191
191
|
элементы = []
|
192
|
-
for ключ, количество in
|
192
|
+
for ключ, количество in экземпляр._counter.items():
|
193
193
|
слово = __Общие_функции__.Склонение_после_числительного(количество, ['элемент', 'элемента', 'элементов'])
|
194
194
|
элементы.append(f"{ключ}: {слово}")
|
195
195
|
return ', '.join(элементы)
|
196
196
|
|
197
197
|
class Упорядоченный_словарь(_Изменяемое_отображение):
|
198
|
-
def __init__(
|
199
|
-
|
198
|
+
def __init__(экземпляр, *ПА, **ИА):
|
199
|
+
экземпляр._ordered_dict = collections.OrderedDict(*ПА, **ИА)
|
200
200
|
|
201
|
-
def Вставить(
|
202
|
-
|
201
|
+
def Вставить(экземпляр, ключ, значение):
|
202
|
+
экземпляр._ordered_dict[ключ] = значение
|
203
203
|
|
204
|
-
def Удалить(
|
205
|
-
return
|
204
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
205
|
+
return экземпляр._ordered_dict.pop(ключ, по_умолчанию)
|
206
206
|
|
207
|
-
def Удалить_последний(
|
208
|
-
return
|
207
|
+
def Удалить_последний(экземпляр, последний = True):
|
208
|
+
return экземпляр._ordered_dict.popitem(last = последний)
|
209
209
|
|
210
|
-
def Получить(
|
211
|
-
return
|
210
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
211
|
+
return экземпляр._ordered_dict.get(ключ, по_умолчанию)
|
212
212
|
|
213
|
-
def Установить_по_умолчанию(
|
214
|
-
return
|
213
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
214
|
+
return экземпляр._ordered_dict.setdefault(ключ, по_умолчанию)
|
215
215
|
|
216
|
-
def Ключи(
|
217
|
-
return list(
|
216
|
+
def Ключи(экземпляр):
|
217
|
+
return list(экземпляр._ordered_dict.keys())
|
218
218
|
|
219
|
-
def Значения(
|
220
|
-
return list(
|
219
|
+
def Значения(экземпляр):
|
220
|
+
return list(экземпляр._ordered_dict.values())
|
221
221
|
|
222
|
-
def Элементы(
|
223
|
-
return list(
|
222
|
+
def Элементы(экземпляр):
|
223
|
+
return list(экземпляр._ordered_dict.items())
|
224
224
|
|
225
|
-
def Переместить_в_конец(
|
226
|
-
|
225
|
+
def Переместить_в_конец(экземпляр, ключ, последний = True):
|
226
|
+
экземпляр._ordered_dict.move_to_end(ключ, last = последний)
|
227
227
|
|
228
|
-
def __getitem__(
|
229
|
-
return
|
228
|
+
def __getitem__(экземпляр, ключ):
|
229
|
+
return экземпляр._ordered_dict[ключ]
|
230
230
|
|
231
|
-
def __setitem__(
|
232
|
-
|
231
|
+
def __setitem__(экземпляр, ключ, значение):
|
232
|
+
экземпляр._ordered_dict[ключ] = значение
|
233
233
|
|
234
|
-
def __delitem__(
|
235
|
-
del
|
234
|
+
def __delitem__(экземпляр, ключ):
|
235
|
+
del экземпляр._ordered_dict[ключ]
|
236
236
|
|
237
|
-
def __iter__(
|
238
|
-
return iter(
|
237
|
+
def __iter__(экземпляр):
|
238
|
+
return iter(экземпляр._ordered_dict)
|
239
239
|
|
240
|
-
def __len__(
|
241
|
-
return len(
|
240
|
+
def __len__(экземпляр):
|
241
|
+
return len(экземпляр._ordered_dict)
|
242
242
|
|
243
|
-
def __contains__(
|
244
|
-
return ключ in
|
243
|
+
def __contains__(экземпляр, ключ):
|
244
|
+
return ключ in экземпляр._ordered_dict
|
245
245
|
|
246
|
-
def __str__(
|
247
|
-
элементы = ', '.join(f"{k}: {v}" for k, v in
|
246
|
+
def __str__(экземпляр):
|
247
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._ordered_dict.items())
|
248
248
|
return f"Упорядоченный_словарь({{{элементы}}})"
|
249
249
|
|
250
250
|
class Словарь_по_умолчанию(_Изменяемое_отображение):
|
251
|
-
def __init__(
|
252
|
-
|
251
|
+
def __init__(экземпляр, функция_по_умолчанию = None, *ПА, **ИА):
|
252
|
+
экземпляр._default_dict = collections.defaultdict(функция_по_умолчанию, *ПА, **ИА)
|
253
253
|
|
254
|
-
def Получить(
|
255
|
-
return
|
254
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
255
|
+
return экземпляр._default_dict.get(ключ, по_умолчанию)
|
256
256
|
|
257
|
-
def Установить_по_умолчанию(
|
258
|
-
return
|
257
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
258
|
+
return экземпляр._default_dict.setdefault(ключ, по_умолчанию)
|
259
259
|
|
260
|
-
def Удалить(
|
261
|
-
return
|
260
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
261
|
+
return экземпляр._default_dict.pop(ключ, по_умолчанию)
|
262
262
|
|
263
|
-
def Удалить_последний(
|
264
|
-
return
|
263
|
+
def Удалить_последний(экземпляр, последний = True):
|
264
|
+
return экземпляр._default_dict.popitem(last = последний)
|
265
265
|
|
266
|
-
def __getitem__(
|
267
|
-
return
|
266
|
+
def __getitem__(экземпляр, ключ):
|
267
|
+
return экземпляр._default_dict[ключ]
|
268
268
|
|
269
|
-
def __setitem__(
|
270
|
-
|
269
|
+
def __setitem__(экземпляр, ключ, значение):
|
270
|
+
экземпляр._default_dict[ключ] = значение
|
271
271
|
|
272
|
-
def __delitem__(
|
273
|
-
del
|
272
|
+
def __delitem__(экземпляр, ключ):
|
273
|
+
del экземпляр._default_dict[ключ]
|
274
274
|
|
275
|
-
def __iter__(
|
276
|
-
return iter(
|
275
|
+
def __iter__(экземпляр):
|
276
|
+
return iter(экземпляр._default_dict)
|
277
277
|
|
278
|
-
def __len__(
|
279
|
-
return len(
|
278
|
+
def __len__(экземпляр):
|
279
|
+
return len(экземпляр._default_dict)
|
280
280
|
|
281
|
-
def __contains__(
|
282
|
-
return ключ in
|
281
|
+
def __contains__(экземпляр, ключ):
|
282
|
+
return ключ in экземпляр._default_dict
|
283
283
|
|
284
|
-
def Ключи(
|
285
|
-
return list(
|
284
|
+
def Ключи(экземпляр):
|
285
|
+
return list(экземпляр._default_dict.keys())
|
286
286
|
|
287
|
-
def Значения(
|
288
|
-
return list(
|
287
|
+
def Значения(экземпляр):
|
288
|
+
return list(экземпляр._default_dict.values())
|
289
289
|
|
290
|
-
def Элементы(
|
291
|
-
return list(
|
290
|
+
def Элементы(экземпляр):
|
291
|
+
return list(экземпляр._default_dict.items())
|
292
292
|
|
293
|
-
def __str__(
|
294
|
-
элементы = ', '.join(f"{k}: {v}" for k, v in
|
293
|
+
def __str__(экземпляр):
|
294
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._default_dict.items())
|
295
295
|
return f"Словарь_по_умолчанию({{{элементы}}})"
|
296
296
|
|
297
297
|
class Слоистый_словарь(_Изменяемое_отображение):
|
298
|
-
def __init__(
|
299
|
-
|
298
|
+
def __init__(экземпляр, *словари):
|
299
|
+
экземпляр._chainmap = collections.ChainMap(*словари)
|
300
300
|
|
301
|
-
def Новый_дочерний(
|
302
|
-
return Слоистый_словарь(словарь or {},
|
301
|
+
def Новый_дочерний(экземпляр, словарь = None):
|
302
|
+
return Слоистый_словарь(словарь or {}, *экземпляр._chainmap.maps)
|
303
303
|
|
304
|
-
def Родители(
|
305
|
-
return Слоистый_словарь(
|
304
|
+
def Родители(экземпляр):
|
305
|
+
return Слоистый_словарь(*экземпляр._chainmap.maps[1:])
|
306
306
|
|
307
|
-
def Получить(
|
308
|
-
return
|
307
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
308
|
+
return экземпляр._chainmap.get(ключ, по_умолчанию)
|
309
309
|
|
310
|
-
def Установить_по_умолчанию(
|
311
|
-
return
|
310
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
311
|
+
return экземпляр._chainmap.setdefault(ключ, по_умолчанию)
|
312
312
|
|
313
|
-
def Удалить(
|
314
|
-
return
|
313
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
314
|
+
return экземпляр._chainmap.pop(ключ, по_умолчанию)
|
315
315
|
|
316
|
-
def __getitem__(
|
317
|
-
return
|
316
|
+
def __getitem__(экземпляр, ключ):
|
317
|
+
return экземпляр._chainmap[ключ]
|
318
318
|
|
319
|
-
def __setitem__(
|
320
|
-
|
319
|
+
def __setitem__(экземпляр, ключ, значение):
|
320
|
+
экземпляр._chainmap[ключ] = значение
|
321
321
|
|
322
|
-
def __delitem__(
|
323
|
-
del
|
322
|
+
def __delitem__(экземпляр, ключ):
|
323
|
+
del экземпляр._chainmap[ключ]
|
324
324
|
|
325
|
-
def __iter__(
|
326
|
-
return iter(
|
325
|
+
def __iter__(экземпляр):
|
326
|
+
return iter(экземпляр._chainmap)
|
327
327
|
|
328
|
-
def __len__(
|
329
|
-
return len(
|
328
|
+
def __len__(экземпляр):
|
329
|
+
return len(экземпляр._chainmap)
|
330
330
|
|
331
|
-
def __contains__(
|
332
|
-
return ключ in
|
331
|
+
def __contains__(экземпляр, ключ):
|
332
|
+
return ключ in экземпляр._chainmap
|
333
333
|
|
334
|
-
def Ключи(
|
335
|
-
return list(
|
334
|
+
def Ключи(экземпляр):
|
335
|
+
return list(экземпляр._chainmap.keys())
|
336
336
|
|
337
|
-
def Значения(
|
338
|
-
return list(
|
337
|
+
def Значения(экземпляр):
|
338
|
+
return list(экземпляр._chainmap.values())
|
339
339
|
|
340
|
-
def Элементы(
|
341
|
-
return list(
|
340
|
+
def Элементы(экземпляр):
|
341
|
+
return list(экземпляр._chainmap.items())
|
342
342
|
|
343
|
-
def __str__(
|
344
|
-
элементы = ', '.join(f"{k}: {v}" for k, v in
|
343
|
+
def __str__(экземпляр):
|
344
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._chainmap.items())
|
345
345
|
return f"Слоистый_словарь({{{элементы}}})"
|
346
346
|
|
347
347
|
class Собственный_словарь(_Изменяемое_отображение):
|
348
|
-
def __init__(
|
349
|
-
|
348
|
+
def __init__(экземпляр, *ПА, **ИА):
|
349
|
+
экземпляр._user_dict = collections.UserDict(*ПА, **ИА)
|
350
350
|
|
351
|
-
def Получить(
|
352
|
-
return
|
351
|
+
def Получить(экземпляр, ключ, по_умолчанию = None):
|
352
|
+
return экземпляр._user_dict.get(ключ, по_умолчанию)
|
353
353
|
|
354
|
-
def Установить_по_умолчанию(
|
355
|
-
return
|
354
|
+
def Установить_по_умолчанию(экземпляр, ключ, по_умолчанию = None):
|
355
|
+
return экземпляр._user_dict.setdefault(ключ, по_умолчанию)
|
356
356
|
|
357
|
-
def Удалить(
|
358
|
-
return
|
357
|
+
def Удалить(экземпляр, ключ, по_умолчанию = None):
|
358
|
+
return экземпляр._user_dict.pop(ключ, по_умолчанию)
|
359
359
|
|
360
|
-
def Удалить_последний(
|
361
|
-
return
|
360
|
+
def Удалить_последний(экземпляр, последний = True):
|
361
|
+
return экземпляр._user_dict.popitem(last = последний)
|
362
362
|
|
363
|
-
def __getitem__(
|
364
|
-
return
|
363
|
+
def __getitem__(экземпляр, ключ):
|
364
|
+
return экземпляр._user_dict[ключ]
|
365
365
|
|
366
|
-
def __setitem__(
|
367
|
-
|
366
|
+
def __setitem__(экземпляр, ключ, значение):
|
367
|
+
экземпляр._user_dict[ключ] = значение
|
368
368
|
|
369
|
-
def __delitem__(
|
370
|
-
del
|
369
|
+
def __delitem__(экземпляр, ключ):
|
370
|
+
del экземпляр._user_dict[ключ]
|
371
371
|
|
372
|
-
def __iter__(
|
373
|
-
return iter(
|
372
|
+
def __iter__(экземпляр):
|
373
|
+
return iter(экземпляр._user_dict)
|
374
374
|
|
375
|
-
def __len__(
|
376
|
-
return len(
|
375
|
+
def __len__(экземпляр):
|
376
|
+
return len(экземпляр._user_dict)
|
377
377
|
|
378
|
-
def __contains__(
|
379
|
-
return ключ in
|
378
|
+
def __contains__(экземпляр, ключ):
|
379
|
+
return ключ in экземпляр._user_dict
|
380
380
|
|
381
|
-
def Ключи(
|
382
|
-
return list(
|
381
|
+
def Ключи(экземпляр):
|
382
|
+
return list(экземпляр._user_dict.keys())
|
383
383
|
|
384
|
-
def Значения(
|
385
|
-
return list(
|
384
|
+
def Значения(экземпляр):
|
385
|
+
return list(экземпляр._user_dict.values())
|
386
386
|
|
387
|
-
def Элементы(
|
388
|
-
return list(
|
387
|
+
def Элементы(экземпляр):
|
388
|
+
return list(экземпляр._user_dict.items())
|
389
389
|
|
390
|
-
def __str__(
|
391
|
-
элементы = ', '.join(f"{k}: {v}" for k, v in
|
390
|
+
def __str__(экземпляр):
|
391
|
+
элементы = ', '.join(f"{k}: {v}" for k, v in экземпляр._user_dict.items())
|
392
392
|
return f"Собственный_словарь({{{элементы}}})"
|
393
393
|
|
394
394
|
class Собственный_список(_Изменяемая_последовательность):
|
395
|
-
def __init__(
|
396
|
-
|
395
|
+
def __init__(экземпляр, перебираемый = None):
|
396
|
+
экземпляр._user_list = collections.UserList(перебираемый or [])
|
397
397
|
|
398
|
-
def Добавить(
|
399
|
-
|
398
|
+
def Добавить(экземпляр, элемент):
|
399
|
+
экземпляр._user_list.append(элемент)
|
400
400
|
|
401
|
-
def Вставить(
|
402
|
-
|
401
|
+
def Вставить(экземпляр, индекс, элемент):
|
402
|
+
экземпляр._user_list.insert(индекс, элемент)
|
403
403
|
|
404
|
-
def Удалить(
|
404
|
+
def Удалить(экземпляр, индекс = None):
|
405
405
|
if индекс is None:
|
406
|
-
return
|
407
|
-
return
|
406
|
+
return экземпляр._user_list.pop()
|
407
|
+
return экземпляр._user_list.pop(индекс)
|
408
408
|
|
409
|
-
def Очистить(
|
410
|
-
|
409
|
+
def Очистить(экземпляр):
|
410
|
+
экземпляр._user_list.clear()
|
411
411
|
|
412
|
-
def Количество(
|
413
|
-
return
|
412
|
+
def Количество(экземпляр, элемент):
|
413
|
+
return экземпляр._user_list.count(элемент)
|
414
414
|
|
415
|
-
def Индекс(
|
416
|
-
return
|
415
|
+
def Индекс(экземпляр, элемент, начало = 0, конец = None):
|
416
|
+
return экземпляр._user_list.index(элемент, начало, конец or len(экземпляр._user_list))
|
417
417
|
|
418
|
-
def Сортировать(
|
419
|
-
|
418
|
+
def Сортировать(экземпляр, ключ = None, по_убыванию = False):
|
419
|
+
экземпляр._user_list.sort(key = ключ, reverse = по_убыванию)
|
420
420
|
|
421
|
-
def Перевернуть(
|
422
|
-
|
421
|
+
def Перевернуть(экземпляр):
|
422
|
+
экземпляр._user_list.reverse()
|
423
423
|
|
424
|
-
def Расширить(
|
425
|
-
|
424
|
+
def Расширить(экземпляр, перебираемый):
|
425
|
+
экземпляр._user_list.extend(перебираемый)
|
426
426
|
|
427
|
-
def __getitem__(
|
428
|
-
return
|
427
|
+
def __getitem__(экземпляр, индекс):
|
428
|
+
return экземпляр._user_list[индекс]
|
429
429
|
|
430
|
-
def __setitem__(
|
431
|
-
|
430
|
+
def __setitem__(экземпляр, индекс, значение):
|
431
|
+
экземпляр._user_list[индекс] = значение
|
432
432
|
|
433
|
-
def __delitem__(
|
434
|
-
del
|
433
|
+
def __delitem__(экземпляр, индекс):
|
434
|
+
del экземпляр._user_list[индекс]
|
435
435
|
|
436
|
-
def __len__(
|
437
|
-
return len(
|
436
|
+
def __len__(экземпляр):
|
437
|
+
return len(экземпляр._user_list)
|
438
438
|
|
439
|
-
def __iter__(
|
440
|
-
return iter(
|
439
|
+
def __iter__(экземпляр):
|
440
|
+
return iter(экземпляр._user_list)
|
441
441
|
|
442
|
-
def __contains__(
|
443
|
-
return элемент in
|
442
|
+
def __contains__(экземпляр, элемент):
|
443
|
+
return элемент in экземпляр._user_list
|
444
444
|
|
445
|
-
def __reversed__(
|
446
|
-
return reversed(
|
445
|
+
def __reversed__(экземпляр):
|
446
|
+
return reversed(экземпляр._user_list)
|
447
447
|
|
448
|
-
def __str__(
|
449
|
-
return f"Собственный_список({list(
|
448
|
+
def __str__(экземпляр):
|
449
|
+
return f"Собственный_список({list(экземпляр._user_list)})"
|
450
450
|
|
451
451
|
class Собственная_строка(_Последовательность):
|
452
|
-
def __init__(
|
453
|
-
|
452
|
+
def __init__(экземпляр, строка = ""):
|
453
|
+
экземпляр._user_string = collections.UserString(строка)
|
454
454
|
|
455
|
-
def Разделить(
|
456
|
-
return
|
455
|
+
def Разделить(экземпляр, разделитель = None):
|
456
|
+
return экземпляр._user_string.split(разделитель)
|
457
457
|
|
458
|
-
def Соединить(
|
459
|
-
return
|
458
|
+
def Соединить(экземпляр, перебираемый):
|
459
|
+
return экземпляр._user_string.join(перебираемый)
|
460
460
|
|
461
|
-
def В_верхний_регистр(
|
462
|
-
return Собственная_строка(
|
461
|
+
def В_верхний_регистр(экземпляр):
|
462
|
+
return Собственная_строка(экземпляр._user_string.upper())
|
463
463
|
|
464
|
-
def В_нижний_регистр(
|
465
|
-
return Собственная_строка(
|
464
|
+
def В_нижний_регистр(экземпляр):
|
465
|
+
return Собственная_строка(экземпляр._user_string.lower())
|
466
466
|
|
467
|
-
def Начинается_с(
|
468
|
-
return
|
467
|
+
def Начинается_с(экземпляр, префикс):
|
468
|
+
return экземпляр._user_string.startswith(префикс)
|
469
469
|
|
470
|
-
def Заканчивается_на(
|
471
|
-
return
|
470
|
+
def Заканчивается_на(экземпляр, суффикс):
|
471
|
+
return экземпляр._user_string.endswith(суффикс)
|
472
472
|
|
473
|
-
def __getitem__(
|
474
|
-
return
|
473
|
+
def __getitem__(экземпляр, индекс):
|
474
|
+
return экземпляр._user_string[индекс]
|
475
475
|
|
476
|
-
def __len__(
|
477
|
-
return len(
|
476
|
+
def __len__(экземпляр):
|
477
|
+
return len(экземпляр._user_string)
|
478
478
|
|
479
|
-
def __iter__(
|
480
|
-
return iter(
|
479
|
+
def __iter__(экземпляр):
|
480
|
+
return iter(экземпляр._user_string)
|
481
481
|
|
482
|
-
def __contains__(
|
483
|
-
return элемент in
|
482
|
+
def __contains__(экземпляр, элемент):
|
483
|
+
return элемент in экземпляр._user_string
|
484
484
|
|
485
|
-
def __reversed__(
|
486
|
-
return reversed(
|
485
|
+
def __reversed__(экземпляр):
|
486
|
+
return reversed(экземпляр._user_string)
|
487
487
|
|
488
|
-
def __str__(
|
489
|
-
return str(
|
488
|
+
def __str__(экземпляр):
|
489
|
+
return str(экземпляр._user_string)
|
490
490
|
|
491
491
|
class Собственное_множество(_Изменяемое_множество):
|
492
|
-
def __init__(
|
493
|
-
|
492
|
+
def __init__(экземпляр, перебираемый = None):
|
493
|
+
экземпляр._set = set(перебираемый or [])
|
494
494
|
|
495
|
-
def Добавить(
|
496
|
-
|
495
|
+
def Добавить(экземпляр, элемент):
|
496
|
+
экземпляр._set.add(элемент)
|
497
497
|
|
498
|
-
def Удалить(
|
498
|
+
def Удалить(экземпляр, элемент):
|
499
499
|
try:
|
500
|
-
|
500
|
+
экземпляр._set.remove(элемент)
|
501
501
|
except KeyError:
|
502
502
|
raise KeyError(f"Элемент {элемент} не найден")
|
503
503
|
|
504
|
-
def Отбросить(
|
505
|
-
|
504
|
+
def Отбросить(экземпляр, элемент):
|
505
|
+
экземпляр._set.discard(элемент)
|
506
506
|
|
507
|
-
def Очистить(
|
508
|
-
|
507
|
+
def Очистить(экземпляр):
|
508
|
+
экземпляр._set.clear()
|
509
509
|
|
510
|
-
def Объединить(
|
510
|
+
def Объединить(экземпляр, другой):
|
511
511
|
if isinstance(другой, Собственное_множество):
|
512
|
-
return Собственное_множество(
|
512
|
+
return Собственное_множество(экземпляр._set | другой._set)
|
513
513
|
return NotImplemented
|
514
514
|
|
515
|
-
def Пересечь(
|
515
|
+
def Пересечь(экземпляр, другой):
|
516
516
|
if isinstance(другой, Собственное_множество):
|
517
|
-
return Собственное_множество(
|
517
|
+
return Собственное_множество(экземпляр._set & другой._set)
|
518
518
|
return NotImplemented
|
519
519
|
|
520
|
-
def Разность(
|
520
|
+
def Разность(экземпляр, другой):
|
521
521
|
if isinstance(другой, Собственное_множество):
|
522
|
-
return Собственное_множество(
|
522
|
+
return Собственное_множество(экземпляр._set - другой._set)
|
523
523
|
return NotImplemented
|
524
524
|
|
525
|
-
def Симметрическая_разность(
|
525
|
+
def Симметрическая_разность(экземпляр, другой):
|
526
526
|
if isinstance(другой, Собственное_множество):
|
527
|
-
return Собственное_множество(
|
527
|
+
return Собственное_множество(экземпляр._set ^ другой._set)
|
528
528
|
return NotImplemented
|
529
529
|
|
530
|
-
def __contains__(
|
531
|
-
return элемент in
|
530
|
+
def __contains__(экземпляр, элемент):
|
531
|
+
return элемент in экземпляр._set
|
532
532
|
|
533
|
-
def __iter__(
|
534
|
-
return iter(
|
533
|
+
def __iter__(экземпляр):
|
534
|
+
return iter(экземпляр._set)
|
535
535
|
|
536
|
-
def __len__(
|
537
|
-
return len(
|
536
|
+
def __len__(экземпляр):
|
537
|
+
return len(экземпляр._set)
|
538
538
|
|
539
|
-
def __or__(
|
540
|
-
return
|
539
|
+
def __or__(экземпляр, другой):
|
540
|
+
return экземпляр.Объединить(другой)
|
541
541
|
|
542
|
-
def __and__(
|
543
|
-
return
|
542
|
+
def __and__(экземпляр, другой):
|
543
|
+
return экземпляр.Пересечь(другой)
|
544
544
|
|
545
|
-
def __sub__(
|
546
|
-
return
|
545
|
+
def __sub__(экземпляр, другой):
|
546
|
+
return экземпляр.Разность(другой)
|
547
547
|
|
548
|
-
def __xor__(
|
549
|
-
return
|
548
|
+
def __xor__(экземпляр, другой):
|
549
|
+
return экземпляр.Симметрическая_разность(другой)
|
550
550
|
|
551
|
-
def __str__(
|
552
|
-
элементы = ', '.join(str(x) for x in
|
551
|
+
def __str__(экземпляр):
|
552
|
+
элементы = ', '.join(str(x) for x in экземпляр._set)
|
553
553
|
return f"Собственное_множество({{{элементы}}})"
|
554
554
|
|
555
|
-
def В_строку(
|
556
|
-
длина = len(
|
555
|
+
def В_строку(экземпляр):
|
556
|
+
длина = len(экземпляр._set)
|
557
557
|
if длина == 0:
|
558
558
|
return "Пустое множество"
|
559
|
-
return f"Множество с {__Общие_функции__.Склонение_после_числительного(длина, ['элементом', 'элементами', 'элементами'])}: {{{', '.join(str(x) for x in
|
559
|
+
return f"Множество с {__Общие_функции__.Склонение_после_числительного(длина, ['элементом', 'элементами', 'элементами'])}: {{{', '.join(str(x) for x in экземпляр._set)}}}"
|