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. Затем получившиеся число округляется и так мы получаем то, что нужно.
Полезное
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. Затем получившиеся число округляется и так мы получаем то, что нужно.
Полезное
Ваше упражнение проверяется по этим тестам
import importlib
def check(output):
value = int(output)
assert value >= 0
assert value <= 10
def test(capsys):
importlib.import_module('solution')
out, _ = capsys.readouterr()
with capsys.disabled():
print('\n')
print(out)
check(out.strip('\n'))Решение учителя откроется через:
20:00
