2015-11-11 3 views
-3
#Vigenere Cipher 
EncryptedMessage="" 
Mode="" 
Keywordcount = 0 #sets everything to 0 
KeywordTwocount = 0 

while Mode != "encrypt" and Mode != "decrypt": 
    Mode = input('Do you want to encrypt or decrypt a message?') 
    Mode = Mode.lower() 

if Mode == "encrypt": 
    Message=input('Please eneter the message you wish to encrypt: ') 
    Keyword=input('Please enter the keyword you want to use:') 
    KeywordTwo = input(' Please enter second keyword you want to use:') 
    Keywordlength = len(Keyword) 
    KeywordTwolength = len(KeywordTwo) 

    for i in range(0, len(Message)): 
     Messageencrypt = Message[i] 
     Keywordencrypt = Keyword[Keywordcount] 
     KeywordTwoencrypt= KeywordTwo[KeywordTwocount] 
     if Messageencrypt.isalpha(): 
      if Messageencrypt.isupper(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       KeywordTwoencrypt = KeywordTwoencrypt.upper() 
       KeywordTwoencrypt = ord(Keyword2encrypt) - 64 
       FirstCodedMessage = Messageencrypt + Keywordencrypt 
       FinalCodedMessage = FirstCodedMessage + Keyword2encrypt 
       if FinalCodedMessage > 90: 
        FinalCodedMessage = FinalCodedMessage - 26 
       Encryptedletter = chr(FinalCodedMessage) 
      elif Messageencrypt.islower(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       KeywordTwoencrypt = KeywordTwoencrypt.upper() 
       KeywordTwoencrypt = ord(KeywordTwoencrypt) - 64 
       FinalCodedMessage = Messageencrypt + Keywordencrypt 
       if FinalCodedMessage > 122: 
        FinalCodedMessage = FinalCodedMessage - 26 
      Encryptedletter = chr(FinalCodedMessage) 
     else: 
      Encryptedletter = Messageencrypt 
     EncryptedMessage = EncryptedMessage + Encryptedletter 
     Keywordcount = Keywordcount + 1 
     if Keywordcount >= Keywordlength: 
      Keywordcount = 0 
     KeywordTwocount = KeywordTwocount + 1 
     if KeywordTwocount >= Keywordlength: 
      KeywordTwocount = 0 
    print(EncryptedMessage) 

ЧтоЧто означает «строковый индекс вне диапазона» в этом шифре Vigenere?

 
KeywordTwoencrypt= KeywordTwo[KeywordTwocount] 
IndexError: string index out of range 

означает? Error

Также как сохранить это зашифрованное сообщение в виде txt-файла? Error

+1

Пришло время узнать о функциях, которые инкапсулируют часть кода вызываемым способом. –

+0

Я не знаю, что это означает, что я новичок в python soooooooo ............ –

+0

, пожалуйста, объясните. –

ответ

0

KeywordTwo[KeywordTwoCount] IndexError: string index out of range означает, что индекс (KeywordTwoCount) больше, чем длина строки вы индексирование для KeywordTwo.

+0

Что такое индексирование –

+0

и как бы я сортировал эту ошибку? –

+0

Чувак читал базовый учебник Python. – poolie

1

if KeywordTwocount >= Keywordlength: должен быть if KeywordTwocount >= KeywordTwolength:

Если есть проблема индекса, то вам следует присмотреться ко всем частям коды, которые имеют дело с этим конкретным индексом инкрементацией/декрементированием.

В этом конкретном случае вы должны видеть, что индекс второго ключевого слова не должен иметь ничего общего с длиной первого ключевого слова. Таким образом, обновление глючит:

if KeywordTwocount >= Keywordlength: 
    KeywordTwocount = 0 

Эта ошибка была бы легко избежать, определив функцию, которая шифрует сообщение с одним ключевым словом:

def vigenere(message, keyword): 
    ... 

И тогда вы можете цепи эти два вместе :

print(vigenere(vigenere(message, keyword1), keyword2)) 

Запись в файл также легко со встроенными функциями: