Python: задачки и вопросы
7.54K subscribers
1.25K photos
1 video
1 file
111 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Что выведет код?
Anonymous Quiz
68%
𝟼
12%
[1, 4, 6]
15%
4
6%
Error
4👍1👎1
𝙻𝚒𝚜𝚝 𝚌𝚘𝚖𝚙𝚛𝚎𝚑𝚎𝚗𝚜𝚒𝚘𝚗 (списковое включение) — это синтаксическая конструкция для создания нового списка на основе существующей последовательности.

Согласно
документации, синтаксис такой:

𝚕𝚒𝚜𝚝_𝚍𝚒𝚜𝚙𝚕𝚊𝚢 ::= "[" [𝚜𝚝𝚊𝚛𝚛𝚎𝚍_𝚕𝚒𝚜𝚝 | 𝚌𝚘𝚖𝚙𝚛𝚎𝚑𝚎𝚗𝚜𝚒𝚘𝚗] "]"
𝚌𝚘𝚖𝚙𝚛𝚎𝚑𝚎𝚗𝚜𝚒𝚘𝚗 ::= 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝚌𝚘𝚖𝚙_𝚏𝚘𝚛
𝚌𝚘𝚖𝚙_𝚏𝚘𝚛 ::= "𝚏𝚘𝚛" 𝚝𝚊𝚛𝚐𝚎𝚝_𝚕𝚒𝚜𝚝 "𝚒𝚗" 𝚘𝚛_𝚝𝚎𝚜𝚝 [𝚌𝚘𝚖𝚙_𝚒𝚝𝚎𝚛]

В данном коде создается новый список 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍 с помощью выражения [𝚡 ∗ 𝟸 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚍𝚊𝚝𝚊]. Это выражение:
🔘 перебирает каждый элемент 𝚡 в списке 𝚍𝚊𝚝𝚊
🔘 применяет к нему операцию умножения на 𝟸
🔘 создает новый список из полученных значений

Список 𝚍𝚊𝚝𝚊 содержит элементы [𝟷, 𝟸, 𝟹]. После применения с.в. получается 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍 = [𝟸, 𝟺, 𝟼].

Далее выполняется обращение к элементу списка по индексу: 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍[𝟸].Индексация в 𝙿𝚢𝚝𝚑𝚘𝚗 начинается с нуля. Это означает, что:
🔘 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍[𝟶] возвращает первый элемент: 𝟸;
🔘 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍[𝟷] возвращает второй элемент: 𝟺;
🔘 𝚙𝚛𝚘𝚌𝚎𝚜𝚜𝚎𝚍[𝟸] возвращает третий элемент: 𝟼 (это и будет возвращено).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎1
🪤 Что выведет код?
Anonymous Quiz
5%
35
3%
None
82%
8
11%
Error
👍4👎1
𝙻𝚊𝚖𝚋𝚍𝚊−функции могут иметь параметры со значениями по умолчанию, точно так же как обычные функции, определенные с помощью 𝚍𝚎𝚏.

Синтаксис «лямбды» (согласно
документации):

𝚕𝚊𝚖𝚋𝚍𝚊_𝚎𝚡𝚙𝚛 ::= "𝚕𝚊𝚖𝚋𝚍𝚊" [𝚙𝚊𝚛𝚊𝚖𝚎𝚝𝚎𝚛_𝚕𝚒𝚜𝚝] ":" 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗

В данном случае 𝚕𝚊𝚖𝚋𝚍𝚊−функция принимает два параметра: 𝚊 (обязательный) и 𝚋 (со значением по умолчанию 𝟻). При вызове 𝚊𝚍𝚍(𝟹) передается только один аргумент, который присваивается параметру 𝚊. Параметр 𝚋 использует значение по умолчанию, равное 𝟻.

Таким образом, выполняется операция: 𝟹 + 𝟻 = 𝟾.
👍5👎1
🧩 Выведут ли два print() одно и то же?
Anonymous Quiz
31%
Да
62%
Нет
6%
Будет ошибка
👍3👎1
Из документации Python:
«Переменная — это ссылка на объект в памяти».

Когда мы присваиваем переменной новое значение, переменная начинает ссылаться на другой объект.

В данном коде:

𝟷. Строка 𝟷: 𝚊 = 𝚃𝚛𝚞𝚎
Переменная 𝚊 ссылается на объект 𝚃𝚛𝚞𝚎 в памяти. Функция 𝚒𝚍() возвращает уникальный идентификатор объекта 𝚃𝚛𝚞𝚎.

𝟸. Строка 𝟹: 𝚊 = 𝙵𝚊𝚕𝚜𝚎
Переменная 𝚊 теперь ссылается на объект 𝙵𝚊𝚕𝚜𝚎 в памяти. Это совершенно другой объект, поэтому 𝚒𝚍() возвращает другой идентификатор.

Ключевой момент: 𝚃𝚛𝚞𝚎 и 𝙵𝚊𝚕𝚜𝚎 — это отдельные объекты в памяти. Когда мы изменяем значение переменной с 𝚃𝚛𝚞𝚎 на 𝙵𝚊𝚕𝚜𝚎, мы не изменяем сам объект 𝚃𝚛𝚞𝚎, а заставляем переменную 𝚊 ссылаться на другой объект — 𝙵𝚊𝚕𝚜𝚎.

Поэтому два вызова 𝚙𝚛𝚒𝚗𝚝(𝚒𝚍(𝚊)) покажут разные значения, так как переменная 𝚊 ссылается на разные объекты в памяти.

Это демонстрирует важную особенность: переменные не «содержат» значения, а являются ссылками на объекты. При изменении значения переменной меняется объект, на который она ссылается, а не содержимое самого объекта.
4👍2👎1
🧩 Что выведет код?
Anonymous Quiz
56%
True
42%
False
1%
None
1%
Error
👍5👎2
В Python переменные являются ссылками на объекты в памяти. Когда мы выполняем присваивание 𝚋 = 𝚊, переменная 𝚋 начинает ссылаться на тот же объект, что и переменная 𝚊.

Последовательность выполнения:
🔘 𝚊 = 𝚃𝚛𝚞𝚎 — переменная 𝚊 ссылается на объект 𝚃𝚛𝚞𝚎
🔘 𝚋 = 𝚊 — переменная 𝚋 также начинает ссылаться на объект 𝚃𝚛𝚞𝚎
🔘 𝚊 = 𝙵𝚊𝚕𝚜𝚎 — переменная 𝚊 теперь ссылается на объект 𝙵𝚊𝚕𝚜𝚎, но переменная 𝚋 по−прежнему ссылается на объект 𝚃𝚛𝚞𝚎
🔘 𝚙𝚛𝚒𝚗𝚝(𝚋) — выводит значение объекта, на который ссылается переменная 𝚋, то есть 𝚃𝚛𝚞𝚎

Из
документации:

«Операторы присваивания используются для (повторного) связывания имен со значениями и для изменения атрибутов или элементов изменяемых объектов»

При присваивании происходит связывание имени с объектом, а не копирование значения. Поэтому изменение значения одной переменной не влияет на другие переменные, которые ссылаются на тот же объект.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
🧩 Какой символ РАЗРЕШЕН в именах переменных?
Anonymous Quiz
3%
- (дефис)
1%
# (решетка)
81%
_ (нижнее подчеркивание)
15%
Все разрешаются
👍5👎1
Билл Любанович, «Простой Python», глава 𝟸:

«Имена переменных могут содержать только следующие символы:
🔘 Буквы в нижнем регистре (от «𝚊» до «𝚣»);
🔘 Буквы в верхнем регистре (от «𝙰» до «𝚉»);
🔘 Цифры (от 𝟶 до 𝟿);
🔘 Нижнее подчеркивание (_)».

Поэтому из трех предложенных символов допустим только _ (𝚞𝚗𝚍𝚎𝚛𝚜𝚌𝚘𝚛𝚎).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
Какое имя переменной некорректно?
Anonymous Quiz
9%
a_b_c__95
24%
_1a
55%
another-name
12%
Все
👍3👎1
Аналогично правилам именования из предыдущего объяснения:

🔘a_b_c__95 — корректное имя переменной:
— Начинается с буквы;
— Содержит только буквы, цифры и подчеркивания;
— Соответствует всем правилам синтаксиса.

🔘_1a — корректное имя переменной:
— Начинается с подчеркивания (что допустимо);
— Содержит только буквы, цифры и подчеркивания;
— Не является ключевым словом.

🔘another-name — некорректное имя переменной:
— Содержит дефис (-), который не является допустимым символом в именах переменных;
— Дефис интерпретируется как оператор вычитания, что приводит к синтаксической ошибке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👎1
🪤 Что выведет код?
Anonymous Quiz
51%
True
43%
False
2%
a
3%
Error
👍2👎1
Код выполняет следующие операции:
− 𝚖 = 𝟸
− 𝚗 = 𝟸𝟻𝟼 (переменная не используется)
− 𝚊 = 𝚖 + 𝟹 → 𝚊 = 𝟸 + 𝟹 = 𝟻
− 𝚋 = 𝚒𝚗𝚝('𝟻') → 𝚋 = 𝟻
− 𝚙𝚛𝚒𝚗𝚝(𝚊 𝚒𝚜 𝚋)

Ключевой момент заключается в том, как Python обрабатывает небольшие целые числа.

Оператор 𝚒𝚜 проверяет идентичность объектов: ссылаются ли две переменные на один и тот же объект в памяти. В данном случае обе переменные 𝚊 и 𝚋 имеют значение 𝟻.

Python оптимизирует работу с небольшими целыми числами от −𝟻 до 𝟸𝟻𝟼 включительно. Эти числа кэшируются и переиспользуются − все переменные с одинаковым значением в этом диапазоне ссылаются на один и тот же объект в памяти.

Поскольку значение 𝟻 находится в диапазоне кэшируемых чисел (−𝟻 до 𝟸𝟻𝟼), переменные 𝚊 и 𝚋 ссылаются на один и тот же объект в памяти. Поэтому оператор 𝚒𝚜 возвращает 𝚃𝚛𝚞𝚎.

Если бы мы использовали числа вне этого диапазона (например, 𝟹𝟶𝟶), то оператор 𝚒𝚜 вернул бы 𝙵𝚊𝚕𝚜𝚎, так как Python создавал бы отдельные объекты для каждого значения.
👍2👎1
🧩 Что выведет код?
Anonymous Quiz
14%
1
68%
2
5%
3
13%
Error
👍2👎1