Выполнить действие при условии
If проверяет истинность выражения. Только при истинном результате выполняется блок с отступом. После блока программа продолжает работу со следующей инструкцией, если внутри не произошёл return или другое управление потоком.
Задание источника
Приведите команду к нижнему регистру только тогда, когда её длина меньше восьми символов. В остальных случаях верните исходную строку:
def normalize_command(command: str) -> str:
if len(command) < 8:
command = command.lower()
return command
Проверка трёх длин
normalize_command("HELP") возвращает "help". Строка из семи заглавных букв тоже изменится. Строка из восьми символов уже не удовлетворяет условию < 8 и останется прежней.
Именно восьмёрка — полезная граничная проверка: замена < на <= изменила бы договор функции.
Где находится return
Return стоит после if на уровне тела функции, поэтому значение возвращается в обоих случаях. Если случайно поместить его внутрь if, длинная команда дойдёт до конца функции и вернёт None вместо строки.
Неизменяемый объект и локальное имя
Метод lower создаёт строковый результат, а присваивание связывает локальное имя command с ним. Исходная строка у вызывающего кода не изменяется на месте. Чтобы использовать нормализованный вариант, вызывающая сторона должна принять возвращённое значение.
Пустая строка имеет длину ноль и проходит условие; её lower остаётся пустой строкой. Функция не проверяет, существует ли такая команда в приложении: она реализует только правило регистра по длине.
Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Условие и алгоритм сохранены; граница проверена.