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

Частые ошибки

1. Не обрабатывать крайние случаи. Пустой ввод, ноль, отрицательные числа — именно там решение чаще всего ломается. 2. Смешивать типы данных. Строки и числа ведут себя по-разному; неявное приведение типов — источник неочевидных багов. 3. Писать код без проверки на маленьких примерах. Прогоните решение вручную на 2-3 значениях, прежде чем считать задачу решённой.

Если решение заработало с первого раза — всё равно сверьтесь со списком ошибок: половина багов рождается при доработках.


Related:

Частые ошибки при решении: среднее значение списка

mypornsnap.xyz

全世界最好酒福利姬 - 世界顶级酒类福利合集

Разбираем задачу: быстрая сортировка

vine mooning

صور رقص بنات مصر لراقصات مصريات في مشاهد رقص مثيرة وعصرية

Пошаговый разбор: решето Эратосфена

FindGayTube: New Free Gay Porn Videos Added Every Day

Vale Torres Nude Photo Gallery with Met Art and Teen Pictures

анал крупным