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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
По шагам:

1️⃣На первой строке создаётся пустой список 𝚡 = []. Пустые коллекции в Python имеют ложное булево значение, то есть 𝚋𝚘𝚘𝚕(𝚡) = 𝙵𝚊𝚕𝚜𝚎.​

2️⃣Выражение 𝚢 = 𝚡 𝚘𝚛 [𝟷, 𝟸] работает по правилу: оператор 𝚘𝚛 возвращает первый операнд, если он истинный, иначе второй. Так как 𝚡 — пустой список (ложное значение), результатом становится второй операнд — список [𝟷, 𝟸], и именно он присваивается переменной 𝚢.​

3️⃣Далее вычисляется 𝚣 = 𝚡 𝚊𝚗𝚍 [𝟹, 𝟺]. Для 𝚊𝚗𝚍 правило обратное: возвращается первый ложный операнд, а если оба истинные — второй. Поскольку 𝚡 — ложное значение, короткое замыкание срабатывает сразу, второй операнд не вычисляется, и в 𝚣 попадает тот же пустой список [].​

4️⃣Вызов 𝚙𝚛𝚒𝚗𝚝(𝚢, 𝚣) печатает строковое представление двух объектов через пробел: сначала список [𝟷, 𝟸] как [1, 2], затем пустой список как [], поэтому итоговая и единственная строка вывода — [1, 2] [].​

Чему нас учит эта задачка: логические операторы 𝚊𝚗𝚍 и 𝚘𝚛 в Python возвращают один из операндов, а не обязательно булево значение, и активно используют правду/ложь контейнеров (пустой список, пустая строка и т.п.), что полезно и для удобного задания дефолтных значений, и для лаконичных проверок.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
Разбираем по шагам:

1️⃣В выражении True == 1 используется оператор равенства: булевый тип 𝚋𝚘𝚘𝚕 является подклассом 𝚒𝚗𝚝, и значение True ведёт себя как единица, поэтому результат сравнения — логическое True, и переменная 𝚊 получает значение True.​

2️⃣Во второй строке 1 == True просто меняет местами операнды, но семантика == остаётся прежней: значения всё так же считаются равными, поэтому переменная 𝚋 тоже становится True.​

3️⃣В третьей строке вызывается type(True) — результатом будет объект типа 𝚋𝚘𝚘𝚕, и type(1) — объект типа 𝚒𝚗𝚝; оператор is здесь проверяет, являются ли оба результата вызова type(...) одним и тем же объектом типа, и так как 𝚋𝚘𝚘𝚕 и 𝚒𝚗𝚝 — разные классы, выражение даёт False, поэтому 𝚌 получает False.​

4️⃣При вызове print(a, b, c) функция печатает текущие значения 𝚊, 𝚋 и 𝚌 через пробел, что даёт строку True True False.

Эта задачка важна тем, что показывает: булевы значения в Python — это не магический отдельный тип, а вполне себе подкласс целых чисел, поэтому True, 1 и 1.0 могут неожиданно сливаться в один и тот же ключ словаря или проходить проверки типов там, где ожидается int.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Развёрнутое пояснение

1️⃣Переменная 𝚝 указывает на кортеж с одним элементом — списком [𝟷, 𝟸]; сам кортеж неизменяем, но список внутри него — изменяемый объект.

2️⃣Выражение t[0] += [3] разворачивается примерно в t[0] = t[0].__iadd__([3]): сначала вызывается метод __iadd__ у списка, который добавляет элемент 𝟹 на месте и возвращает тот же самый изменённый список.

3️⃣Затем интерпретатор пытается выполнить присваивание t[0] = ..., но кортеж не поддерживает присваивание элементов, поэтому выбрасывается TypeError: 'tuple' object does not support item assignment.

4️⃣Однако к моменту исключения список уже был изменён методом __iadd__, поэтому если после ошибки проверить значение 𝚝, оно будет ([1, 2, 3],) — мутация произошла, несмотря на ошибку.

Почему это важно
Задача показывает, что составные операторы вроде += — это не атомарная операция, а последовательность из нескольких шагов, и сбой на одном из них не откатывает предыдущие. Это учит быть осторожнее при работе с вложенными изменяемыми объектами внутри неизменяемых контейнеров и помнить, что «неизменяемость» кортежа распространяется только на его структуру, а не на содержимое элементов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😱1
Учитесь новому так, как удобно вам, вместе с Академией Топ

Академия Топ — это крупнейшая образовательная сеть с филиалами в 230 городах, в которой вы можете изучать множество разнообразных IT-профессий.

По итогам обучения выпускники Академии получают государственный диплом, признанный в 7 странах мира.

Выбирайте курс по душе:

«Разработка на Python»
«Разработчик программного обеспечения»
«Кибербезопасность и сетевые технологии»
• и многое другое

Академия регулярно проводит бесплатные дни открытых дверей «Старт в IT» для тех, кто мечтает о карьере в IT, но не знает, с чего начать.

Вы сможете познакомиться с преподавателями, получить индивидуальную консультацию, увидеть работы студентов и посетить экскурсию по Академии.

А для тех, кто уже выбрал своим направлением Python-разработку, в Академии Топ проводят пробные занятия «Python с нуля: создаём чат-бота», где вы на практике изучите основы универсального языка программирования и создадите свой первый проект.

Выбирайте свой курс с подходящим вам форматом обучения!

Реклама. Филиал «АКАДЕМИЯ ТОП КУТУЗОВСКИЙ», ИНН 7730257499, erid: 2W5zFK5c4jS
4🔥4❤‍🔥2👍1🤩1
Что выведет код?
Anonymous Quiz
28%
True
64%
False
7%
Error
1%
[False]
Развёрнутое пояснение

1️⃣Выражение False == False in [False] выглядит так, будто сначала вычисляется False == False → True, а затем True in [False] → False, но это не так.

2️⃣Python трактует цепочки сравнений особым образом: выражение 𝚊 == 𝚋 in 𝚌 эквивалентно (𝚊 == 𝚋) and (𝚋 in 𝚌), при этом 𝚋 вычисляется только один раз.​

3️⃣Подставляем: (False == False) and (False in [False]) → True and True → True.

4️⃣Переменная 𝚛𝚎𝚜𝚞𝚕𝚝 получает значение True, и именно оно выводится на экран.

Почему это важно
Задача учит не полагаться на интуицию при чтении сложных выражений со сравнениями: оператор in тоже участвует в цепочке, и без понимания этого правила легко неправильно предсказать результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2