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
Код выполняет следующие операции:
− 𝚖 = 𝟸
− 𝚗 = 𝟸𝟻𝟼 (переменная не используется)
− 𝚊 = 𝚖 + 𝟹 → 𝚊 = 𝟸 + 𝟹 = 𝟻
− 𝚋 = 𝚒𝚗𝚝('𝟻') → 𝚋 = 𝟻
− 𝚙𝚛𝚒𝚗𝚝(𝚊 𝚒𝚜 𝚋)

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

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

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

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

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

Согласно
документации Python, синтаксис цикла 𝚏𝚘𝚛:

𝚏𝚘𝚛_𝚜𝚝𝚖𝚝 ::= "𝚏𝚘𝚛" 𝚝𝚊𝚛𝚐𝚎𝚝_𝚕𝚒𝚜𝚝 "𝚒𝚗" 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗_𝚕𝚒𝚜𝚝 ":" 𝚜𝚞𝚒𝚝𝚎

В данном случае:
− 𝚝𝚊𝚛𝚐𝚎𝚝_𝚕𝚒𝚜𝚝 — это переменная 𝚒
− 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗_𝚕𝚒𝚜𝚝 — это кортеж (𝟺,𝟹,𝟸,𝟷,𝟶)
− 𝚜𝚞𝚒𝚝𝚎 — это блок с оператором 𝚙𝚛𝚒𝚗𝚝

Функция 𝚙𝚛𝚒𝚗𝚝() выводит значение 𝚒 и параметр 𝚎𝚗𝚍=" " означает, что после каждого вывода будет добавлен пробел, а не символ новой строки.

Параметр 𝚎𝚗𝚍 в функции 𝚙𝚛𝚒𝚗𝚝() позволяет указать, что должно выводиться после основного содержимого. По умолчанию 𝚎𝚗𝚍="\𝚗", что означает переход на новую строку.

Таким образом, код выведет: 𝟺 𝟹 𝟸 𝟷 𝟶 (с пробелом после последнего числа).
👍2👎1
Метод 𝚟𝚊𝚕𝚞𝚎_𝚌𝚘𝚞𝚗𝚝𝚜() в 𝚙𝚊𝚗𝚍𝚊𝚜 используется для подсчета частоты встречаемости значений в 𝚂𝚎𝚛𝚒𝚎𝚜. Когда используется параметр 𝚋𝚒𝚗𝚜, метод группирует числовые данные в интервалы (𝚋𝚒𝚗𝚜) и подсчитывает количество значений в каждом интервале.

В данном коде:
− 𝚍𝚏 = 𝚙𝚍.𝚂𝚎𝚛𝚒𝚎𝚜(𝚗𝚙.𝚛𝚊𝚗𝚍𝚘𝚖.𝚛𝚊𝚗𝚍𝚒𝚗𝚝(𝟶, 𝟷𝟶𝟶𝟶, 𝟻𝟶)) создает 𝚂𝚎𝚛𝚒𝚎𝚜 из 𝟻𝟶 случайных целых чисел от 𝟶 до 𝟿𝟿𝟿
− 𝚋𝚞𝚌𝚔𝚎𝚝𝚜 = 𝚕𝚒𝚜𝚝(𝚛𝚊𝚗𝚐𝚎(𝟶, 𝟷𝟶𝟶𝟷, 𝟸𝟶𝟶)) создает список границ интервалов: [𝟶, 𝟸𝟶𝟶, 𝟺𝟶𝟶, 𝟼𝟶𝟶, 𝟾𝟶𝟶, 𝟷𝟶𝟶𝟶]
− 𝚍𝚏.𝚟𝚊𝚕𝚞𝚎_𝚌𝚘𝚞𝚗𝚝𝚜(𝚋𝚒𝚗𝚜=𝚋𝚞𝚌𝚔𝚎𝚝𝚜) группирует значения в интервалы и подсчитывает количество значений в каждом

Согласно
документации, параметр 𝚋𝚒𝚗𝚜 может принимать:
− 𝚒𝚗𝚝: количество равных интервалов
− 𝚕𝚒𝚜𝚝: границы интервалов
− 𝙸𝚗𝚝𝚎𝚛𝚟𝚊𝚕𝙸𝚗𝚍𝚎𝚡: конкретные интервалы

Когда 𝚋𝚒𝚗𝚜 является списком границ, 𝚙𝚊𝚗𝚍𝚊𝚜 создает интервалы вида:
− (𝟶, 𝟸𝟶𝟶] − значения больше 𝟶 и меньше или равные 𝟸𝟶𝟶
− (𝟸𝟶𝟶, 𝟺𝟶𝟶] − значения больше 𝟸𝟶𝟶 и меньше или равные 𝟺𝟶𝟶
− (𝟺𝟶𝟶, 𝟼𝟶𝟶] − значения больше 𝟺𝟶𝟶 и меньше или равные 𝟼𝟶𝟶
− (𝟼𝟶𝟶, 𝟾𝟶𝟶] − значения больше 𝟼𝟶𝟶 и меньше или равныея 𝟾𝟶𝟶
− (𝟾𝟶𝟶, 𝟷𝟶𝟶𝟶] − значения больше 𝟾𝟶𝟶 и меньше или равные 𝟷𝟶𝟶𝟶

Результат будет содержать количество значений в каждом интервале, отсортированных по убыванию частоты.
3👍1👎1
🪤 Что выведет код?
Anonymous Quiz
27%
[2, 4, 6]
70%
[99, 4, 6]
1%
[2, 99, 6]
1%
Error
👍3👎1
Данная задача демонстрирует ключевую особенность изменяемых объектов — списков. Рассмотрим код пошагово:

🔘 𝚊 = [𝟸, 𝟺, 𝟼] — создается список с тремя элементами
🔘 𝚋 = 𝚊 — переменная 𝚋 начинает указывать на тот же список, что и 𝚊
🔘 𝚊[𝟶] = 𝟿𝟿 — изменяется первый элемент списка
🔘 𝚙𝚛𝚒𝚗𝚝(𝚋) — выводится список, на который указывает 𝚋

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

Любанович Б. «Простой Python», глава 𝟸:

«В случае, когда оба имени указывают на изменяемый объект, вы можете изменить значение объекта с помощью любого имени. [...] Список представляет собой изменяемый массив значений... Эти элементы списка (𝚊[𝟶], 𝚊[𝟷] и 𝚊[𝟸]) сами по себе являются именами, указывающими на целочисленные объекты со значениями 𝟸, 𝟺 и 𝟼. Список хранит элементы в заданном порядке. Когда первый элемент списка изменяется, он больше не указывает на объект со значением 𝟸. Теперь он указывает на объект со значением 𝟿𝟿. Список всё ещё имеет тип 𝚕𝚒𝚜𝚝, но его значения (элементы списка и их порядок) можно изменить».
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👎1
🪤 Что выведет код?
Anonymous Quiz
63%
5
15%
05
1%
0
22%
Error
👍2👎1
Код вызовет 𝚂𝚢𝚗𝚝𝚊𝚡𝙴𝚛𝚛𝚘𝚛, потому что в Python нельзя использовать «ведущий» ноль при объявлении целых чисел.

Ведущий ноль в Python имеет специальное значение для восьмеричной системы счисления, но синтаксис для этого отличается (𝟶𝚘𝟷𝟶 — число 𝟾 в этой системе, к примеру). Для восьмеричных чисел используется префикс 𝟶𝚘.
👌6👍3👎1
🧩 Какой из способов объявить числовой литерал валидный?
Anonymous Quiz
47%
Первый (а)
13%
Третий (c)
16%
Второй и третий (b и c)
24%
Все три
👍4👎1
В Python нижнее подчеркивание в числовых литералах игнорируется и служит только для улучшения читаемости кода.

Любанович Б., «Простой Python», глава 𝟹:

«Нижние подчёркивания _ будут просто проигнорированы, [их можно ставить] на любую позицию после первой цифры».

«[Если в качестве разделителя групп разрядов вы используете запятую], то вместо миллиона получите кортеж из трех значений 𝟷, 𝟶, 𝟶».
👍4👎1
🧩 Что выведет код?
Anonymous Quiz
5%
10
63%
25
26%
-25
6%
Error
👍5👎1
Оператор возведения в степень (∗∗) имеет более высокий приоритет, чем унарный минус (−). Поэтому выражение −𝟻 ∗∗ 𝟸 интерпретируется как −(𝟻 ∗∗ 𝟸).

🔘 Сначала выполняется 𝟻 ∗∗ 𝟸 = 𝟸𝟻
🔘 Затем применяется унарный минус: −(𝟸𝟻) = −𝟸𝟻

Если возводим -5 в степень 2, используем скобки так: (−𝟻) ∗∗ 𝟸 = 𝟸𝟻.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍1👎1
🪤 Что выведет код?
Anonymous Quiz
46%
98
11%
98.6
12%
99
32%
Error
👍21👎1
Любанович Б., «Простой Python», глава 𝟹:

«Функция 𝚒𝚗𝚝() будет преобразовывать в целые числа строки, состоящие из цифр и чисел с плавающей точкой, но не будет обрабатывать строки, содержащие десятичные точки или экспоненты».

В данном случае строка "𝟿𝟾.𝟼" содержит десятичную точку, что делает её непригодной для прямого преобразования.

Интерпретатор вызовет исключение 𝚅𝚊𝚕𝚞𝚎𝙴𝚛𝚛𝚘𝚛 с сообщением '𝚒𝚗𝚟𝚊𝚕𝚒𝚍 𝚕𝚒𝚝𝚎𝚛𝚊𝚕 𝚏𝚘𝚛 𝚒𝚗𝚝() 𝚠𝚒𝚝𝚑 𝚋𝚊𝚜𝚎 𝟷𝟶: '𝟿𝟾.𝟼'.

Для преобразования строки с десятичной точкой в целое число необходимо сначала использовать функцию 𝚏𝚕𝚘𝚊𝚝(), а затем 𝚒𝚗𝚝():
− 𝚏𝚕𝚘𝚊𝚝("𝟿𝟾.𝟼") → 𝟿𝟾.𝟼
− 𝚒𝚗𝚝(𝟿𝟾.𝟼) → 𝟿𝟾

Можно одной строкой: 𝚒𝚗𝚝(𝚏𝚕𝚘𝚊𝚝(«𝟿𝟾.𝟼»)) → 𝟿𝟾
1👍1👎1