# Solving and testing the Caesar cipher (part 5742)

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

## Задача

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

## Решение

```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  # и второй случай
```

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

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

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

[Задача](https://gallery73726.mataroa.blog/blog/mesudachi-the-animation-ep2/) · [проверять](https://discuss.tchncs.de/post/65445774) · [символы](https://yakihonne.com/article/naddr1qvzqqqr4gupzqmercx9zlg23d38ca6auar8vhmaz4rtx8xc9kwn2wprat2s4jphkqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknydmzxcurxe3494nrsdmp956rvetz943rwwfs95ek2dfhx43nycekvd3x25z286l) · [Проверка](https://blogfreely.net/nathannazarov26/liseli-turk-ifsa-porn-videolari-turkce-amator-liseliler) · [Пример](https://articlescad.com/hindi-xxx-video-com-free-indian-porn-videos-desi-sex-clips-385924.html) · [Прочие](https://morganaresort.com/grmo033?f=linkcentre) · [ord('A](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/fc2-84da3b.pdf) · [затем](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-2a35e8.pdf) · [Хорошая](https://jaflysilve.freeflarum.com/d/4032-4032-sex-with-pakistani-aunty) · [caesar(text](https://yakihonne.com/article/naddr1qvzqqqr4gupzq8hnt7e88c5ken33wnt7g96jp7n03gqlqnvyj4ld0tp5uy2puddxqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0ykkyef3xcmrverr94nryve5956rscen94skzcf494jk2et9vy6rxe3jx5crvjpcf5q) · [Сложность](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/gv-c1105c.pdf) · [задачу](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/cg-8a57c8.pdf) · [вызова](https://hansenanna1.wixsite.com/my-site-1/post/eva-ionesco-playboy-1976-gallery-classic-nude-photos) · [включая](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [сдвинуть](https://privatebin.devol.it/?e435290397dbb13c#C2iBXutonYXKPPVo6RzyDvs5mKFmBi37oGWSNpjDN1jU) · [корректности](https://privatebin.devol.it/?81fdb7325489d696#Abhg7SUD9rw5wKnAN6Q9gkYZCMFT1obMuHSwGFJCrMro) · [сдвиг](https://markr236.wixsite.com/my-site-1/post/antonia-mackenzie-naked--onlyfans-leaked-photos-and-videos) · [result](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [ch.isalpha](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Решение](https://drop.xtrafrancyz.net/selif/yahevx4ell.pdf) · [привычка](https://rentry.co/ycancan-872884) · [result.append(ch](https://yakihonne.com/article/naddr1qvzqqqr4gupzqdh9597adxjr79p5e2mdfrv9awgvxqrq8q05ltut2y603gjtyescqy28wumn8ghj7un9d3shjtnyv9kh2uewd9hszrthwden5te0dehhxtnvdakqzynhwden5te0danxvcmgv95kutnsw43qqtr8v9kxcetj0yknycfcxqmnjcmz95ckxef3956rgdp4943rsep494nrzephxf3nzvtzxg6x2j34gcu) · [разработчика](https://statics.pancake.vn/web-media-264/92/59/13/df/1ac758e45c0746166032acce4b52672051f6ddf0f8f22ee73feed3db.pdf) · [прибавляется](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/unique-dva-sposoba-mvffgyky.md) · [случай](https://drop.xtrafrancyz.net/selif/velogy13gw.pdf)

