У меня возникли проблемы с шифрованием прописных букв, например. если сообщение COMPUTING FUN, ключевым словом является GCSE, я должен получить JRFUBWBSN LL KBQ, но мой фактический результат - xftipkpgb zz ype. Этот результат не имеет правильных букв и не является капиталом. Любая помощь приветствуетсяШифрование писем верхнего регистра python vigenere
message = input('\nenter message: ')
keyword = input('enter keyword: ')
def chr_to_inta(char):
return 0 if char == 'Z' else ord(char)-64
def int_to_chra(integer):
return 'Z' if integer == 0 else chr(integer+64)
def add_charsa(msg, key):
return int_to_chr((chr_to_int(msg) + chr_to_int(key)) % 26)
def chr_to_int(char):
return 0 if char == 'z' else ord(char)-96
def int_to_chr(integer):
return 'z' if integer == 0 else chr(integer+96)
def add_chars(msg, key):
return int_to_chr((chr_to_int(msg) + chr_to_int(key)) % 26)
def vigenere(message, keyword):
keystream = cycle(keyword)
new = ''
for msg in message:
if msg == ' ': # adds a space
new += ' '
elif 96 < ord(msg) < 123: # if lowercase
new += add_chars(msg, next(keystream))
else: # if uppercase
new += add_charsa(msg, next(keystream))
return new
new = vigenere(message, keyword)
print('your encrypted message is: ',new)
мы уже техника его подводит это сделать ... Http: //stackoverflow.com/questions/33442220/itertools-cycle-in-vigenere- cipher-cause-problems-with-spaces-python/33442864 # 33442864 –
Мы добавили пробелы в прошлый раз, теперь мне нужно сделать заглавные буквы. Я попробовал добавить три новые функции, похожие на другие, но теперь они возвращают прописную букву «Z», а не в нижнем регистре, это не сработало, и я застрял в идеях – MrBeard
, во-первых, у вас есть два определения 'add_chars' и никаких определений' add_charsa'. во-вторых, вам нужно убедиться, что 'add_charsa' вызывает ваши новые функции, а не ваши старые, то есть он должен« возвращать int_to_chra ((chr_to_inta (msg) + chr_to_inta (key))% 26) ' –