Rozwiązanie
Zadanie 6.1 – matura 2016, maj

Szyfr Cezara 
Podstawieniowy szyfr Cezara z przesunięciem (kluczem) k polega na zastąpieniu każdego znaku jawnego znakiem leżącym w alfabecie o k pozycji w prawo od zastępowanego znaku.
Przykład: znak ‘B’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘E’.
Przy szyfrowaniu znaku należy postępować w sposób cykliczny, to znaczy, jeżeli znak nie posiada w alfabecie następnika przesuniętego o k pozycji, to alfabet „zawija się" i za literą Z następuje znów litera A.
Przykład: jawny znak ‘X’ po zakodowaniu kluczem k=3 zastąpiony zostanie znakiem ‘A’, znak ‘Y’ – znakiem ‘B’, natomiast ‘Z’ – znakiem ‘C’.
W tym zadaniu rozpatrujemy tylko słowa zbudowane z wielkich liter alfabetu angielskiego (o kodach ASCII odpowiednio od 65 do 90), o długościach nie większych niż 30 znaków. W pliku dane_6_1.txt znajduje się 100 słów. Słowa umieszczono w osobnych wierszach.
Fragment pliku dane_6_1.txt:
INTERPRETOWANIE
ROZWESELANIE
KONSERWOWANIE
Napisz program, który zaszyfruje słowa z pliku dane_6_1.txt z użyciem klucza k = 107. Wynik zapisz do pliku wyniki_6_1.txt, każde słowo w osobnym wierszu, w porządku odpowiadającym kolejności słów z pliku z danymi.
Uwaga:
Dla pierwszego słowa z pliku dane_6_1.txt (INTERPRETOWANIE) wynikiem jest słowo LQWHUSUHWRZDQLH.
def szyfr(ciag, k):
    nowy_ciag = ""
    for lit in ciag:
        nowy_ord = 65+(ord(lit)-65+k) % 26
        nowy_ciag += chr(nowy_ord)
    return nowy_ciag

with open("wyniki_6_1.txt", "w") as wyjscie:
    with open("DANE_PR2/dane_6_1.txt") as wejscie:
        for linia in wejscie:
            if not linia:
                continue
            linia = linia.strip()
            wyjscie.write(szyfr(linia, 107)+"\n")

Pobierz rozwiązanie
Wyszukaj więcej zadań z tego arkusza...