2014-12-11 2 views
-3

Написал шифр vigenere в python, и я полностью потерялся в нем, кто-нибудь прикидывает мне руку и предлагает вещи, которые можно улучшить/заставить работать правильно? В настоящее время я получаю все виды ошибокШифр ​​Vigenere в python

letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
print ("This program will take a keyword, and use it to encrypt plaintext.") 
def keyword(): 
    print ("Please enter your keyword") 
    keyword = input() 
    return keyword 

def plaintext(): 
    print ("Please enter your plaintext") 
    plaintext = input() 
    return plaintext 

def translate (keyword, plaintext): 
    keywordtwo=0 
    number=0 
    keyword=keyword.upper() 
    length = len(plaintext) 
    lengthtwo=len(keyword) 
    for symbol in plaintext: 
     number=letters.find(symbol.upper()) 
     if number!=-1: 
      number+=letters.find 
     num%=len(letters) 
     if symbol.isupper(): 
      translated.append(letters[number]) 
     elif symbol.islower(): 
      translated.append(letters[number].lower()) 
     if keywordtwo==len(keyword): 
      keywordtwo=0 
    else: 
     translated.append(symbol) 
    return ' '.join(translated) 




keyword = keyword() 
plaintext = plaintext() 
translated = translate(keyword, plaintext) 

print ("Your new text is:") 
print (translate(keyword, plaintext)) 
+1

Какие ошибки вы получаете? –

+0

TypeError: неподдерживаемый тип операндов для + =: 'int' и 'builtin_function_or_method' является самым последним из них: @PieterWitvoet – bleh

+1

number + = letters.find не кажется правильным, вам нужно передать аргумент, чтобы найти –

ответ

2

TypeError: unsupported operand type(s) for +=: 'int' and 'builtin_function_or_method' относится к коду на строке 22: number+=letters.find.

number is int (number) и letters.find - метод (встроенный метод), и вы пытаетесь добавить их вместе. Это не сработает. То, что вы, вероятно, собирались сделать, это назвать эту функцию, которая выглядит как number += letters.find(...), где ... означает любое письмо, которое вы хотите посмотреть.

Следующая ошибка, которую вы получите, будет примерно UnboundLocalError: local variable 'num' referenced before assignment. Это в строке 23: number%=len(letters). num не существует, я предполагаю, что вы имели в виду number вместо этого.

Затем вы получите NameError: global name 'translated' is not defined, что относится к строке 31: translated.append(symbol). Вы пытаетесь добавить элемент в список с именем translated, но не существует в этой точке (вы определяете его ниже, вне вашей функции translate, но даже тогда вы должны использовать локальную переменную, а не глобальную). Добавьте translated = [] в начало вашей функции translate.

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