ch
Feedback

不要被骗子欺骗!Telemetrio 会找到并标记这些频道 👉 如果想查看标记,请订阅

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

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

前往频道在 Telegram

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

显示更多
6 877
订阅者
-524 小时
-167 天
-4830 天
吸引订阅者
10月 '26
十月 '26
+43
在0个频道中
九月 '26
+32
在0个频道中
Get PRO
八月 '26
+24
在0个频道中
Get PRO
七月 '26
+28
在1个频道中
Get PRO
六月 '26
+48
在0个频道中
Get PRO
五月 '26
+58
在1个频道中
Get PRO
四月 '26
+33
在0个频道中
Get PRO
三月 '26
+29
在1个频道中
Get PRO
二月 '26
+32
在1个频道中
Get PRO
一月 '26
+39
在0个频道中
Get PRO
十二月 '25
+44
在0个频道中
Get PRO
十一月 '25
+102
在3个频道中
Get PRO
十月 '25
+61
在0个频道中
Get PRO
九月 '25
+56
在1个频道中
Get PRO
八月 '25
+65
在3个频道中
Get PRO
七月 '25
+58
在0个频道中
Get PRO
六月 '25
+56
在0个频道中
Get PRO
五月 '25
+52
在0个频道中
Get PRO
四月 '25
+89
在0个频道中
Get PRO
三月 '25
+77
在1个频道中
Get PRO
二月 '25
+108
在3个频道中
Get PRO
一月 '25
+115
在2个频道中
Get PRO
十二月 '24
+94
在1个频道中
Get PRO
十一月 '24
+81
在1个频道中
Get PRO
十月 '24
+78
在0个频道中
Get PRO
九月 '24
+82
在0个频道中
Get PRO
八月 '24
+75
在0个频道中
Get PRO
七月 '24
+73
在0个频道中
Get PRO
六月 '24
+82
在0个频道中
Get PRO
五月 '24
+163
在2个频道中
Get PRO
四月 '24
+158
在0个频道中
Get PRO
三月 '24
+117
在0个频道中
Get PRO
二月 '24
+117
在0个频道中
Get PRO
一月 '24
+143
在1个频道中
Get PRO
十二月 '23
+140
在0个频道中
Get PRO
十一月 '23
+120
在0个频道中
Get PRO
十月 '23
+94
在0个频道中
Get PRO
九月 '23
+95
在0个频道中
Get PRO
八月 '23
+145
在0个频道中
Get PRO
七月 '23
+312
在0个频道中
Get PRO
六月 '23
+90
在0个频道中
Get PRO
五月 '23
+140
在0个频道中
Get PRO
四月 '23
+258
在0个频道中
Get PRO
三月 '23
+217
在0个频道中
Get PRO
二月 '23
+307
在0个频道中
Get PRO
一月 '23
+222
在0个频道中
Get PRO
十二月 '22
+327
在0个频道中
Get PRO
十一月 '22
+256
在0个频道中
Get PRO
十月 '22
+286
在0个频道中
Get PRO
九月 '22
+294
在0个频道中
Get PRO
八月 '22
+652
在0个频道中
Get PRO
七月 '22
+410
在0个频道中
Get PRO
六月 '22
+246
在0个频道中
Get PRO
五月 '22
+360
在0个频道中
Get PRO
四月 '22
+266
在0个频道中
Get PRO
三月 '22
+204
在0个频道中
Get PRO
二月 '22
+340
在0个频道中
Get PRO
一月 '22
+2 183
在0个频道中
Get PRO
十二月 '21
+2 522
在0个频道中
Get PRO
十一月 '21
+1 808
在0个频道中
Get PRO
十月 '21
+1 036
在0个频道中
日期
订阅者增长
提及
频道
26 十月+2
25 十月0
24 十月+1
23 十月+2
22 十月+3
21 十月+3
20 十月0
19 十月+1
18 十月0
17 十月+1
16 十月0
15 十月0
14 十月0
13 十月+1
12 十月+8
11 十月+1
10 十月+2
09 十月+1
08 十月+6
07 十月+2
06 十月0
05 十月0
04 十月0
03 十月0
02 十月+1
01 十月+8
频道帖子
Два вызова после замены 1️⃣b.name создаёт связанный метод. Он хранит экземпляр b и функцию из класса Bot на момент обращения. 2️⃣tag сохраняет этот метод. Присваивание Bot.name = name заменяет атрибут класса, а сохранённую функцию внутри tag не меняет. 3️⃣Поэтому tag() вызывает прежнюю функцию и возвращает v1. 4️⃣b.name() ищет атрибут заново, уже после замены. Находит новую функцию и возвращает v2. print выводит v1 v2. Почему это важно Если сохранить метод как callback, последующая замена метода класса не обновит этот callback. При необходимости использовать текущую реализацию обращайтесь к методу непосредственно перед вызовом.

2
没有文字...
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
没有文字...
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
没有文字...
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
没有文字...
252
9
Порядок подготовки вызова 1️⃣Функция mark печатает переданную метку и возвращает ту же строку. Тело send печатает sent. 2️⃣Сначала готовятся позиционные аргументы, в том числе распакованные через *. Выражение [mark("item")] печатает item и даёт один позиционный аргумент. 3️⃣Затем вычисляется именованный аргумент label. Вызов mark("label") печатает label и возвращает его значение. Написанный левее аргумент здесь вычисляется позже. 4️⃣После подготовки аргументов вызывается send. Итоговые строки: item, label, sent. Такой вызов допустим: после именованного аргумента стоит распаковка *, а не обычный позиционный аргумент. Почему это важно Не рассчитывайте на визуальный порядок побочных эффектов в смешанном вызове с *. Если операции должны идти строго по порядку, вычислите их результаты отдельными инструкциями перед вызовом функции.
274
10
没有文字...
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
没有文字...
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
没有文字...
270
15
Что меняют скобки 1️⃣Строка text содержит три имени, разделённые двоеточиями. Оба шаблона находят те же два разделителя. 2️⃣В первом вызове шаблон : не содержит групп. re.split возвращает только части между разделителями: ['api', 'db', 'auth']. 3️⃣Во втором вызове скобки создают захватывающую группу. Её совпадения тоже входят в результат, между соседними частями текста. 4️⃣Поэтому второй список — ['api', ':', 'db', ':', 'auth']. Двоеточия не исчезли: их попросили захватить. Почему это важно Так можно разбить выражение на токены и сохранить операторы или пунктуацию. Если скобки нужны лишь для группировки шаблона, используйте незахватывающую группу (?:...), чтобы разделители не добавлялись в результат.
301
16
没有文字...
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
没有文字...
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
没有文字...
306