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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🪤 Что выведет код?
Anonymous Quiz
14%
(10, 20)
22%
[10, 20]
14%
10, 20
50%
Error
👍3👎1
Код вызовет 𝙺𝚎𝚢𝙴𝚛𝚛𝚘𝚛.

При обращении к элементу словаря 𝚜𝚌𝚘𝚛𝚎𝚜['𝙰', '𝙱'] 𝙿𝚢𝚝𝚑𝚘𝚗 интерпретирует '𝙰', '𝙱' как кортеж ('𝙰', '𝙱'), а не как два отдельных ключа.

Согласно
документации 𝙿𝚢𝚝𝚑𝚘𝚗, запятая создает кортеж:

𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗_𝚕𝚒𝚜𝚝 ::= 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 ("," 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗)∗ [","]

Таким образом, выражение 𝚜𝚌𝚘𝚛𝚎𝚜['𝙰', '𝙱'] эквивалентно 𝚜𝚌𝚘𝚛𝚎𝚜[('𝙰', '𝙱')].

В словаре 𝚜𝚌𝚘𝚛𝚎𝚜 есть только ключи '𝙰' и '𝙱', но нет ключа ('𝙰', '𝙱'). При попытке обращения к несуществующему ключу словарь генерирует исключение 𝙺𝚎𝚢𝙴𝚛𝚛𝚘𝚛.

Для получения нескольких значений из словаря нужно использовать отдельные обращения или методы словаря, например:
− 𝚜𝚌𝚘𝚛𝚎𝚜['𝙰'], 𝚜𝚌𝚘𝚛𝚎𝚜['𝙱']
− [𝚜𝚌𝚘𝚛𝚎𝚜[𝚔] 𝚏𝚘𝚛 𝚔 𝚒𝚗 ('𝙰', '𝙱')]
👍51👎1
🧩 Что выведет код?
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