-4

Writing a vigenere cipher in python and I've got completely lost in it, anyone fancy giving me a hand and suggesting things that could be improved/make it work correctly? Currently I'm getting all sorts of errors

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))
4

1 に答える 1

2

TypeError: unsupported operand type(s) for +=: 'int' and 'builtin_function_or_method'22 行目のコードを参照しますnumber+=letters.find

numberは int (数値) で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)。という名前のリストに項目を追加しようとしていますtranslatedtranslated、その時点では存在しません (translate関数の外でさらに下に定義しますが、その場合でも、グローバル変数ではなくローカル変数を使用する必要があります)。translated = []関数の先頭に追加しますtranslate

于 2014-12-11T09:57:04.597 に答える