1

我对 python 很陌生,在让 vigenere 密码程序工作时遇到了一些麻烦。该程序将接收消息和关键字,并允许用户根据给定信息加密或解密消息。我在下面添加了代码。

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def main():
    myMessage = input("Message:")
    myKey = input("Key:")
    myMode = input("Encrypt or decrypt:")

    if myMode == 'encrypt':
        translated = encryptMessage(myKey, myMessage)
    elif myMode == 'decrypt':
        translated = decryptMessage(myKey, myMessage)

    print('%sed message:' % (myMode.title()))
    print(translated)

def encryptMessage(key, message):
    return translateMessage(key, message, 'encrypt')

def decryptMessage(key, message):
    return translateMessage(key, message, 'decrypt')

def translateMessage(key, message, mode):
    translated = []

    keyIndex = 0
    key = key.upper()

    for symbol in message:
        num = LETTERS.find(symbol.upper())
        if num != -1:
            if mode == 'encrypt':
                num += LETTERS.find(key[keyIndex])
            elif mode == 'decrypt':
                num -= LETTERS.find(key[keyIndex])

            num %= len(LETTERS)

            if symbol.isupper():
                translated.append(LETTERS[num])
            elif symbol.islower():
                translated.append(LETTERS[num].lower())

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0
            else:
                translated.append(symbol)
    return "".join(translated)

if __name__ == '__main__':
    main()

当我运行程序时,它会出现:

Message:hello
Key:pizza
Encrypt or decrypt:encrypt
Encrypted message:
whmeklklo

当它加密信息时,它包括原始消息中的字母以及加密的字母。我对如何解决这个问题感到有些困惑。

4

2 回答 2

1

您在新字符串中添加原始字符:

else:
    translated.append(symbol)

如果您删除它,它应该可以工作。

编辑:你使用字符串的方式也有点尴尬,这是一个新版本的翻译,看起来更好一点:

def translateMessage(key, message, mode):
    translated = ""

    keyIndex = 0
    key = key.upper()

    for symbol in message:
        num = LETTERS.find(symbol.upper())
        if num != -1:
            if mode == 'encrypt':
                num += LETTERS.find(key[keyIndex])
            elif mode == 'decrypt':
                num -= LETTERS.find(key[keyIndex])

            num %= len(LETTERS)

            if symbol.isupper():
                translated += LETTERS[num]
            elif symbol.islower():
                translated += LETTERS[num].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0

    return translated
于 2015-06-25T13:42:34.390 回答
0

如果我理解您的要求,那么您可以看到您正在使用以下代码将原始符号添加回翻译后的代码中:

        else:
            translated.append(symbol)
于 2015-06-25T13:53:05.093 回答