Stopovat tvoje představy o interpretaci Vigenerovy šifry sice nedokážu, ale tady je případně jedno elegantní a funkční řešení:
from itertools import starmap, cycle
def zakoduj(zprava, klic):
zprava = filter(lambda _: _.isalpha(), zprava.upper())# vyhodi vsechny nealfabeticke znaky
def zaa(c,k): return chr(((ord(k) + ord(c)) % 26) + ord('A'))# kodovani
return "".join(starmap(zaa, zip(zprava, cycle(klic))))
def rozkoduj(zprava, klic):
def roo(c,k): return chr(((ord(c) - ord(k)) % 26) + ord('A'))# dekodovani
return "".join(starmap(roo, zip(zprava, cycle(klic))))
#pouziti:
text = "Tento text chci zasifrovat"
klic = "VIGENEROVASIFRA"
zakod = zakoduj(text, klic)
rozkod = rozkoduj(zakod, klic)
print text; print zakod;print rozkod