Szyfr Cezara

Zadanie 18 z 19 · rozdział 11Trudność: 2 z 3napisyord/chrmodulo

Treść zadania

Szyfr Cezara zastępuje każdą literę literą położoną k miejsc dalej w alfabecie. Alfabet jest „zawinięty”: po z następuje znowu a. Przy k = 3 litera a przechodzi w d, x w a, a Z w C.

Wczytaj przesunięcie k oraz tekst i wypisz zaszyfrowany tekst:

  • przesuwaj tylko litery alfabetu łacińskiego A–Z i a–z, zachowując ich wielkość (wielka litera pozostaje wielką, mała — małą),
  • pozostałe znaki (spacje, cyfry, interpunkcję, polskie litery takie jak ą czy Ż) przepisz bez zmian.

Przesunięcie może być ujemne (przesunięcie w lewo, np. przy k = -1 litera a przechodzi w z) lub większe niż 26.

Dane wejściowe

  • 1. linia: liczba całkowita k
  • 2. linia: tekst (może zawierać spacje)

Dane wyjściowe

Jedna linia: zaszyfrowany tekst.

Uwagi

  • ord(znak) zwraca kod znaku, a chr(kod) — znak o danym kodzie, np. ord("a") to 97, a chr(100) to "d".
  • Numer małej litery w alfabecie (od 0) to ord(znak) - ord("a"). Nowy numer to (numer + k) % 26 — w Pythonie wynik % dla dodatniego dzielnika jest zawsze z przedziału 0–25, także dla ujemnego k. Z powrotem na literę: chr(nowy_numer + ord("a")). Wielkie litery obsłuż tak samo, z ord("A").
  • To, czy znak jest małą literą łacińską, sprawdzisz warunkiem "a" <= znak <= "z".

Przykłady

Wejście
3
Ala ma kota!
Wyjście
Dod pd nrwd!
Wejście
-1
Zebra
Wyjście
Ydaqz

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 11

Zadania w tym rozdziale ćwiczą podstawowe operacje na napisach: indeksowanie, wycinanie, zamianę znaków, dzielenie zdania na słowa i składanie napisów z części.

Konwencje wspólne:

  • Każde zadanie jest osobnym programem: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • Program nie wypisuje komunikatów typu „Podaj napis:”.
  • Napis lub zdanie wczytuj jako całą linię — może zawierać spacje.
  • Słowo to fragment zdania oddzielony od innych spacjami. Znaki interpunkcyjne (np. . , ! ? ; : - ( ) ") stojące na początku lub końcu fragmentu nie należą do słowa (kota. → kota), a fragment złożony wyłącznie z interpunkcji (np. samotny myślnik -) nie jest słowem. W Pythonie słowa uzyskasz tak: podziel zdanie metodą split(), z każdego fragmentu usuń interpunkcję metodą strip(string.punctuation) i pomiń puste wyniki.
  • Gdy wynikiem jest lista, wypisz ją tak, jak robi to print(lista) w Pythonie, np. ['Ala', 'ma', 'kota']. Pusta lista to [].

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
1
xyz XYZ
Oczekiwane wyjście
yza YZA

Test 2

Nie uruchomiono
Wejście
26
Hello
Oczekiwane wyjście
Hello

Test 3

Nie uruchomiono
Wejście
-3
Dod pd nrwd!
Oczekiwane wyjście
Ala ma kota!

Test 4

Nie uruchomiono
Wejście
29
abc
Oczekiwane wyjście
def

Test 5

Nie uruchomiono
Wejście
13
Zażółć gęślą jaźń.
Oczekiwane wyjście
Mnżółć tęśyą wnźń.

Test 6

Nie uruchomiono
Wejście
-27
Python 3.12
Oczekiwane wyjście
Oxsgnm 3.12
Uruchom z własnymi danymi