Szyfr Cezara
Szyfr Cezara polega na przesuwaniu każdej litery tekstu o ustaloną liczbę miejsc w alfabecie. Jeśli przesunięcie wynosi 3, każda litera zostaje zastąpiona trzecią kolejną literą z wybranego alfabetu. Deszyfrowanie działa odwrotnie: litery przesuwane są o tę samą liczbę miejsc wstecz. Znaki, które nie są literami, na przykład spacje, cyfry i znaki interpunkcyjne, pozostają bez zmian.

Program w Pythonie
W linijkach 1-16 znajduje się funkcja szyfr_cezara, czyli najważniejsza część programu. To właśnie w tej funkcji zapisany jest cały sposób działania szyfru Cezara. Funkcja otrzymuje tekst, liczbę przesunięć oraz tryb działania programu.
W linijce 2 zapisany jest alfabet, którego używa program. Dzięki temu program wie, w jakiej kolejności występują litery. W linijce 3 tworzona jest pusta zmienna wynik, do której będą dopisywane kolejne litery po zaszyfrowaniu lub odszyfrowaniu.
W linijkach 5-6 program sprawdza, czy wybrano tryb deszyfruj. Jeśli tak, to przesunięcie zostaje zamienione na liczbę przeciwną. Dzięki temu program przesuwa litery w drugą stronę i może odczytać zaszyfrowaną wiadomość.
W linijkach 8-14 program przechodzi po kolei przez każdy znak wiadomości. Najpierw tekst zostaje zamieniony na wielkie litery, a potem pętla sprawdza każdą literę osobno. Jeśli znak znajduje się w alfabecie, program odszukuje jego aktualne miejsce.
Następnie program dodaje do tego miejsca wartość przesunięcia. Przy szyfrowaniu litera przesuwa się do przodu, a przy deszyfrowaniu do tyłu, ponieważ wcześniej przesunięcie zostało zamienione na liczbę ujemną. Zapis % len(alfabet) sprawia, że alfabet działa jak koło: po dojściu do końca wracamy na początek, a przy cofnięciu przed początek przechodzimy na koniec.
Na koniec program pobiera literę z nowego miejsca w alfabecie i dopisuje ją do zmiennej wynik. Jeśli znak nie znajduje się w alfabecie, na przykład jest spacją, cyfrą albo przecinkiem, zostaje dopisany bez zmian. Dzięki temu program szyfruje tylko litery, a resztę tekstu zostawia taką samą.
W linijce 16 funkcja zwraca gotowy wynik, czyli zaszyfrowaną albo odszyfrowaną wiadomość.
Po zakończeniu funkcji zaczyna się część programu, w której korzystamy z tej funkcji. W linijce 18 tworzona jest zmienna tajemna_wiadomosc. To w niej zapisany jest tekst, który chcemy zaszyfrować.
W linijkach 20-21 program wywołuje funkcję szyfr_cezara, szyfruje wiadomość z przesunięciem o 3 miejsca, zapisuje wynik w zmiennej zaszyfrowana, a następnie wypisuje go na ekranie.
W linijkach 23-24 program ponownie wywołuje tę samą funkcję, ale tym razem w trybie deszyfruj. W ten sposób wcześniej zaszyfrowany tekst zostaje odszyfrowany i zapisany w zmiennej odszyfrowana. Na końcu program wypisuje odczytaną wiadomość na ekranie.
def szyfr_cezara(tekst, przesuniecie, tryb):alfabet = "AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ"wynik = ""if tryb == "deszyfruj":przesuniecie = -przesunieciefor znak in tekst.upper():if znak in alfabet:miejsce = alfabet.index(znak)nowe_miejsce = (miejsce + przesuniecie) % len(alfabet)wynik = wynik + alfabet[nowe_miejsce]else:wynik = wynik + znakreturn wyniktajemna_wiadomosc = "TAJNA WIADOMOŚĆ"zaszyfrowana = szyfr_cezara(tajemna_wiadomosc, 3, "szyfruj")print("Zaszyfrowana wiadomość:", zaszyfrowana)odszyfrowana = szyfr_cezara(zaszyfrowana, 3, "deszyfruj")print("Odszyfrowana wiadomość:", odszyfrowana)