Napisz program szyfrujący i deszyfrujący tekst przy użyciu szyfru Cezara. Za jego pomocą zaszyfruj i zdeszyfruj łańcuch znaków zapisany w zmiennej tekst. Przetestuj jego działanie dla alfabetu szyfrowego utworzonego na podstawie łańcucha znaków SYNESTEZJA oraz wiadomości EMANCYPACJA 1678!.
Twój program powinien szyfrować i deszyfrować wyłącznie litery alfabetu łacińskiego. Jeśli w tekście do szyfrowania lub odszyfrowania są małe litery, przekształć je na wielkie. Jeśli w tekście są znaki inne niż litery, należy je pominąć w szyfrowaniu oraz deszyfrowaniu (w łańcuchu znaków powinny pojawić się w niezmienionej formie).
Specyfikacja problemu
Dane:
tekst – łańcuch znaków składający się z wielkich liter alfabetu łacińskiego, spacji, cyfr oraz znaków interpunkcyjnych
klucz – łańcuch znaków składający się z wielkich liter alfabetu łacińskiego
Wynik:
utworzony za pomocą klucza klucz alfabet oraz zaszyfrowany, a następnie odszyfrowany z użyciem klucza klucz łańcuch znaków tekst
RVQIu7sMviVr8
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Polecenie 2
Zapoznaj się z prezentacją i porównaj z nią kod swojego programu.
R115VGExf1jYl1
xxx
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Polecenie 3
Zmodyfikuj ḟunkcje szyfruj oraz deszyfruj tak, by pierwszej literze alfabetu odpowiadała ostatnia litera nowego alfabetu, drugiej – przedostatnia itd.
R11ONthp5fYf5
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Zmodyfikowana funkcja szyfrująca:
Linia 1. def szyfruj otwórz nawias okrągły tekst przecinek nowy podkreślnik alfabet przecinek alfabet zamknij nawias okrągły dwukropek.
Linia 2. zaszyfrowany podkreślnik tekst znak równości cudzysłów cudzysłów.
Linia 4. for znak in tekst dwukropek.
Linia 5. if apostrof a apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof z apostrof dwukropek.
Linia 6. znak znak równości chr otwórz nawias okrągły ord otwórz nawias okrągły znak zamknij nawias okrągły minus 32 zamknij nawias okrągły.
Linia 7. if apostrof A apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof Z apostrof dwukropek.
Linia 8. for i in range otwórz nawias okrągły len otwórz nawias okrągły alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 9. if znak znak równości znak równości alfabet otwórz nawias kwadratowy i zamknij nawias kwadratowy dwukropek.
Linia 10. znak znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły minus 1 minus i zamknij nawias kwadratowy.
Linia 11. break.
Linia 12. zaszyfrowany podkreślnik tekst plus znak równości znak.
Linia 14. return zaszyfrowany podkreślnik tekst.
def szyfruj(tekst, nowy_alfabet, alfabet):
zaszyfrowany_tekst = ""
for znak in tekst:
if 'a' <= znak <= 'z':
znak = chr(ord(znak) - 32)
if 'A' <= znak <= 'Z':
for i in range(len(alfabet)):
if znak == alfabet[i]:
znak = nowy_alfabet[len(nowy_alfabet) - 1 - i]
break
zaszyfrowany_tekst += znak
return zaszyfrowany_tekst
Zmodyfikowana funkcja deszyfrująca:
Linia 1. def deszyfruj otwórz nawias okrągły tekst przecinek nowy podkreślnik alfabet przecinek alfabet zamknij nawias okrągły dwukropek.
Linia 2. odszyfrowany podkreślnik tekst znak równości cudzysłów cudzysłów.
Linia 4. for znak in tekst dwukropek.
Linia 5. if apostrof a apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof z apostrof dwukropek.
Linia 6. znak znak równości chr otwórz nawias okrągły ord otwórz nawias okrągły znak zamknij nawias okrągły minus 32 zamknij nawias okrągły.
Linia 7. if apostrof A apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof Z apostrof dwukropek.
Linia 8. for i in range otwórz nawias okrągły len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 9. if znak znak równości znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły minus 1 minus i zamknij nawias kwadratowy dwukropek.
Linia 10. znak znak równości alfabet otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 11. break.
Linia 12. odszyfrowany podkreślnik tekst plus znak równości znak.
Linia 14. return odszyfrowany podkreślnik tekst.
def deszyfruj(tekst, nowy_alfabet, alfabet):
odszyfrowany_tekst = ""
for znak in tekst:
if 'a' <= znak <= 'z':
znak = chr(ord(znak) - 32)
if 'A' <= znak <= 'Z':
for i in range(len(nowy_alfabet)):
if znak == nowy_alfabet[len(nowy_alfabet) - 1 - i]:
znak = alfabet[i]
break
odszyfrowany_tekst += znak
return odszyfrowany_tekst
Cały kod zmodyfikowanego programu:
Linia 1. def utworzAlfabet otwórz nawias okrągły klucz przecinek alfabet zamknij nawias okrągły dwukropek.
Linia 2. nowy podkreślnik alfabet znak równości cudzysłów cudzysłów.
Linia 4. for znak in klucz dwukropek.
Linia 5. if apostrof a apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof z apostrof dwukropek.
Linia 6. znak znak równości chr otwórz nawias okrągły ord otwórz nawias okrągły znak zamknij nawias okrągły minus 32 zamknij nawias okrągły.
Linia 7. czyIstnieje znak równości False.
Linia 8. for j in range otwórz nawias okrągły len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 9. if znak znak równości znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 10. czyIstnieje znak równości True.
Linia 11. break.
Linia 12. if not czyIstnieje dwukropek.
Linia 13. nowy podkreślnik alfabet plus znak równości znak.
Linia 15. for znak in alfabet dwukropek.
Linia 16. czyIstnieje znak równości False.
Linia 17. for j in range otwórz nawias okrągły len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 18. if znak znak równości znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 19. czyIstnieje znak równości True.
Linia 20. break.
Linia 21. if not czyIstnieje dwukropek.
Linia 22. nowy podkreślnik alfabet plus znak równości znak.
Linia 24. return nowy podkreślnik alfabet.
Linia 27. def szyfruj otwórz nawias okrągły tekst przecinek nowy podkreślnik alfabet przecinek alfabet zamknij nawias okrągły dwukropek.
Linia 28. zaszyfrowany podkreślnik tekst znak równości cudzysłów cudzysłów.
Linia 30. for znak in tekst dwukropek.
Linia 31. if apostrof a apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof z apostrof dwukropek.
Linia 32. znak znak równości chr otwórz nawias okrągły ord otwórz nawias okrągły znak zamknij nawias okrągły minus 32 zamknij nawias okrągły.
Linia 33. if apostrof A apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof Z apostrof dwukropek.
Linia 34. for i in range otwórz nawias okrągły len otwórz nawias okrągły alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 35. if znak znak równości znak równości alfabet otwórz nawias kwadratowy i zamknij nawias kwadratowy dwukropek.
Linia 36. znak znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły minus 1 minus i zamknij nawias kwadratowy.
Linia 37. break.
Linia 38. zaszyfrowany podkreślnik tekst plus znak równości znak.
Linia 40. return zaszyfrowany podkreślnik tekst.
Linia 43. def deszyfruj otwórz nawias okrągły tekst przecinek nowy podkreślnik alfabet przecinek alfabet zamknij nawias okrągły dwukropek.
Linia 44. odszyfrowany podkreślnik tekst znak równości cudzysłów cudzysłów.
Linia 46. for znak in tekst dwukropek.
Linia 47. if apostrof a apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof z apostrof dwukropek.
Linia 48. znak znak równości chr otwórz nawias okrągły ord otwórz nawias okrągły znak zamknij nawias okrągły minus 32 zamknij nawias okrągły.
Linia 49. if apostrof A apostrof otwórz nawias ostrokątny znak równości znak otwórz nawias ostrokątny znak równości apostrof Z apostrof dwukropek.
Linia 50. for i in range otwórz nawias okrągły len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 51. if znak znak równości znak równości nowy podkreślnik alfabet otwórz nawias kwadratowy len otwórz nawias okrągły nowy podkreślnik alfabet zamknij nawias okrągły minus 1 minus i zamknij nawias kwadratowy dwukropek.
Linia 52. znak znak równości alfabet otwórz nawias kwadratowy i zamknij nawias kwadratowy.
Linia 53. break.
Linia 54. odszyfrowany podkreślnik tekst plus znak równości znak.
Linia 56. return odszyfrowany podkreślnik tekst.
Linia 59. alfabet znak równości cudzysłów ABCDEFGHIJKLMNOPQRSTUVWXYZ cudzysłów.
Linia 60. tekst znak równości cudzysłów EMANCYPACJA 1678 wykrzyknik cudzysłów.
Linia 61. klucz znak równości cudzysłów SYNESTEZJA cudzysłów.
Linia 62. klucz znak równości utworzAlfabet otwórz nawias okrągły klucz przecinek alfabet zamknij nawias okrągły.
Linia 64. zaszyfrowany podkreślnik tekst znak równości szyfruj otwórz nawias okrągły tekst przecinek klucz przecinek alfabet zamknij nawias okrągły.
Linia 65. print otwórz nawias okrągły cudzysłów Zaszyfrowany tekst dwukropek cudzysłów przecinek zaszyfrowany podkreślnik tekst zamknij nawias okrągły.
Linia 67. odszyfrowany podkreślnik tekst znak równości deszyfruj otwórz nawias okrągły zaszyfrowany podkreślnik tekst przecinek klucz przecinek alfabet zamknij nawias okrągły.
Linia 68. print otwórz nawias okrągły cudzysłów Odszyfrowany tekst dwukropek cudzysłów przecinek odszyfrowany podkreślnik tekst zamknij nawias okrągły.
def utworzAlfabet(klucz, alfabet):
nowy_alfabet = ""
for znak in klucz:
if 'a' <= znak <= 'z':
znak = chr(ord(znak) - 32)
czyIstnieje = False
for j in range(len(nowy_alfabet)):
if znak == nowy_alfabet[j]:
czyIstnieje = True
break
if not czyIstnieje:
nowy_alfabet += znak
for znak in alfabet:
czyIstnieje = False
for j in range(len(nowy_alfabet)):
if znak == nowy_alfabet[j]:
czyIstnieje = True
break
if not czyIstnieje:
nowy_alfabet += znak
return nowy_alfabet
def szyfruj(tekst, nowy_alfabet, alfabet):
zaszyfrowany_tekst = ""
for znak in tekst:
if 'a' <= znak <= 'z':
znak = chr(ord(znak) - 32)
if 'A' <= znak <= 'Z':
for i in range(len(alfabet)):
if znak == alfabet[i]:
znak = nowy_alfabet[len(nowy_alfabet) - 1 - i]
break
zaszyfrowany_tekst += znak
return zaszyfrowany_tekst
def deszyfruj(tekst, nowy_alfabet, alfabet):
odszyfrowany_tekst = ""
for znak in tekst:
if 'a' <= znak <= 'z':
znak = chr(ord(znak) - 32)
if 'A' <= znak <= 'Z':
for i in range(len(nowy_alfabet)):
if znak == nowy_alfabet[len(nowy_alfabet) - 1 - i]:
znak = alfabet[i]
break
odszyfrowany_tekst += znak
return odszyfrowany_tekst
alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
tekst = "EMANCYPACJA 1678!"
klucz = "SYNESTEZJA"
klucz = utworzAlfabet(klucz, alfabet)
zaszyfrowany_tekst = szyfruj(tekst, klucz, alfabet)
print("Zaszyfrowany tekst:", zaszyfrowany_tekst)
odszyfrowany_tekst = deszyfruj(zaszyfrowany_tekst, klucz, alfabet)
print("Odszyfrowany tekst:", odszyfrowany_tekst)
Efekt działania programu:
Linia 1. Zaszyfrowany tekst dwukropek RHXGVYDXVLX 1678 wykrzyknik.
Linia 2. Odszyfrowany tekst dwukropek EMANCYPACJA 1678 wykrzyknik.