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

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

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

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

from random import random

random()  # 0.5731815251322182
random()  # 0.9703312707029572

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

Задание

Санса хочет повесить на свою дверь просьбу о том, чтобы никто не входил без стука. Она попросила Сэма распечатать лист с надписью “СТУЧАТЬ!”. Помогите Сэму перевести слово в верхний регистр, используя функцию to_upper_case(), которая принимает на вход строку и возвращает такую же, но со всеми буквами в верхнем регистре. Распечатайте на экран текст, записанный в константу text, не забыв перевести его в верхний регистр.

from hexlet.code_basics import to_upper_case

print(to_upper_case('hello'))  # => HELLO

Как вы думаете, что вернет функция to_upper_case(), если передать ей на вход строку HELLO?


Советы

Определения

  • Детерминированность функции — Для одного и того же входа, всегда один и тот же выход


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

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