ru
Feedback
Python: задачки и вопросы

Python: задачки и вопросы

Открыть в Telegram

Вопросы и задачки для подготовки к собеседованиям и прокачки навыков Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/media

Больше
6 961
Подписчики
-124 часа
-47 дней
-5630 день
Архив постов
При работе со срезами (𝚜𝚕𝚒𝚌𝚒𝚗𝚐) можно использовать отрицательные индексы. Отрицательный индекс означает позицию элемента, отсчитываемую с конца строки. Например, индекс −𝟷 соответствует последнему элементу, индекс −𝟸 — предпоследнему и так далее. В данном случае, 𝚕𝚎𝚝𝚝𝚎𝚛𝚜 = '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝙸𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣' — строка длиной 𝟸𝟼 символов. 𝚕𝚎𝚝𝚝𝚎𝚛𝚜[−𝟹:] — срез с отрицательным индексом от −𝟹 до конца строки. Отрицательный индекс −𝟹 означает третий символ с конца строки. Для строки '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝙸𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣' это символ '𝚡': 🔘 Позиция −𝟷: '𝚣' (последний) 🔘 Позиция −𝟸: '𝚢' (предпоследний) 🔘 Позиция −𝟹: '𝚡' (третий с конца) Срез 𝚕𝚎𝚝𝚝𝚎𝚛𝚜[−𝟹:] берет все символы начиная с позиции −𝟹 (включительно) до конца строки, то есть последние три символа: '𝚡𝚢𝚣'. Из документации Python: «Некоторые последовательности, включая встроенные, интерпретируют отрицательные индексы, добавляя длину последовательности. Например, `𝚊[−𝟸]` эквивалентно `𝚊[𝚗−𝟸]`, то есть обращается ко второму с конца элементу последовательности `𝚊` длиной `𝚗`. Замечание, сделанное выше об отрицательных индексах, также относится и к отрицательным границам срезов». При использовании срезов с отрицательными индексами удобно извлекать элементы с конца последовательности, не зная точно её длину.

🧩 Что выведет код?
Anonymous voting

Код пытается изменить первый символ строки '𝙷𝚎𝚗𝚗𝚢' на '𝙿', но это приводит к ошибке 𝚃𝚢𝚙𝚎𝙴𝚛𝚛𝚘𝚛, поскольку строки в Python являются неизменяемыми (𝚒𝚖𝚖𝚞𝚝𝚊𝚋𝚕𝚎) объектами. Из документации Python: «Изменчивость объекта определяется его типом; например, числа, строки и кортежи являются неизменяемыми, а словари и списки — изменяемыми». При попытке выполнить операцию присваивания 𝚗𝚊𝚖𝚎[𝟶] = '𝙿' интерпретатор выдаст ошибку: `𝚃𝚢𝚙𝚎𝙴𝚛𝚛𝚘𝚛: '𝚜𝚝𝚛' 𝚘𝚋𝚓𝚎𝚌𝚝 𝚍𝚘𝚎𝚜 𝚗𝚘𝚝 𝚜𝚞𝚙𝚙𝚘𝚛𝚝 𝚒𝚝𝚎𝚖 𝚊𝚜𝚜𝚒𝚐𝚗𝚖𝚎𝚗𝚝` Для изменения строки необходимо создать новую строку. Существует несколько способов: 🔘 Использование срезов: 𝚗𝚊𝚖𝚎 = '𝙿' + 𝚗𝚊𝚖𝚎[𝟷:] 🔘 Использование метода 𝚛𝚎𝚙𝚕𝚊𝚌𝚎(): 𝚗𝚊𝚖𝚎 = 𝚗𝚊𝚖𝚎.𝚛𝚎𝚙𝚕𝚊𝚌𝚎('𝙷', '𝙿', 𝟷) 🔘 Использование форматирования строк: 𝚗𝚊𝚖𝚎 = 𝚏'𝙿{𝚗𝚊𝚖𝚎[𝟷:]}' В данном случае правильным решением было бы: 𝚗𝚊𝚖𝚎 = '𝙿' + 𝚗𝚊𝚖𝚎[𝟷:] 𝚙𝚛𝚒𝚗𝚝(𝚗𝚊𝚖𝚎) # Выведет: 𝙿𝚎𝚗𝚗𝚢 Фундаментальное свойство строк в Python — их неизменяемость, которая обеспечивает безопасность данных и оптимизацию памяти.

🪤 Что выведет код?
Anonymous voting

Код использует оператор присваивания выражения (𝚠𝚊𝚕𝚛𝚞𝚜 𝚘𝚙𝚎𝚛𝚊𝚝𝚘𝚛) `:=`. Этот оператор позволяет присваивать значение переменной в рамках выражения. Рассмотрим выполнение кода пошагово: 🔘 `𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 = 𝟸𝟾𝟶` − устанавливается лимит символов для твита 🔘 `𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐 = "𝙱𝚕𝚊𝚑" ∗ 𝟻𝟶` − создается строка путем повторения строки «𝙱𝚕𝚊𝚑» 𝟻𝟶 раз, что дает строку длиной 𝟸𝟶𝟶 символов 🔘 В условии `𝚒𝚏 𝚍𝚒𝚏𝚏 := 𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 − 𝚕𝚎𝚗(𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐) >= 𝟶:` происходит следующее: 🔘 Вычисляется `𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 − 𝚕𝚎𝚗(𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐)` = 𝟸𝟾𝟶 − 𝟸𝟶𝟶 = 𝟾𝟶 🔘 Проверяется условие `𝟾𝟶 >= 𝟶`, которое возвращает `𝚃𝚛𝚞𝚎` 🔘 Оператор `:=` присваивает результат этого выражения (𝚃𝚛𝚞𝚎) переменной `𝚍𝚒𝚏𝚏` 🔘 Поскольку условие истинно, выполняется блок `𝚒𝚏`

🧩 Что выведет код?
Anonymous voting

В Python можно использовать множественные операторы сравнения в одной цепочке. Выражение «𝟻 < 𝚡 < 𝟷𝟶 < 𝟿𝟿𝟿» эквивалентно «(𝟻 < 𝚡) 𝚊𝚗𝚍 (𝚡 < 𝟷𝟶) 𝚊𝚗𝚍 (𝟷𝟶 < 𝟿𝟿𝟿)». Поскольку 𝚡 = 𝟽: — 𝟻 < 𝟽 = 𝚃𝚛𝚞𝚎; − 𝟽 < 𝟷𝟶 = 𝚃𝚛𝚞𝚎; − 𝟷𝟶 < 𝟿𝟿𝟿 = 𝚃𝚛𝚞𝚎. Все условия выполняются, поэтому результат выражения 𝚃𝚛𝚞𝚎. В Python цепочки сравнений выполняются слева направо и объединяются оператором «𝚊𝚗𝚍». Если любое из сравнений возвращает 𝙵𝚊𝚕𝚜𝚎, то и вся цепочка возвращает 𝙵𝚊𝚕𝚜𝚎.

🧩 Что выведет код?
Anonymous voting

Из документации Python:
'𝙰𝚗 𝚎𝚡𝚙𝚛𝚎𝚜𝚜𝚒𝚘𝚗 𝚒𝚗 𝚙𝚊𝚛𝚎𝚗𝚝𝚑𝚎𝚜𝚎𝚜, 𝚜𝚚𝚞𝚊𝚛𝚎 𝚋𝚛𝚊𝚌𝚔𝚎𝚝𝚜 𝚘𝚛 𝚌𝚞𝚛𝚕𝚢 𝚋𝚛𝚊𝚌𝚎𝚜 𝚌𝚊𝚗 𝚋𝚎 𝚜𝚙𝚕𝚒𝚝 𝚘𝚟𝚎𝚛 𝚖𝚘𝚛𝚎 𝚝𝚑𝚊𝚗 𝚘𝚗𝚎 𝚙𝚑𝚢𝚜𝚒𝚌𝚊𝚕 𝚕𝚒𝚗𝚎 𝚠𝚒𝚝𝚑𝚘𝚞𝚝 𝚞𝚜𝚒𝚗𝚐 𝚋𝚊𝚌𝚔𝚜𝚕𝚊𝚜𝚑𝚎𝚜'.
«Выражение в скобках может быть разделено на несколько строк без использования символа обратного слеша» В данном коде Python автоматически интерпретирует переносы строк внутри скобок как продолжение выражения. В итоге вычисляется арифметическое выражение: 𝟷 + 𝟸 + 𝟹 + 𝟺 = 𝟷𝟶.

🧩 Исполнится ли код без ошибок?
Anonymous voting

photo content

Булевы значения могут автоматически преобразовываться в числовые типы при выполнении арифметических операций. Любанович Б., «Простой Python», глава 3: «Булево значение 𝙵𝚊𝚕𝚜𝚎 рассматривается как 𝟶 или 𝟶.𝟶, когда смешивается с целыми числами или числами с плавающей точкой, а 𝚃𝚛𝚞𝚎 — как 𝟷 или 𝟷.𝟶» В данном случае: 🔘 𝚃𝚛𝚞𝚎 автоматически преобразуется в 𝟷 🔘 Выполняется операция: 𝟷 + 𝟸 = 𝟹

🧩 Что выведет код?
Anonymous voting

photo content

Пасхавер Б., «Pandas в действии», глава 𝟹: «Метод 𝚟𝚊𝚕𝚞𝚎_𝚌𝚘𝚞𝚗𝚝𝚜 по умолчанию возвращает полуоткрытые интервалы, включающие одну из граничных точек и не включающие другую. Круглая скобка означает, что значение не включается в интервал. Квадратная скобка означает, что значение включается». В данном случае: 🔘 𝚋𝚒𝚗𝚜=[𝟷, 𝟹, 𝟻] создает два интервала: (𝟶.𝟿𝟿𝟿, 𝟹.𝟶] и (𝟹.𝟶, 𝟻.𝟶]; 🔘 В первый интервал попадают значения 𝟷, 𝟸 и 𝟹 (𝟹 элемента); 🔘 Во второй интервал попадают значения 𝟺 и 𝟻 (𝟸 элемента). При размещении значений объекта 𝚂𝚎𝚛𝚒𝚎𝚜 по корзинам 𝚙𝚊𝚗𝚍𝚊𝚜 может расширить любой из диапазонов до 𝟶,𝟷% в любом направлении, поэтому левая граница первого интервала становится 𝟶.𝟿𝟿𝟿 вместо 𝟷.𝟶.