2016-12-15 2 views
0

У меня есть вопрос об этом ниже код:Python упражнения Vigenere код

ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

def main(): 
encrypt_code = codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS') 
print("{}".format(encrypt_code)) 
print("{}".format(decrypt('CIRCUS', encrypt_code))) 

def codeer(tekst, sleutel): 
pairs = zip(tekst, cycle(sleutel)) 
code = "" 

for pair in pairs: 
    total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair) 
    code += ALPHA[total % 26] 

return code; 

Этот код будет врезаться, потому что сообщение содержит пробелы и а! знак.

total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair) ValueError: substring not found

Может кто-нибудь помочь мне с моей проблемой

Ниже приведен пример ожидаемого результата:

codeer('NOBODY EXPECTS THE SPANISH INQUISITION!', 'CIRCUS') 
'PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!' 

decodeer('PWSQXQ MORYUVA VBW AGCHAUP KHIWQJKNAQV!', 'CIRCUS') 
'NOBODY EXPECTS THE SPANISH INQUISITION!' 
+0

использовать ['find()'] (https://docs.python.org/2/library/string.html#string.find), чтобы избежать ошибки? (хотя это даст неверные результаты, я думаю) – UnholySheep

+0

Вы должны объяснить, каков ожидаемый результат и поведение - например: что должно произойти с символами пробелов и восклицательных знаков? – UnholySheep

+0

Здравствуйте, я в настоящее время использую find, чтобы видеть в символе в алфавите, однако я получаю следующее исключение: TypeError: не все аргументы, преобразованные во время форматирования строки – Michael

ответ

0

Мне кажется, что все, что вам нужно сделать, это только код/​​декодировании когда этот символ является заглавной буквой. Ниже приведен пример того, что я имею в виду.

def codeer(tekst, sleutel): 
    pairs = zip(tekst, cycle(sleutel)) 
    code = "" 

    for pair in pairs: 
     if pair[0].isupper(): 
      total = reduce(lambda x, y: ALPHA.index(x) + ALPHA.index(y), pair) 
      code += ALPHA[total % 26] 
     else: 
      code += pair[1] 
    return code 

Вы можете наблюдать за его исполнением here. Кажется, он производит желаемый результат.

+0

@Michael Они одинаковы. Единственное различие - это ведущие и завершающие одиночные кавычки, которые вы можете объединить, если они действительно важны. Я пропустил что-то другое, другое? – ilim

+0

@Michael код, который вы предоставили в своем вопросе, не содержит функции decodeer, поэтому идеонная ссылка, включенная в мой ответ, не имеет этого вызова для декодера в функции main(). Если вы можете добавить код для декодера к своему вопросу, я могу изменить свой ответ, чтобы включить модификацию в декодер, что очень похоже на код. – ilim

Смежные вопросы