/
Программирование
/
Курс Python
/

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

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

У функций в любом языке программирования есть фундаментальные свойства. Эти свойства помогают понимать, как функция будет вести себя в разных ситуациях, как ее тестировать и где применять. Одним из таких свойств является детерминированность.

Двое сидят и разговаривают о детерминированной функции

Детерминированная функция всегда возвращает один и тот же результат при одинаковых входных данных. Например, детерминированной можно назвать функцию, которая считает количество символов:

len('hexlet')  # 6
len('hexlet')  # 6

len('wow')  # 3
len('wow')  # 3

Функцию len() можно вызывать бесконечно с одним и тем же аргументом, и она всегда вернет один и тот же результат.

Недетерминированные функции

К противоположному типу относятся недетерминированные функции. Они могут возвращать разные результаты при одинаковых входных данных или при их отсутствии (функции без параметров). Хорошим примером служит функция, которая возвращает случайное число:

# Синтаксис импортов будет изучаться позже
from random import random

# Функция, которая возвращает случайное число
random()  # 0.09856613113197676
random()  # 0.8839904367241888

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

Детерминированная:       Недетерминированная:
len('abc') → всегда 3   random() → 0.42
len('abc') → всегда 3   random() → 0.91
len('abc') → всегда 3   random() → 0.07

Почему это важно

Детерминированность влияет на то, как мы работаем с функциями.

  • детерминированные функции легко тестировать и предсказывать;
  • их проще оптимизировать и использовать повторно;
  • недетерминированные функции сложнее проверять, потому что результат меняется.

Поэтому там, где это возможно, лучше стремиться к тому, чтобы функция была детерминированной.

Задание

В настольной игре бросают кубик и получают число от 0 до 10. Напишите программу, которая моделирует этот бросок: выводит на экран случайное целое число в диапазоне от 0 до 10. Для этой задачи вам понадобится функция random() и функция round(), которая округляет переданное ей значение

round(2.320000789855705) # 2

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

Алгоритм

Так как функция random() возвращает числа в диапазоне от 0 до 1, то чтобы получить числа от 0 до 10, нам нужно выполнить умножение на 10. Затем получившиеся число округляется и так мы получаем то, что нужно.

Полезное

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются