Sprawdź się
Napisz program, który przekształci podany łańcuch znaków tekst do postaci, w której składa się wyłącznie z małych liter alfabetu łacińskiego.
Działanie programu przetestuj dla łańcucha znaków Czy androidy snia o elektrycznych owcach?
Specyfikacja problemu:
Dane:
tekst– łańcuch znaków
Wynik:
łańcuch znaków zawierający tylko małe litery
Przykładowe wyjście:
czyandroidysniaoelektrycznychowcachPrzykładowe rozwiązanie zadania:
def zamien(tekst):
nowy_tekst = ""
for znak in tekst:
if 'A' <= znak <= 'Z':
znak = chr(ord(znak) + 32)
if 'a' <= znak <= 'z':
nowy_tekst += znak
return nowy_tekst
tekst = "Czy androidy snia o elektrycznych owcach?"
print(zamien(tekst))Napisz program, który zaszyfruje łańcuch znaków tekst, używając uogólnionego szyfru Cezara. Szyfrowanie powinno odbyć się zgodnie z następującymi regułami:
łańcuch znaków powinien zostać zaszyfrowany dwa razy – z użyciem klucza równego długości tego łańcucha znaków oraz z użyciem klucza równego liczbie przeciwnej długości łańcucha znaków;
program powinien rozpoznawać wielkość liter;
program powinien szyfrować wyłącznie litery – spacje oraz znaki interpunkcyjne powinny być kasowane.
Sprawdź działanie programu dla tekstu Na Zachodzie bez zmian?.
Specyfikacja problemu:
Dane:
tekst– łańcuch znaków do zaszyfrowania
Wynik:
dwa zaszyfrowane łańcuchy znaków
Przykładowe wyjście:
KxWxzelawfbybwwjfxk
QdCdfkrgclhehccpldqW funkcji szyfrującej należy szyfrować znaki będące wielkimi literami, których kody ASCII należą do zakresu , lub małymi literami, których kodu ASCII należą do zakresu .
Przykładowe rozwiązania zadania
Rozwiązanie wykorzystujące normalizację:
def szyfruj(tekst, klucz):
szyfrogram = ""
klucz = (klucz % 26 + 26) % 26
for znak in tekst:
if 'A' <= znak <= 'Z':
if ord(znak) + klucz <= ord('Z'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz - 26)
elif 'a' <= znak <= 'z':
if ord(znak) + klucz <= ord('z'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz - 26)
return szyfrogram
tekst = "Na Zachodzie bez zmian?"
print(szyfruj(tekst, len(tekst)))
print(szyfruj(tekst, -len(tekst)))Rozwiązanie, które nie wykorzystuje normalizacji:
def szyfruj(tekst, klucz):
szyfrogram = ""
klucz = klucz % 26
for znak in tekst:
if klucz >= 0:
if 'A' <= znak <= 'Z':
if ord(znak) + klucz <= ord('Z'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz - 26)
elif 'a' <= znak <= 'z':
if ord(znak) + klucz <= ord('z'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz - 26)
else:
if 'A' <= znak <= 'Z':
if ord(znak) + klucz >= ord('A'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz + 26)
elif 'a' <= znak <= 'z':
if ord(znak) + klucz >= ord('a'):
szyfrogram += chr(ord(znak) + klucz)
else:
szyfrogram += chr(ord(znak) + klucz + 26)
return szyfrogram
tekst = "Na Zachodzie bez zmian?"
klucz = len(tekst)
print(szyfruj(tekst, klucz))
print(szyfruj(tekst, -klucz))Napisz program, który dla każdego klucza z zakresu (z wyłączeniem zera) odszyfruje wiadomość zaszyfrowaną za pomocą uogólnionego algorytmu szyfru Cezara. Tekst jawny oraz szyfrogram muszą składać się z wielkich liter alfabetu łacińskiego, szyfrogram może zawierać niezaszyfrowane znaki białe i interpunkcyjne.
Sprawdź działanie programu dla szyfrogramu QUQM UWRM: QHUIMT
Specyfikacja problemu:
Dane:
szyfrogram– łańcuch znaków, zaszyfrowana wiadomośćklucz– liczba całkowita z zakresu (z wyłączeniem zera)
Wynik:
łańcuchy znaków zawierające odszyfrowaną wiadomość oraz liczby całkowite oznaczające klucz
Przykładowe wyjście:
RVRN VXSN: RIVJNU Klucz: -25
SWSO WYTO: SJWKOV Klucz: -24
...
OSOK SUPK: OFSGKR Klucz: 24
PTPL TVQL: PGTHLS Klucz: 25Dla każdego klucza z zakresu z wyłączeniem zera wywołaj uzupełnioną funkcję deszyfruj().
Przykładowe rozwiązania zadania
Rozwiązanie wykorzystujące normalizację klucza:
def deszyfruj(szyfrogram, klucz):
tekst = ""
klucz = (-klucz % 26 + 26) % 26
for znak in szyfrogram:
if 'A' > znak or znak > 'Z':
tekst += znak
continue
if ord(znak) - klucz >= ord('A'):
tekst += chr(ord(znak) - klucz)
else:
tekst += chr(ord(znak) - klucz + 26)
return tekst
szyfrogram = "QUQM UWRM: QHUIMT"
for klucz in range(-25, 26):
if klucz == 0:
continue
print(deszyfruj(szyfrogram, klucz), "Klucz:", klucz)Rozwiązanie, które nie wykorzystuje normalizacji:
def deszyfruj(szyfrogram, klucz):
tekst = ""
klucz = klucz % 26
for znak in szyfrogram:
if 'A' > znak or znak > 'Z':
tekst += znak
continue
if klucz >= 0:
if ord(znak) + klucz <= ord('Z'):
tekst += chr(ord(znak) + klucz)
else:
tekst += chr(ord(znak) + klucz - 26)
else:
if ord(znak) + klucz >= ord('A'):
tekst += chr(ord(znak) + klucz)
else:
tekst += chr(ord(znak) + klucz + 26)
return tekst
szyfrogram = "QUQM UWRM: QHUIMT"
for klucz in range(-25, 26):
if klucz == 0:
continue
print(deszyfruj(szyfrogram, klucz), "Klucz:", klucz)