В программировании я новичок, но захотелось сделать собственный код для шифра Виженера. Видел другие варианты кода, но мало что в них понял, поэтому сделал по-своему. Скажите, что можно исправить здесь, чтобы сократить или оптимизировать сам код?
import textwrap
#c-шиф символ n-алфавит k-ключ m-исх номер
alf_ru = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'
alf_rum = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
a=input(('Ввееди фразу: '))
key=input(('Слово: '))
act=str(input('1 - шиф, 2 - дешиф: '))
def shifr(sh):
n=33
result=''
for i in range (len(a)):
if a[i] in alf_rum:
ish=a[i]
kl=key[i]
m=alf_rum.find(ish)
k=alf_rum.find(kl)
c=(m+k)%n
result+=alf_rum[c]
elif a[i] in alf_ru:
ish = a[i]
kl = key[i]
m = alf_ru.find(ish)
k = alf_rum.find(kl)
c = (m + k) % n
result+=alf_ru[c]
else:
result+=a[i]
return result
def deshifr(sh):
n=33
result=''
for i in range (len(a)):
if a[i] in alf_rum:
ish=a[i]
kl=key[i]
c=alf_rum.find(ish)
k=alf_rum.find(kl)
m=(c-k)%n
result+=alf_rum[m]
elif a[i] in alf_ru:
ish = a[i]
kl = key[i]
c = alf_ru.find(ish)
k = alf_rum.find(kl)
m=(c-k)%n
result+=alf_ru[m]
else:
result+=a[i]
return result
empt=[]
for i in range(len(a)):
if a[i]==' ':
empt.append(i)
a=a.replace(' ','')
#print('1)', a, empt )
simb=[]
znaki=[]
for i in range(len(a)):
if a[i] not in alf_rum and a[i] not in alf_ru:
simb.append(i)
znaki.append(a[i])
else:
continue
#print('2)', a, simb, znaki)
while len(a)!=len(key):
for i in range(0,len(key)):
if len(a)!=len(key):
key+=key[i]
for i in range(len(simb)):
pos=simb[i]
key=key[:pos]+znaki[i]+key[pos:]
key=key[:len(a)]
#print('3)', key)
move={
'1': shifr,
'2': deshifr,
}
res=move.get(act)(act)
for i in range(len(empt)):
pro=empt[i]
res=res[:pro]+' '+res[pro:]
print(textwrap.fill(res, 157))