Není nic horšího než předčasné vydání nedostatečně prověřeného programu (žejo, Redmonde), takže update s opravenými chybami a funkčním reciprokým šifrováním, to bylo blbě posunuté. Snad je to všechno. Navrch přidaná volba mezi anglickou a českou abecedou, ať mají táborníci trochu větší luxus

#! /usr/bin/python
# coding: utf-8
i=0;
while (i<>1) and (i<>2):
print(" Vigenérova šifra")
print("1 - anglická abeceda"+'\n'+"2 - česká abeceda s diakritikou a CH")
i=input()
if (1==i):
mala= ['a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r',
's','t','u','v','w','x','y','z','']
velka=['A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O','P','Q','R',
'S','T','U','V','W','X','Y','Z','']
else:
mala= ['a','á','b','c','č','d','ď','e','é','ě','f','g','h','ch',
'i','í','j','k','l','m','n','ň','o','ó','p','q','r','ř',
's','š','t','ť','u','ú','ů','v','w','x','y','ý','z','ž','']
velka=['A','Á','B','C','Č','D','Ď','E','É','Ě','F','G','H','CH',
'I','Í','J','K','L','M','N','Ň','O','Ó','P','Q','R','Ř',
'S','Š','T','Ť','U','Ú','Ů','V','W','X','Y','Ý','Z','Ž','']
text =raw_input('Zadej text: ')
heslo=raw_input('Zadej heslo: ')
zasif=desif=recip=""
# proměnné:
# i index
# p písmeno
# k klíč
# t text
# h heslo
# s stopka
t=h=0
while t<len(text):
i=0
p=-1
while mala[i]:
if (text[t:].startswith(mala[i])) or (text[t:].startswith(velka[i])):
p=i
i+=1
if p<0:
t+=1
else:
k=-1
s=0
while k<0:
i=0
while mala[i]:
if (heslo[h:].startswith(mala[i])) or (heslo[h:].startswith(velka[i])):
k=i
i+=1
if k<0:
h+=1
else:
h+=len(velka[k])
if h>len(heslo):
h=0
if s>len(heslo):
k=0
break
s+=1
t+=len(velka[p])
i=len(mala)-1
zasif+=velka[(p+k)%i]
desif+=velka[(p+i-k)%i]
recip+=velka[(k+i-p-1)%i]
print("Zašifrováno: "+zasif)
print("Dešifrováno: "+desif)
print("Reciproká: "+recip)