Szyfr Kołowy
Szyfr kołowy polega na zastępowaniu każdej litery jej współrzędnymi odczytanymi z dwóch pierścieni koła. Pierwszy pierścień oznaczony jest jako I, drugi jako II, a każda litera ma dodatkowo numer swojej kolumny. Na przykład litera A jest zapisywana jako I1, a litera X jako II11. Szyfrowanie polega więc na odczytaniu oznaczenia wybranej litery, a deszyfrowanie na odnalezieniu litery na podstawie zapisu, np. II11. Układ można łatwo zmienić, obracając jeden z pierścieni koła.

Program w Pythonie
W linijkach 1-30 znajduje się funkcja szyfr_kolowy. To najważniejsza część programu. Funkcja otrzymuje tekst oraz tryb działania: szyfruj lub deszyfruj.
W linijkach 2-3 zapisane są dwa pierścienie szyfru. Pierwszy zawiera litery od A do M, a drugi od N do Z. Położenie litery w napisie oznacza jej numer kolumny. Na przykład litera K jest na pozycji 11 w pierwszym pierścieniu, więc otrzymuje zapis I11. W linijce 4 powstaje pusta zmienna wynik, do której program będzie dopisywał kolejne fragmenty wiadomości.
W linijkach 6-17 wykonywane jest szyfrowanie. Pętla z linijki 7 sprawdza kolejno każdy znak tekstu. Jeśli litera znajduje się w pierwszym pierścieniu, program w linijce 9 odczytuje jej pozycję i dodaje 1, ponieważ liczenie pozycji w Pythonie zaczyna się od zera. Następnie w linijce 10 zapisuje do wyniku literę I, numer kolumny oraz spację. W ten sposób K zostaje zapisane jako I11.
Jeżeli litera należy do drugiego pierścienia, linijki 11-13 wykonują podobne działanie, ale przed numerem pojawia się II. Dlatego litera O zostaje zapisana jako II2. W linijkach 14-15 program zamienia zwykłą spację między wyrazami na znak /, aby później podczas deszyfrowania wiedzieć, gdzie ma ponownie wstawić odstęp. Linijka 17 zwraca cały szyfrogram, a metoda strip() usuwa niepotrzebną spację znajdującą się na jego końcu.
Od linijki 19 zaczyna się deszyfrowanie. Metoda split() dzieli zaszyfrowaną wiadomość na osobne fragmenty, na przykład I11, II2 i II7. Pętla z linijki 20 sprawdza każdy taki kod. Jeśli program trafi na /, wstawia do wyniku zwykłą spację.
Ważna jest kolejność w linijkach 23 i 26. Program najpierw sprawdza, czy kod zaczyna się od II, ponieważ zapis II2 zaczyna się także od litery I. Z kodu II2 program pobiera cyfrę 2 za pomocą kod[2:], a następnie odczytuje drugą literę drugiego pierścienia, czyli O. Dla kodu I11 używany jest zapis kod[1:], ponieważ po jednym znaku I od razu występuje numer. Wtedy program odczytuje jedenastą literę pierwszego pierścienia, czyli K.
W linijkach 32-35 program sprawdza swoje działanie. Najpierw szyfruje słowo KOT, otrzymując I11 II2 II7, a później wykorzystuje ten wynik do deszyfrowania i ponownie otrzymuje słowo KOT.
def szyfr_kolowy(tekst, tryb):pierwszy_pierscien = "ABCDEFGHIJKLM"drugi_pierscien = "NOPQRSTUVWXYZ"wynik = ""if tryb == "szyfruj":for znak in tekst.upper():if znak in pierwszy_pierscien:numer = pierwszy_pierscien.index(znak) + 1wynik = wynik + "I" + str(numer) + " "elif znak in drugi_pierscien:numer = drugi_pierscien.index(znak) + 1wynik = wynik + "II" + str(numer) + " "elif znak == " ":wynik = wynik + "/ "return wynik.strip()kody = tekst.split()for kod in kody:if kod == "/":wynik = wynik + " "elif kod.startswith("II"):numer = int(kod[2:])wynik = wynik + drugi_pierscien[numer - 1]elif kod.startswith("I"):numer = int(kod[1:])wynik = wynik + pierwszy_pierscien[numer - 1]return wyniktajemna_wiadomosc = "KOT"zaszyfrowana = szyfr_kolowy(tajemna_wiadomosc, "szyfruj")print("Zaszyfrowana wiadomość:", zaszyfrowana)odszyfrowana = szyfr_kolowy(zaszyfrowana, "deszyfruj")print("Odszyfrowana wiadomość:", odszyfrowana)