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.
Files changed (17) hide show
  1. 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
  2. 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
  3. 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
  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/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
  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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. rupython-1.2.12.dist-info/LICENSE +27 -0
  12. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/METADATA +2 -2
  13. rupython-1.2.12.dist-info/RECORD +19 -0
  14. rupython-1.2.10.dist-info/LICENSE +0 -1
  15. rupython-1.2.10.dist-info/RECORD +0 -15
  16. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/WHEEL +0 -0
  17. {rupython-1.2.10.dist-info → rupython-1.2.12.dist-info}/top_level.txt +0 -0
@@ -1,426 +1,559 @@
1
- Да, заебень недостающие методы. Вот поправленный код: import collections
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
- class Двусторонняя_очередь(_Последовательность):
50
+ def __str__(здесь):
51
+ return str(здесь._namedtuple)
52
+
53
+ class Двусторонняя_очередь(_Изменяемая_последовательность):
35
54
  def __init__(здесь, перебираемый = None, максимальная_длина = None):
36
- здесь._deque = collections.deque(перебираемый or [], maxlen=максимальная_длина)
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 Индекс(здесь, элемент, начало=0, конец = None):
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
- return str(list(здесь._deque))
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
- return str(здесь._counter)
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
- return str(здесь._ordered_dict)
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
- return str(здесь._default_dict)
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 Цепной_словарь(словарь or {}, *здесь._chainmap.maps)
241
-
302
+ return Слоистый_словарь(словарь or {}, *здесь._chainmap.maps)
303
+
242
304
  def Родители(здесь):
243
- return Цепной_словарь(*здесь._chainmap.maps[1:])
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
- return str(здесь._chainmap)
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
- return str(здесь._user_dict)
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 Индекс(здесь, элемент, начало=0, конец = None):
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 str(здесь._user_list)
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 Собственное_множество(collections.abc.MutableSet):
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
- return str(здесь._set)
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)}}}"