Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.
Задача
Реализовать шифр Цезаря: сдвинуть каждую букву строки на фиксированное число позиций в алфавите.
Решение
def caesar(text: str, shift: int) -> str: result = [] for ch in text: if ch.isalpha(): base = ord('A') if ch.isupper() else ord('a') result.append(chr((ord(ch) - base + shift) % 26 + base)) else: result.append(ch) return ''.join(result) print(caesar("Hello, World!", 3)) Как это работает
Буква переводится в номер внутри алфавита, к номеру прибавляется сдвиг, а остаток от деления на 26 обеспечивает «зацикливание» алфавита. Прочие символы не меняются.
Пример работы
Khoor, Zruog! Сложность
O(n) по времени, O(n) по памяти под результат.
Проверка тестами
Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.
assert is_valid(True) is not None # базовая проверка вызова assert is_valid(False) is not None # и второй случай Такой минимум уже защищает от случайной ошибки при правках кода.
С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.
Читайте также:
становится · деления · зацикливание · ch.isalpha · фиксированное · Zruog · случай · номер · проверять · каждую · Пример · Проверка · решение · return · тестами · caesar(text · меняются · стиль · обеспечивает · Задача · алфавита · вызова · работает · Реализовать · памяти
