9th November 2026

Два способа решения: шифр Цезаря

Покажу решение и коротко сравню его с альтернативным подходом.

Задача

Реализовать шифр Цезаря: сдвинуть каждую букву строки на фиксированное число позиций в алфавите.

Решение


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) по памяти под результат.

Альтернативный подход

Ту же задачу часто решают иначе: например, через рекурсию вместо цикла или через стандартную библиотеку вместо ручной реализации. Альтернатива обычно короче, но первое «ручное» решение лучше показывает механику работы алгоритма. Полезно написать оба и сравнить на одинаковых тестах.

Оба подхода рабочие; важно понимать цену каждого, а не копировать первый попавшийся.


Related:

t先生系列

Несколько вариантов решения: удаление дубликатов из списка

Türk Snap İfşa | Adanalı Çıtır, Nedime, Melike ve Daha Fazlası

oneshot r34

sm打屁股

href="//paste2.org/XgZDcpIj">prisonteens lauren

Типичные ошибки при решении: наибольший общий делитель

Осваиваем задачу: проверка числа на простоту

Два подхода: сортировка слиянием