# Solving and testing the Caesar cipher (part b3c0)

Решение без тестов быстро ломается, поэтому добавим к задаче простые проверки.

## Задача

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

## Решение

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


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

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

[случай](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/anagram-dva-sposoba-mverts9w.md) · [правках](https://sofiamichel182.overblog.fr/2026/10/maarya-model.html) · [python](https://exhibit21576.mataroa.blog/blog/did-ms-sethi-make-porn-leaked-onlyfans-videos-and-photos/) · [result](https://paper.wf/almarichter77log/slimthickn-leaks) · [вызова](https://blogfreely.net/nataliarussell2/jpdamsel-gallery-japanese-damsel-in-distress-costume-photos-and-athleisure) · [Khoor](https://ecency.com/@adamsvoboda1644/post-9b0997) · [требуют](https://hey.xyz/posts/25ryx1sya9nmxt7xha3) · [Цезаря](https://doghatstudio.com/muchitinasub?f=instapaper) · [каждую](https://damesserboccaccio.it/indian+bollywood+xxx+video?f=instapaper) · [символы](https://yakihonne.com/article/naddr1qvzqqqr4gupzp0nw23qaj4lh9wlsgk4g548xejmhfxx2490ew4u4geuse24rnm4rqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknjvtxxgcngvfn95mrswfh956rjdee943rxery956nwdesvcerzc3sxanrxxc8xgf) · [алфавита](https://wuchu-pub.com/uploads/20261019/c7b0a724a6f3e894eb777240d3fdd663.pdf) · [тестами](https://isc.sans.edu/diary.html/33208#comment) · [номер](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/cyn-r34-a7776e.pdf) · [номеру](https://hey.xyz/posts/16hxfdxftdce9h3bxhm) · [shift](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/privacy-leticia-vargas-463731.pdf) · [ломается](https://paper.wf/emmafischer83855/upside-down-stranger-things-wallpaper) · [добавим](https://topsad.com.ua/join/sHq+shrmyT?f=linkcentre) · [ord('A](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [число](https://sofiasimon341.overblog.fr/2026/10/camila-pati-o-desnuda-fotos-y-videos-exclusivos-onlyfans.html) · [деления](https://statics.pancake.vn/web-media-264/05/f2/9f/4c/e456a84f05a42184105d778c31677f4f5c88ae930b55baba77e26e96.pdf) · [работы](https://gall.dcinside.com/mgallery/board/view/?id=nmixxreality&no=3549) · [второй](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/xeniahelenaa-tiktok-e04c86.pdf) · [случаи](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Сложность](https://news-ctl-posts.hashnode.dev/step-by-step-removing-duplicates-from-a-list-part-22e3) · [Задача](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/zehra-gunes-nudes-bef76a.pdf) · [наглядные](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [ord('a](https://hey.xyz/posts/1pk2vc8n0z6xca1phfz) · [сдвиг](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-4feb81.pdf) · [памяти](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/vicineco-782b75.pdf)

