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

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
Что выведет код?
Anonymous Quiz
18%
4
42%
5
32%
-5
8%
Error
😁1
Развёрнутое пояснение

1️⃣Список 𝚗𝚞𝚖𝚜 = [-𝟻, 𝟸, -𝟹, 𝟺]. Функция 𝚖𝚊𝚡 ищет элемент с максимальным значением.

2️⃣Параметр 𝚔𝚎𝚢=𝚊𝚋𝚜 означает: сравнивать элементы по их абсолютным значениям, то есть 𝟻, 𝟸, 𝟹, 𝟺.

3️⃣Максимум по модулю — это 𝟻 (от элемента −𝟻).

4️⃣Но 𝚖𝚊𝚡 возвращает сам элемент, а не результат 𝚔𝚎𝚢(𝚎𝚕𝚎𝚖𝚎𝚗𝚝), поэтому результат −𝟻, а не 𝟻.

Почему это важно
Можно ожидать, что 𝚖𝚊𝚡(..., 𝚔𝚎𝚢=𝚏) вернёт 𝚏(𝚡), но это не так. Если нужен именно результат функции, придётся вызвать её отдельно: 𝚊𝚋𝚜(𝚖𝚊𝚡(𝚗𝚞𝚖𝚜, 𝚔𝚎𝚢=𝚊𝚋𝚜)) или 𝚖𝚊𝚡(𝚊𝚋𝚜(𝚡) 𝚏𝚘𝚛 𝚡 𝚒𝚗 𝚗𝚞𝚖𝚜).
Please open Telegram to view this post
VIEW IN TELEGRAM
8😁1
Что выведет код?
Anonymous Quiz
32%
-1
19%
1
28%
2
22%
-2
👍3
Развёрнутое пояснение

1️⃣Python использует формулу: 𝚊 % 𝚋 = 𝚊 − 𝚋 × 𝚏𝚕𝚘𝚘𝚛(𝚊 / 𝚋), где 𝚏𝚕𝚘𝚘𝚛 — округление вниз (к минус бесконечности).

2️⃣Для −𝟽 % 𝟹: деление −𝟽 / 𝟹 = −𝟸.𝟹𝟹..., округление вниз 𝚏𝚕𝚘𝚘𝚛(−𝟸.𝟹𝟹) = −𝟹, остаток: −𝟽 − 𝟹 × (−𝟹) = 𝟸.

3️⃣В C, Java, JavaScript деление округляется к нулю, и там −𝟽 % 𝟹 = −𝟷.

Гвидо ван Россум намеренно выбрал округление вниз: при таком подходе остаток всегда попадает в диапазон [𝟶, 𝚗) при положительном делителе. Это удобно для вычисления номера клетки в сетке, индекса в кольцевом буфере, дня недели. Гвидо объяснял: если нужно округление к нулю, можно написать 𝚒𝚗𝚝(𝚊 / 𝚋), а вот получить «правильное» округление вниз из округления к нулю — сложнее, поэтому Python выбрал более полезный вариант по умолчанию.

Почему это важно
При портировании кода между языками или при работе с отрицательными координатами разница в поведении % может привести к трудноуловимым багам: один и тот же код даст разные результаты в Python и в C/Java.
Please open Telegram to view this post
VIEW IN TELEGRAM
1