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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Что выведет код?
Anonymous Quiz
48%
2 2
10%
2 3
26%
2 4
15%
4 4
👏5
Развёрнутое пояснение

1️⃣Строка 𝚜 содержит: пробел, 𝚊, пробел, 𝚋, пробел — всего 5 символов.

2️⃣Метод 𝚜.𝚜𝚙𝚕𝚒𝚝() воспринимает любую последовательность пробелов как один разделитель и игнорирует ведущие/завершающие, поэтому результат — ['𝚊', '𝚋'], длина 𝟸.​​

3️⃣Метод 𝚜.𝚜𝚙𝚕𝚒𝚝(' ') разбивает ровно по каждому пробелу: пробел в начале даёт '', затем '𝚊', затем '𝚋', пробел в конце даёт ''; итого ['', '𝚊', '𝚋', ''] — длина 𝟺.

Почему это важно
Многие разработчики интуитивно считают, что 𝚜𝚙𝚕𝚒𝚝(' ') и 𝚜𝚙𝚕𝚒𝚝() — это одно и то же, но на практике разница критична при парсинге данных: логи, CSV-файлы или пользовательский ввод часто содержат лишние пробелы в начале/конце строк или двойные пробелы между словами. Если использовать 𝚜𝚙𝚕𝚒𝚝(' ') для такой строки, в результате появятся пустые элементы '', которые могут сломать дальнейшую обработку — например, 𝚒𝚗𝚝('') выбросит ошибку, а 𝚕𝚎𝚗(𝚛𝚎𝚜𝚞𝚕𝚝) покажет неверное количество «слов». Правило простое: если нужно разбить текст на слова — используй 𝚜𝚙𝚕𝚒𝚝() без аргументов; если нужно точное разбиение по конкретному символу с сохранением структуры — тогда 𝚜𝚙𝚕𝚒𝚝(' ').
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1
Разбор по шагам

1️⃣Переменная 𝚡 имеет значение False.

2️⃣В условии 𝚢 := 𝚡 𝚘𝚛 𝚃𝚛𝚞𝚎 сначала вычисляется правая часть: 𝚡 𝚘𝚛 𝚃𝚛𝚞𝚎 → False or True → True.​

3️⃣Затем walrus-оператор присваивает это значение переменной 𝚢, то есть 𝚢 = 𝚃𝚛𝚞𝚎.

4️⃣Условие if истинно (𝚢 равно True), поэтому выполняется print(y) и на экран выводится True.

Почему это важно
Если бы разработчик хотел присвоить 𝚢 значение 𝚡, а потом проверить 𝚢 𝚘𝚛 𝚃𝚛𝚞𝚎, нужны скобки: (𝚢 := 𝚡) 𝚘𝚛 𝚃𝚛𝚞𝚎. Без понимания приоритета легко получить неожиданный результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Развёрнутое пояснение

1️⃣Вызов 𝚜𝚞𝚖(𝚒𝚝𝚎𝚛𝚊𝚋𝚕𝚎, 𝚜𝚝𝚊𝚛𝚝) эквивалентен последовательному сложению: 𝚜𝚝𝚊𝚛𝚝 + 𝚒𝚝𝚎𝚖𝟷 + 𝚒𝚝𝚎𝚖𝟸 + ....

2️⃣Здесь 𝚜𝚝𝚊𝚛𝚝 = [] (пустой список), а элементы итерируемого — [𝟷, 𝟸] и [𝟹, 𝟺].

3️⃣Первый шаг: [] + [𝟷, 𝟸] → [𝟷, 𝟸].

4️⃣Второй шаг: [𝟷, 𝟸] + [𝟹, 𝟺] → [𝟷, 𝟸, 𝟹, 𝟺].

5️⃣Переменная 𝚛𝚎𝚜𝚞𝚕𝚝 получает этот список, и print выводит [1, 2, 3, 4].

Почему это важно
Это «хакерский» способ сгладить список списков, но он неэффективен (квадратичная сложность из-за создания промежуточных списков); для реальных задач лучше использовать 𝚒𝚝𝚎𝚛𝚝𝚘𝚘𝚕𝚜.𝚌𝚑𝚊𝚒𝚗.𝚏𝚛𝚘𝚖_𝚒𝚝𝚎𝚛𝚊𝚋𝚕𝚎() или list comprehension.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Что выведет код?
Anonymous Quiz
55%
10
17%
20
8%
10 20
20%
Error
🤝1
Развёрнутое пояснение

1️⃣Глобальная переменная 𝚡 получает значение 𝟷𝟶.

2️⃣При компиляции функции 𝚏𝚘𝚘 Python видит строку 𝚡 = 𝟸𝟶 и помечает 𝚡 как локальную переменную для всего тела функции.​

3️⃣Когда функция вызывается и выполняется 𝚙𝚛𝚒𝚗𝚝(𝚡), Python ищет 𝚡 в локальной области видимости, но присваивание ещё не произошло — переменная существует, но не связана со значением.​

4️⃣Выбрасывается UnboundLocalError: local variable 'x' referenced before assignment.

Почему это важно
Эта ошибка часто сбивает с толку начинающих: кажется, что глобальная переменная должна быть видна, но наличие присваивания ниже по коду «перетягивает» её в локальную область. Решение — либо использовать 𝚐𝚕𝚘𝚋𝚊𝚕 𝚡, либо не переиспользовать имя глобальной переменной.
Please open Telegram to view this post
VIEW IN TELEGRAM
1