Skip to main content

Common mistakes in the Caesar cipher (part ca7f)

Updated 2 min readMarkdown

Каждая учебная задача таит пару-тройку грабель; вот они.

Задача

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

Решение

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 значениях, прежде чем считать задачу решённой.

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

Читайте также:

Писать · зацикливание · деления · букву · остаток · грабель · Цезаря · результат · прибавляется · номеру · учебная · работает · задача · Сложность · алфавита · случаи · World · python · переводится · ошибок · багов

No comments yet. Be the first to comment.

More from this blog