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
9%
10
89%
20
2%
1
1%
Error
👍3👎1
Списки — это последовательности (𝚜𝚎𝚚𝚞𝚎𝚗𝚌𝚎𝚜), к элементам которых можно обращаться по индексу.

Из
документации 𝙿𝚢𝚝𝚑𝚘𝚗, операция индексирования последовательности определяется следующим образом:

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

При индексации список 𝚗𝚞𝚖𝚜[𝚒] возвращает 𝚒−й элемент последовательности. Индексы нумеруются с нуля. Это пришло из низкоуровневых языков вроде 𝙲. Там индекс массива — это фактически смещение (𝚘𝚏𝚏𝚜𝚎𝚝) от адреса начала массива в памяти. Первый элемент находится по адресу 𝚋𝚊𝚜𝚎_𝚊𝚍𝚍𝚛𝚎𝚜𝚜 + 𝟶, второй — 𝚋𝚊𝚜𝚎_𝚊𝚍𝚍𝚛𝚎𝚜𝚜 + 𝟷, и так далее. Поэтому индексация с нуля естественна на уровне работы с памятью.

− 𝚗𝚞𝚖𝚜[𝟶] возвращает первый элемент — 𝟷𝟶
− 𝚗𝚞𝚖𝚜[𝟷] возвращает второй элемент — 𝟸𝟶
− 𝚗𝚞𝚖𝚜[𝟸] возвращает третий элемент — 𝟹𝟶

В данном коде создается список из трех элементов: [𝟷𝟶, 𝟸𝟶, 𝟹𝟶]. При обращении 𝚗𝚞𝚖𝚜[𝟷] мы получаем элемент с индексом 𝟷, то есть второй элемент списка, который равен 𝟸𝟶.
👍3👎1
🧩 Что выведет код?
Anonymous Quiz
20%
True
71%
False
1%
0
7%
Error
🔥5👍1👎1
В данном коде выполняется логическая операция 𝚊𝚗𝚍 между двумя выражениями сравнения.

Переменные:
− 𝚡 = 𝟽
− 𝚢 = 𝟻

Выражение: 𝚡 > 𝚢 𝚊𝚗𝚍 𝚢 < 𝟹

Вычисление по шагам:
𝟷. 𝚡 > 𝚢 → 𝟽 > 𝟻 → 𝚃𝚛𝚞𝚎
𝟸. 𝚢 < 𝟹 → 𝟻 < 𝟹 → 𝙵𝚊𝚕𝚜𝚎
𝟹. 𝚃𝚛𝚞𝚎 𝚊𝚗𝚍 𝙵𝚊𝚕𝚜𝚎 → 𝙵𝚊𝚕𝚜𝚎

Согласно документации, оператор 𝚊𝚗𝚍 возвращает:
🔘 первый ложный операнд, если хотя бы один операнд ложен;
🔘 последний операнд, если все операнды истинны.

В данном случае первый операнд (𝚃𝚛𝚞𝚎) истинен, но второй операнд (𝙵𝚊𝚕𝚜𝚎) ложен, поэтому оператор «𝚊𝚗𝚍» возвращает 𝙵𝚊𝚕𝚜𝚎.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👎1
🪤 Что выведет код?
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