# Exploring the Caesar cipher

В этом материале мы спокойно и по шагам разберём учебную задачу на программирование.

## Задача

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

## Решение

```python
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 обеспечивает «зацикливание» алфавита. Прочие символы не меняются.

## Пример работы

```text
Khoor, Zruog!
```

## Сложность

O(n) по времени, O(n) по памяти под результат.


Это решение удобно как отправная точка для экспериментов: попробуйте изменить входные данные и проследить за поведением кода.

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

[алфавита](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/ecrin-dilek-g-k-e-ifsa-2ab547.pdf) · [join(result](https://hey.xyz/posts/1pb9sb0ncpadv8xra8y) · [Zruog](https://yakihonne.com/article/naddr1qvzqqqr4gupzq9npxatqlkf3vkud45ss6q7mhm2k8z6mg5t4u9v47cwc8z4zv4spqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknswr9xcerwwfe95erswf3956rwdps95urjcnz956nserpxcunvcesvs6nqtwgfdk) · [работает](https://frames44004.mataroa.blog/blog/misssasian-gallery-christina-sage-solo-asian-cam-photos/) · [зацикливание](https://dev.to/devnote2319/idempotent-publishing-jobs-oxu5p-1763) · [решение](https://statics.pancake.vn/web-media-264/7e/8e/c1/bc/702e78bf9dbd861d08929a1245ef8dd7aa43bce6f5b6d2ce9490e88b.pdf) · [данные](https://milhench.com/wp-content/uploads/event-manager-uploads/event_banner/2026/11/etv-premium-vk-385b0b.pdf) · [World](https://dev.to/devnote2319/account-pools-for-multi-platform-posting-ex8x1-55li) · [программирование](https://isc.sans.edu/diary.html/33220#comment) · [Буква](https://privatebin.devol.it/?35cb830bf93281be#9QjgmrCoYFJnrKcSK1eGtuU8AiXmaMhCFhR6v49JvVoz) · [Пример](https://rentry.org/gallery-391916) · [прибавляется](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-xnj6q-4bf2) · [ch.isupper](https://yakihonne.com/article/naddr1qvzqqqr4gupzqpkygk0zvupq4zas8zwnh0028ytdsznswxfw90a2t0v75p6g8j6aqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0ykk2d3jx5mkxwp594snxcfc956x2vty94skzc3594jnvd3sv4nxydryxajkxaj3sv7) · [Khoor](https://blog.spikyhair.club/oz3ca505/skibidi-toilets-r34) · [Цезаря](https://sway.cloud.microsoft/HEibvgT18JoeseJ1) · [номеру](https://yakihonne.com/article/naddr1qvzqqqr4gupzpgp689chapccn8gveslvk8rjhqxq9tez4ttzzlze0dwfajc5eex2qy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknvdryxscxzcfe95mkxwf4956rvefe943x2d3c95ekyen9v4skgwr98y6rycuhen6) · [работы](https://statics.pancake.vn/web-media-264/c3/41/85/ff/84369e754621b03841c246d338a6391f6de1bfdcb8f17c796cf0b9c5.pdf) · [python](https://kappa.lol/sT83mg) · [меняются](https://secure.linkcentre.com/status/1736728/?from=submit) · [разберём](https://dev.to/devnote2319/scheduling-retries-in-a-publishing-pipeline-cxf88-3jho) · [Решение](https://dev.to/devnote2319/idempotent-publishing-jobs-2q4id-53np) · [задачу](https://dev.to/devnote2319/idempotent-publishing-jobs-oujtx-5dao) · [удобно](https://radicle.network/nodes/index.radicle.garden/rad%3Az47uYWvLWAD3YQGXwATcYJdGRQoj1/issues/0df2beed194313b63659f7e95e19d8b31129ab84) · [времени](https://news-ctl-posts.hashnode.dev/writing-tests-for-computing-an-average-mvz3i9av)

