Created
March 18, 2019 16:26
-
-
Save ktprezes/56a6421d546b97dbd4c6fe2978e8117f to your computer and use it in GitHub Desktop.
Python - szyfr 'gaderypoluki' - przykładowa implementacja - można podać inny klucz - z innymi parami
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding: UTF-8 -*- | |
# Szyfr GaDeRyPoLuKi - przykładowa implementacja | |
# założenie: znaki w kluczu są unikalne - nie muszą to być litery; klucz ma parzystą długość | |
# wymieniane są między sobą parami: klucz[0] <-> klucz[1], ..., klucz[10] <-> klucz[11], itd... | |
# kończy działanie po podaniu pustego tekstu - np po naciśnięciu samego 'Enter' | |
klucz_def:str = 'GADERYPOLUKI' # klucz default / domyślny | |
klucz_we :str ="" | |
klucz :str ="" | |
tekst_we :str ="" | |
tekst_wy :str ="" | |
znak :str ="" | |
def klucz_OK(klucz: str ="", druk_kom : bool = True) -> bool: | |
# test, czy klucz jest OK? | |
if klucz =="": | |
if druk_kom: print("UWAGA!!! Klucz pusty!") | |
return False | |
if len(klucz) % 2 != 0: # dł nieparzysta - któraś litera nie ma pary | |
if druk_kom: print("UWAGA!!! Któryś znak w kluczu jest bez pary!") | |
return False | |
if len(set(klucz.upper())) != len(klucz): | |
if druk_kom: print("UWAGA!!! Znaki w podanym kluczu nie są unikalne!") | |
return False | |
return True | |
# end of def klucz_OK(klucz: str) -> bool: | |
def indx_pary(indx_we:int) -> int: | |
# zwraca indeks w kluczu tego drugiego znaku z pary | |
# 0->1, 1->0, ..., 6->7, 7->6, itd... | |
return (indx_we // 2)*2 + ((indx_we+1) % 2) | |
# end of def indx_pary(indx_we:int) -> int: | |
# początek właściwego programu | |
while(1): | |
klucz_we = input ("Podaj klucz:\n") | |
klucz_we = klucz_we.upper() | |
if klucz_OK(klucz_we): | |
print("Podano poprawny klucz:", klucz_we) | |
print("Od tej chwili to on będzie używany.") | |
klucz = klucz_we.upper() | |
else: | |
print("Nie podano prawidłowego klucza,\nzostanie użyty", end=' ') | |
if klucz =="": | |
klucz = klucz_def.upper() | |
print("klucz domyślny:", klucz) | |
else: | |
print("klucz używany wcześniej:", klucz) | |
# tutaj wiemy, że klucz składa się z unikalnych znaków: | |
# dużych liter i ewentualnych innych | |
tekst_we = input("Podaj tekst:\n") | |
if tekst_we =="": | |
print("Nie podano tekstu - bye bye...") | |
break | |
tekst_wy ="" | |
for znak in tekst_we: | |
indx = klucz.find(znak.upper()) | |
if indx == -1: | |
tekst_wy += znak # znaku nie ma w kluczu => przepisz do tekst_wy | |
else: | |
if znak.islower(): | |
tekst_wy += klucz[indx_pary(indx)].lower() | |
else: | |
tekst_wy += klucz[indx_pary(indx)] | |
# nie trzeba badać, znak.isupper(), bo w kulczu same duże litery | |
# i ewentualnie inne znaki niż litery | |
print('Tekst wyjściowy:', tekst_wy, sep='\n') | |
# end of while(1): |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment