Skip to main content

Command Palette

Search for a command to run...

Common mistakes in the Caesar cipher (part ff9d)

Updated
•2 min read•View as Markdown

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

Задача

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

Решение

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

Заметив такую ошибку в чужом коде, вы уже мыслите как ревьюер.

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

номеру · Частые · значениях · Khoor · багов · мыслите · World · результат · вручную · python · прежде · Писать · Буква · result · ошибку · по-разному · Заметив · работы · Zruog · Прогоните · решение · числа · неявное · ведут · join(result · всего · Цезаря · строки · Сложность · каждую

More from this blog

N

News

4298 posts