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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🧩 Что выведет код?
Anonymous Quiz
83%
True
4%
False
3%
7
10%
Error
В Python можно использовать множественные операторы сравнения в одной цепочке. Выражение «𝟻 < 𝚡 < 𝟷𝟶 < 𝟿𝟿𝟿» эквивалентно «(𝟻 < 𝚡) 𝚊𝚗𝚍 (𝚡 < 𝟷𝟶) 𝚊𝚗𝚍 (𝟷𝟶 < 𝟿𝟿𝟿)».

Поскольку 𝚡 = 𝟽:
— 𝟻 < 𝟽 = 𝚃𝚛𝚞𝚎;
− 𝟽 < 𝟷𝟶 = 𝚃𝚛𝚞𝚎;
− 𝟷𝟶 < 𝟿𝟿𝟿 = 𝚃𝚛𝚞𝚎.

Все условия выполняются, поэтому результат выражения 𝚃𝚛𝚞𝚎.

В Python цепочки сравнений выполняются слева направо и объединяются оператором «𝚊𝚗𝚍». Если любое из сравнений возвращает 𝙵𝚊𝚕𝚜𝚎, то и вся цепочка возвращает 𝙵𝚊𝚕𝚜𝚎.
4
🧩 Что выведет код?
Anonymous Quiz
62%
A fitting tweet
22%
Went over by 80
3%
None
13%
Error
1
Код использует оператор присваивания выражения (𝚠𝚊𝚕𝚛𝚞𝚜 𝚘𝚙𝚎𝚛𝚊𝚝𝚘𝚛) `:=`. Этот оператор позволяет присваивать значение переменной в рамках выражения.

Рассмотрим выполнение кода пошагово:

🔘 `𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 = 𝟸𝟾𝟶` − устанавливается лимит символов для твита
🔘 `𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐 = "𝙱𝚕𝚊𝚑" ∗ 𝟻𝟶` − создается строка путем повторения строки «𝙱𝚕𝚊𝚑» 𝟻𝟶 раз, что дает строку длиной 𝟸𝟶𝟶 символов
🔘 В условии `𝚒𝚏 𝚍𝚒𝚏𝚏 := 𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 − 𝚕𝚎𝚗(𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐) >= 𝟶:` происходит следующее:
🔘 Вычисляется `𝚝𝚠𝚎𝚎𝚝_𝚕𝚒𝚖𝚒𝚝 − 𝚕𝚎𝚗(𝚝𝚠𝚎𝚎𝚝_𝚜𝚝𝚛𝚒𝚗𝚐)` = 𝟸𝟾𝟶 − 𝟸𝟶𝟶 = 𝟾𝟶
🔘 Проверяется условие `𝟾𝟶 >= 𝟶`, которое возвращает `𝚃𝚛𝚞𝚎`
🔘 Оператор `:=` присваивает результат этого выражения (𝚃𝚛𝚞𝚎) переменной `𝚍𝚒𝚏𝚏`
🔘 Поскольку условие истинно, выполняется блок `𝚒𝚏`
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🪤 Что выведет код?
Anonymous Quiz
6%
Henny
36%
Penny
5%
P
53%
Error
1
Код пытается изменить первый символ строки '𝙷𝚎𝚗𝚗𝚢' на '𝙿', но это приводит к ошибке 𝚃𝚢𝚙𝚎𝙴𝚛𝚛𝚘𝚛, поскольку строки в Python являются неизменяемыми (𝚒𝚖𝚖𝚞𝚝𝚊𝚋𝚕𝚎) объектами.

Из документации Python:
«Изменчивость объекта определяется его типом; например, числа, строки и кортежи являются неизменяемыми, а словари и списки — изменяемыми».

При попытке выполнить операцию присваивания 𝚗𝚊𝚖𝚎[𝟶] = '𝙿' интерпретатор выдаст ошибку:

`𝚃𝚢𝚙𝚎𝙴𝚛𝚛𝚘𝚛: '𝚜𝚝𝚛' 𝚘𝚋𝚓𝚎𝚌𝚝 𝚍𝚘𝚎𝚜 𝚗𝚘𝚝 𝚜𝚞𝚙𝚙𝚘𝚛𝚝 𝚒𝚝𝚎𝚖 𝚊𝚜𝚜𝚒𝚐𝚗𝚖𝚎𝚗𝚝`

Для изменения строки необходимо создать новую строку. Существует несколько способов:

🔘 Использование срезов: 𝚗𝚊𝚖𝚎 = '𝙿' + 𝚗𝚊𝚖𝚎[𝟷:]
🔘 Использование метода 𝚛𝚎𝚙𝚕𝚊𝚌𝚎(): 𝚗𝚊𝚖𝚎 = 𝚗𝚊𝚖𝚎.𝚛𝚎𝚙𝚕𝚊𝚌𝚎('𝙷', '𝙿', 𝟷)
🔘 Использование форматирования строк: 𝚗𝚊𝚖𝚎 = 𝚏'𝙿{𝚗𝚊𝚖𝚎[𝟷:]}'

В данном случае правильным решением было бы:
𝚗𝚊𝚖𝚎 = '𝙿' + 𝚗𝚊𝚖𝚎[𝟷:]
𝚙𝚛𝚒𝚗𝚝(𝚗𝚊𝚖𝚎) # Выведет: 𝙿𝚎𝚗𝚗𝚢

Фундаментальное свойство строк в Python — их неизменяемость, которая обеспечивает безопасность данных и оптимизацию памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🧩 Что выведет код?
Anonymous Quiz
4%
abc
9%
wxyz
76%
xyz
11%
Error
При работе со срезами (𝚜𝚕𝚒𝚌𝚒𝚗𝚐) можно использовать отрицательные индексы. Отрицательный индекс означает позицию элемента, отсчитываемую с конца строки. Например, индекс −𝟷 соответствует последнему элементу, индекс −𝟸 — предпоследнему и так далее.

В данном случае, 𝚕𝚎𝚝𝚝𝚎𝚛𝚜 = '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝙸𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣' — строка длиной 𝟸𝟼 символов. 𝚕𝚎𝚝𝚝𝚎𝚛𝚜[−𝟹:] — срез с отрицательным индексом от −𝟹 до конца строки.

Отрицательный индекс −𝟹 означает третий символ с конца строки. Для строки '𝚊𝚋𝚌𝚍𝚎𝚏𝚐𝚑𝙸𝚓𝚔𝚕𝚖𝚗𝚘𝚙𝚚𝚛𝚜𝚝𝚞𝚟𝚠𝚡𝚢𝚣' это символ '𝚡':
🔘 Позиция −𝟷: '𝚣' (последний)
🔘 Позиция −𝟸: '𝚢' (предпоследний)
🔘 Позиция −𝟹: '𝚡' (третий с конца)

Срез 𝚕𝚎𝚝𝚝𝚎𝚛𝚜[−𝟹:] берет все символы начиная с позиции −𝟹 (включительно) до конца строки, то есть последние три символа: '𝚡𝚢𝚣'.

Из
документации Python:
«Некоторые последовательности, включая встроенные, интерпретируют отрицательные индексы, добавляя длину последовательности. Например, `𝚊[−𝟸]` эквивалентно `𝚊[𝚗−𝟸]`, то есть обращается ко второму с конца элементу последовательности `𝚊` длиной `𝚗`. Замечание, сделанное выше об отрицательных индексах, также относится и к отрицательным границам срезов».

При использовании срезов с отрицательными индексами удобно извлекать элементы с конца последовательности, не зная точно её длину.
Please open Telegram to view this post
VIEW IN TELEGRAM