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