Бесплатный курс по python. Зарегистрируйтесь для отслеживания прогресса →

Python: Детерминированность

Независимо от того, какой язык программирования используется, функции внутри него обладают некоторыми фундаментальными свойствами. Зная эти свойства, легче прогнозировать поведение функций, способы их тестирования и место их использования. К таким свойствам относится детерминированность. Функция называется детерминированной тогда, когда для одних и тех же входных аргументов она возвращает один и тот же результат. Например, функция hex(), которая возвращает шестнадцатеричное представление числа, детерминированная.

hex(255)  # '0xff'
hex(255)  # '0xff'

Сколько бы раз мы её не вызывали, передавая туда значение 255, она всегда вернет '0xff' (хотя технически можно написать её и по другому, но смысла в этом никакого, а проблем доставит). В свою очередь функция, возвращающая случайное число, не является детерминированной, так как у одного и того же входа (даже если он пустой, то есть аргументы не принимаются) мы получим всегда разный результат. Насколько он разный - не важно, даже если хотя бы один из миллиона вызовов вернет что-то другое, эта функция автоматически считается недетерминированной.

from random import random

random()  # 0.5731815251322182
random()  # 0.9703312707029572

Зачем это нужно знать? Детерминированность серьезно влияет на многие аспекты. Детерминированные функции удобны в работе, их легко оптимизировать, легко тестировать. Если есть возможность сделать функцию детерминированной, не раздумывая делайте её такой.

Задание

Функция random() возвращает случайное число от 0 до 1 с большим количеством знаков после запятой. Но в реальных задачах бывает нужно получать случайные целые числа, например, в диапазоне от 1 до 10. Реализуйте код, который печатает именно такие числа. Для этого вам понадобятся операции умножения, сложения, а также преобразование типов. random() возвращает float, а нам нужен int.

Попробуйте решить это задание в одну строку


Советы

Определения

  • Детерминированная функция - Функция, вызов которой с одними и теми же аргументами всегда даёт один и тот же результат


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе