Python: задачки и вопросы
7.6K subscribers
1.24K photos
2 videos
1 file
104 links
Вопросы и задачки для подготовки к собеседованиям и прокачки навыков

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

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

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

Другие наши проекты: https://tprg.ru/media
Download Telegram
🪤 Что выведет код?
Anonymous Quiz
3%
Ni!
7%
Ni!Ni!
69%
Ni!Ni!Ni!Ni!
21%
Error
👍2👎1
В данном коде демонстрируется ручное расширение класса — добавление нового метода к классу после его создания.

Принцип работает, потому что методы всегда можно присваивать классу после того, как он был создан. До тех пор пока присваиваемые методы являются функциями с дополнительным первым аргументом для получения нового экземпляра 𝚜𝚎𝚕𝚏».

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

🔘 Создается класс 𝙲𝚕𝚒𝚎𝚗𝚝𝟷 с конструктором, который принимает 𝚟𝚊𝚕𝚞𝚎 и сохраняет его в атрибут экземпляра
🔘 Определяется функция 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌(𝚘𝚋𝚓), которая принимает объект и возвращает 𝚘𝚋𝚓.𝚟𝚊𝚕𝚞𝚎 ∗ 𝟺
🔘 Происходит присваивание 𝙲𝚕𝚒𝚎𝚗𝚝𝟷.𝚎𝚐𝚐𝚜 = 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌 — функция становится методом класса
🔘 Создается экземпляр 𝚇 = 𝙲𝚕𝚒𝚎𝚗𝚝𝟷('𝙽𝚒!'), где 𝚟𝚊𝚕𝚞𝚎 становится '𝙽𝚒!'
🔘 Вызывается 𝚇.𝚎𝚐𝚐𝚜()

При вызове 𝚇.𝚎𝚐𝚐𝚜() происходит следующее:
− Python автоматически передает экземпляр 𝚇 как первый аргумент в функцию 𝚎𝚐𝚐𝚜𝚏𝚞𝚗𝚌
− Функция получает 𝚘𝚋𝚓 = 𝚇, где 𝚇.𝚟𝚊𝚕𝚞𝚎 = '𝙽𝚒!'
− Выполняется 𝚛𝚎𝚝𝚞𝚛𝚗 𝚘𝚋𝚓.𝚟𝚊𝚕𝚞𝚎 ∗ 𝟺, что дает '𝙽𝚒!' ∗ 𝟺 = '𝙽𝚒!𝙽𝚒!𝙽𝚒!𝙽𝚒!'

Данный аргумент может использоваться для обращения к информации о состоянии, доступной из экземпляра класса, хотя функции определены независимо от класса.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👎1🫡1
Что выведет команда 'python - < showargs.py a b -c'?
Anonymous Quiz
20%
['-', 'a', 'b', '-c']
47%
['showargs.py', 'a', 'b', '-c']
18%
['python', '-', 'a', 'b', '-c']
15%
Error
👍1👎1
В данной задаче рассматривается запуск кода с использованием символа «−» для чтения из стандартного входного потока.

Марк Лутц, «Изучаем 𝙿𝚢𝚝𝚑𝚘𝚗», Приложение А тома 2:

«Другие варианты специфицирования формата кода позволяют предоставлять интерпретатору Python код, подлежащий запуску, в самой командной строке (−𝚌) и принимать код из стандартного входного потока (символ − означает чтение из канала или входного потока, перенаправленного в файл)»

Команда «𝚙𝚢𝚝𝚑𝚘𝚗 − < 𝚜𝚑𝚘𝚠𝚊𝚛𝚐𝚜.𝚙𝚢 𝚊 𝚋 −𝚌» работает следующим образом:

🔘 Символ «−» указывает интерпретатору 𝙿𝚢𝚝𝚑𝚘𝚗 читать код из стандартного входного потока
🔘 Оператор перенаправления «<» направляет содержимое файла 𝚜𝚑𝚘𝚠𝚊𝚛𝚐𝚜.𝚙𝚢 в стандартный входной поток
🔘 Аргументы «𝚊 𝚋 −𝚌» передаются как аргументы командной строки

В результате:
🔘 𝚜𝚢𝚜.𝚊𝚛𝚐𝚟[𝟶] = '−' (символ, указывающий на чтение из стандартного входного потока)
🔘 𝚜𝚢𝚜.𝚊𝚛𝚐𝚟[𝟷] = '𝚊'
🔘 𝚜𝚢𝚜.𝚊𝚛𝚐𝚟[𝟸] = '𝚋'
🔘 𝚜𝚢𝚜.𝚊𝚛𝚐𝚟[𝟹] = '−𝚌'

Поэтому правильный ответ: ['−', '𝚊', '𝚋', '−𝚌']

Это демонстрирует, что при использовании символа «−» для чтения из стандартного входного потока, 𝙿𝚢𝚝𝚑𝚘𝚗 помещает сам символ «−» в качестве первого элемента 𝚜𝚢𝚜.𝚊𝚛𝚐𝚟, а все остальные аргументы командной строки добавляются после него.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👎1🤯1
Разработчики Unix давно придумали протокол для назначения программам запускаемого кода. В большинстве систем Unix (включая такие как Linux и macOS) можно встретить файлы сценариев оболочки, содержащие первые строки, которые задают, какая именно программа должна использоваться для выполнения содержимого файла. Эти строки начинаются с символов #!, за которыми указывается полное имя интерпретатора.

Примеры использования:
🔘 #! /𝚞𝚜𝚛/𝚋𝚒𝚗/𝚙𝚢𝚝𝚑𝚘𝚗
🔘 #! /𝚞𝚜𝚛/𝚋𝚒𝚗/𝚎𝚗𝚟 𝚙𝚢𝚝𝚑𝚘𝚗

Символы #! в начале файла называются «𝚜𝚑𝚎𝚋𝚊𝚗𝚐» и служат для указания операционной системе, какой интерпретатор использовать для выполнения данного файла. Это позволяет запускать скрипты напрямую без явного указания интерпретатора.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👎1
Когда хотел просто поиграть, но случайно спас марсианскую базу…

Советуем пройти космическую одиссею, которую сделали вместе с «МойОфис». Всего 10 минут, три локации и задачки по Go, которые под силу трушному гоферу. В общем, некогда объяснять — срочно помогите главным героям спасти марсианских колонизаторов.

Кстати, первые 10 игроков с максимальным результатом получат тематические подарки: комплект космической еды и крутой мерч.

Запрыгивайте в квест: https://tprg.ru/EdHP

Реклама
🪤 Что выведет код?
Anonymous Quiz
46%
1
36%
2
7%
3
11%
Error
В задаче рассматривается поведение метода 𝚗𝚜𝚖𝚊𝚕𝚕𝚎𝚜𝚝 при работе с 𝙽𝚊𝙽 значениями в объекте 𝚂𝚎𝚛𝚒𝚎𝚜.

Согласно
документации 𝚙𝚊𝚗𝚍𝚊𝚜, метод 𝚗𝚜𝚖𝚊𝚕𝚕𝚎𝚜𝚝 возвращает минимальные значения объекта 𝚂𝚎𝚛𝚒𝚎𝚜, отсортированные в порядке возрастания. Аргумент по умолчанию параметра 𝚗 равен 𝟻.

Ключевой момент: 𝙽𝚊𝙽 значения в 𝚙𝚊𝚗𝚍𝚊𝚜 считаются «больше» любого числового значения при сортировке. Это означает, что:

🔘 𝙽𝚊𝙽 значения всегда помещаются в конец отсортированной последовательности
🔘 При использовании 𝚗𝚜𝚖𝚊𝚕𝚕𝚎𝚜𝚝(𝚗) 𝙽𝚊𝙽 значения не включаются в выборку 𝚗 наименьших значений
🔘 Если в 𝚂𝚎𝚛𝚒𝚎𝚜 есть 𝙽𝚊𝙽 значения, они будут отфильтрованы из результата

В нашем примере:
🔘 Исходные данные: [𝟷𝟶.𝟻, 𝙽𝚊𝙽, 𝟹.𝟸, 𝙽𝚊𝙽, 𝟽.𝟾, 𝟷.𝟷, 𝙽𝚊𝙽, 𝟻.𝟺]
🔘 𝚗𝚜𝚖𝚊𝚕𝚕𝚎𝚜𝚝(𝟹) вернет только числовые значения: [𝟷.𝟷, 𝟹.𝟸, 𝟻.𝟺]
🔘 𝙽𝚊𝙽 значения будут исключены из результата

Это поведение согласуется с общей логикой 𝚙𝚊𝚗𝚍𝚊𝚜, где 𝙽𝚊𝙽 рассматривается как «отсутствующее значение» и не участвует в числовых операциях сортировки.
Please open Telegram to view this post
VIEW IN TELEGRAM