es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

Python: задачки и вопросы

Python: задачки и вопросы

Ir al canal en Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

Mostrar más
6 877
Suscriptores
-524 horas
-167 días
-4830 días
Atraer Suscriptores
oct '26
octubre '26
+43
en 0 canales
septiembre '26
+32
en 0 canales
Get PRO
agosto '26
+24
en 0 canales
Get PRO
julio '26
+28
en 1 canales
Get PRO
junio '26
+48
en 0 canales
Get PRO
mayo '26
+58
en 1 canales
Get PRO
abril '26
+33
en 0 canales
Get PRO
marzo '26
+29
en 1 canales
Get PRO
febrero '26
+32
en 1 canales
Get PRO
enero '26
+39
en 0 canales
Get PRO
diciembre '25
+44
en 0 canales
Get PRO
noviembre '25
+102
en 3 canales
Get PRO
octubre '25
+61
en 0 canales
Get PRO
septiembre '25
+56
en 1 canales
Get PRO
agosto '25
+65
en 3 canales
Get PRO
julio '25
+58
en 0 canales
Get PRO
junio '25
+56
en 0 canales
Get PRO
mayo '25
+52
en 0 canales
Get PRO
abril '25
+89
en 0 canales
Get PRO
marzo '25
+77
en 1 canales
Get PRO
febrero '25
+108
en 3 canales
Get PRO
enero '25
+115
en 2 canales
Get PRO
diciembre '24
+94
en 1 canales
Get PRO
noviembre '24
+81
en 1 canales
Get PRO
octubre '24
+78
en 0 canales
Get PRO
septiembre '24
+82
en 0 canales
Get PRO
agosto '24
+75
en 0 canales
Get PRO
julio '24
+73
en 0 canales
Get PRO
junio '24
+82
en 0 canales
Get PRO
mayo '24
+163
en 2 canales
Get PRO
abril '24
+158
en 0 canales
Get PRO
marzo '24
+117
en 0 canales
Get PRO
febrero '24
+117
en 0 canales
Get PRO
enero '24
+143
en 1 canales
Get PRO
diciembre '23
+140
en 0 canales
Get PRO
noviembre '23
+120
en 0 canales
Get PRO
octubre '23
+94
en 0 canales
Get PRO
septiembre '23
+95
en 0 canales
Get PRO
agosto '23
+145
en 0 canales
Get PRO
julio '23
+312
en 0 canales
Get PRO
junio '23
+90
en 0 canales
Get PRO
mayo '23
+140
en 0 canales
Get PRO
abril '23
+258
en 0 canales
Get PRO
marzo '23
+217
en 0 canales
Get PRO
febrero '23
+307
en 0 canales
Get PRO
enero '23
+222
en 0 canales
Get PRO
diciembre '22
+327
en 0 canales
Get PRO
noviembre '22
+256
en 0 canales
Get PRO
octubre '22
+286
en 0 canales
Get PRO
septiembre '22
+294
en 0 canales
Get PRO
agosto '22
+652
en 0 canales
Get PRO
julio '22
+410
en 0 canales
Get PRO
junio '22
+246
en 0 canales
Get PRO
mayo '22
+360
en 0 canales
Get PRO
abril '22
+266
en 0 canales
Get PRO
marzo '22
+204
en 0 canales
Get PRO
febrero '22
+340
en 0 canales
Get PRO
enero '22
+2 183
en 0 canales
Get PRO
diciembre '21
+2 522
en 0 canales
Get PRO
noviembre '21
+1 808
en 0 canales
Get PRO
octubre '21
+1 036
en 0 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
26 octubre+2
25 octubre0
24 octubre+1
23 octubre+2
22 octubre+3
21 octubre+3
20 octubre0
19 octubre+1
18 octubre0
17 octubre+1
16 octubre0
15 octubre0
14 octubre0
13 octubre+1
12 octubre+8
11 octubre+1
10 octubre+2
09 octubre+1
08 octubre+6
07 octubre+2
06 octubre0
05 octubre0
04 octubre0
03 octubre0
02 octubre+1
01 octubre+8
Publicaciones del Canal
Два вызова после замены 1️⃣b.name создаёт связанный метод. Он хранит экземпляр b и функцию из класса Bot на момент обращения. 2️⃣tag сохраняет этот метод. Присваивание Bot.name = name заменяет атрибут класса, а сохранённую функцию внутри tag не меняет. 3️⃣Поэтому tag() вызывает прежнюю функцию и возвращает v1. 4️⃣b.name() ищет атрибут заново, уже после замены. Находит новую функцию и возвращает v2. print выводит v1 v2. Почему это важно Если сохранить метод как callback, последующая замена метода класса не обновит этот callback. При необходимости использовать текущую реализацию обращайтесь к методу непосредственно перед вызовом.

2
Sin texto...
159
3
Ноль, которого нет 1️⃣a хранит apple=2. У b дополнительно есть pear=0, у c — pear=-1. 2️⃣Нулевое значение не удаляет ключ из b. В обычном словаре наличие такого дополнительного ключа повлияло бы на равенство. 3️⃣С Python 3.10 сравнения Counter считают отсутствующие элементы нулевыми. В a счётчик pear равен нулю для сравнения, как и в b. Поэтому a == b даёт True. 4️⃣В c значение pear равно -1. Ноль и минус один различаются, поэтому a == c даёт False. Итоговая строка: True False. Почему это важно Равенство Counter проверяет частоты, а не одинаковый набор сохранённых ключей. Если в тесте важна структура записей, сравнивайте dict(a) и dict(b): здесь они различаются.
202
4
Sin texto...
193
5
Настройка на один вызов 1️⃣partial(print, sep="-") создаёт fmt с заранее заданным именованным аргументом sep. 2️⃣В первом вызове свой sep не передан. print использует дефис и выводит a-b. 3️⃣Во втором вызове sep="|" переопределяет сохранённое значение. print получает один sep и выводит a|b, ошибки нет. 4️⃣Это переопределение действует на конкретный вызов: само сохранённое значение в fmt не меняется. Следующий вызов без sep снова использовал бы дефис. Почему это важно Именованные аргументы partial можно переопределять при вызове. Для обработчиков это удобные настройки по умолчанию. Позиционные аргументы, связанные в partial, работают иначе: новые позиционные аргументы добавляются к ним.
197
6
Sin texto...
180
7
Куда делась запись 1️⃣В исходном словаре число 1 и строка "1" — разные ключи. Обе записи существуют, поэтому первый print выводит 2. 2️⃣При json.dumps числовой ключ преобразуется в строковый. В JSON появляются два одинаковых имени "1", сначала со значением number, затем со значением text. 3️⃣Стандартный json.loads принимает повторяющиеся имена и оставляет последнее значение. Получается словарь с одной парой: '1': 'text'. 4️⃣Последний print выводит число записей и значение строкового ключа: 1 text. Почему это важно Сохранение в JSON и обратное чтение не гарантируют сохранения структуры произвольного Python-словаря. Для идентификаторов выберите один тип ключей заранее и проверяйте коллизии при преобразовании. Если нужно сохранить типы ключей, можно передать записи списком пар с явным описанием типа.
233
8
Sin texto...
252
9
Порядок подготовки вызова 1️⃣Функция mark печатает переданную метку и возвращает ту же строку. Тело send печатает sent. 2️⃣Сначала готовятся позиционные аргументы, в том числе распакованные через *. Выражение [mark("item")] печатает item и даёт один позиционный аргумент. 3️⃣Затем вычисляется именованный аргумент label. Вызов mark("label") печатает label и возвращает его значение. Написанный левее аргумент здесь вычисляется позже. 4️⃣После подготовки аргументов вызывается send. Итоговые строки: item, label, sent. Такой вызов допустим: после именованного аргумента стоит распаковка *, а не обычный позиционный аргумент. Почему это важно Не рассчитывайте на визуальный порядок побочных эффектов в смешанном вызове с *. Если операции должны идти строго по порядку, вычислите их результаты отдельными инструкциями перед вызовом функции.
274
10
Sin texto...
260
11
Два момента применения точности 1️⃣В локальном контексте ctx.prec = 3 задаёт три значащие цифры для операций Decimal. Это не число знаков после запятой. 2️⃣Decimal("1.2345") точно сохраняет переданную десятичную строку. Конструктор не обрезает её по prec, поэтому первый print выводит 1.2345. 3️⃣Выражение +price выполняет операцию Decimal в текущем контексте. При точности 3 результат округляется до 1.23. 4️⃣Второй print выводит 1.23. Исходный price не изменился: унарный плюс вернул новое значение. Почему это важно Точность контекста влияет на вычисления, а не на количество цифр, которое разрешено загрузить из строки. При расчётах цены различайте точность арифметики и округление до денежной единицы: для фиксированного числа знаков после запятой обычно задают явный quantize.
293
12
Sin texto...
280
13
Поиск и вставка 1️⃣Записи rows упорядочены по первому числу. Функция key возвращает это число из каждой строки. 2️⃣bisect_left применяет key к элементам rows, но не к аргументу new. Поэтому при поиске сравниваются число и кортеж. Возникает TypeError, обработчик печатает search failed. 3️⃣insort_left при поиске позиции вычисляет key(new), получая 15. Число попадает между 10 и 20, и вставка успешно находит индекс 1. 4️⃣В список вставляется исходный кортеж, не число 15. Результат: [(10, 'a'), (15, 'b'), (20, 'c')]. Почему это важно При ручном поиске позиции передавайте значение в пространстве ключей: bisect_left(rows, key(new), key=key). При вставке через insort передают целую запись. Похожие параметры этих функций не означают одинаковую обработку искомого объекта.
297
14
Sin texto...
270
15
Что меняют скобки 1️⃣Строка text содержит три имени, разделённые двоеточиями. Оба шаблона находят те же два разделителя. 2️⃣В первом вызове шаблон : не содержит групп. re.split возвращает только части между разделителями: ['api', 'db', 'auth']. 3️⃣Во втором вызове скобки создают захватывающую группу. Её совпадения тоже входят в результат, между соседними частями текста. 4️⃣Поэтому второй список — ['api', ':', 'db', ':', 'auth']. Двоеточия не исчезли: их попросили захватить. Почему это важно Так можно разбить выражение на токены и сохранить операторы или пунктуацию. Если скобки нужны лишь для группировки шаблона, используйте незахватывающую группу (?:...), чтобы разделители не добавлялись в результат.
301
16
Sin texto...
296
17
Что успевает выполниться 1️⃣Класс Limit определяет метод __int__, который возвращает целое число 2. Экземпляр этого класса сохраняется в limit. 2️⃣Вызов int(limit) использует __int__. Преобразование успешно, поэтому первый print выводит 2. 3️⃣Во втором вызове сначала вычисляется аргумент: срез строки "abcdef" с границей limit. Для такого объекта Python требует метод __index__, возвращающий целое число. Одного __int__ недостаточно. 4️⃣У Limit нет __index__, поэтому возникает TypeError. Второй print не вызывается: в обычном выводе остаётся только 2, а выполнение завершается с ошибкой. Почему это важно Вызов int(obj) разрешает объекту преобразоваться в число, но не делает его автоматически допустимым индексом. При создании собственного целочисленного типа для срезов или range нужен __index__. Если же лимит нужно явно преобразовать, это можно сделать в месте использования: "abcdef"[:int(limit)] даст ab.
294
18
Sin texto...
288
19
Как меняется буфер 1️⃣В data лежат байты AB. Вызов memoryview(data) создаёт представление того же буфера, не копию данных. 2️⃣Присваивание data[0] = ord("Z") заменяет первый байт без изменения размера. Представление видит эту запись, поэтому первый print выводит b'ZB'. 3️⃣Вызов append пытается увеличить bytearray. Пока view активно, изменение размера запрещено: возникает BufferError, обработчик печатает blocked. Байт C не добавляется. 4️⃣Вызов view.release() освобождает представление. Теперь ограничение на изменение размера, связанное с этим view, снято. Сам bytearray при этом остаётся. 5️⃣Второй append успешно добавляет C. Последний print выводит b'ZBC'. Все три строки: b'ZB', blocked, b'ZBC'. Почему это важно Представления помогают обрабатывать бинарные пакеты без копирования. Пока такое представление активно, можно заменять байты внутри буфера, но нельзя расширять bytearray. Перед расширением нужно освободить все активные представления этого буфера.
298
20
Sin texto...
306