我对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
当它加密信息时,它包括来自原始消息的字母以及加密的字母。关于如何解决这个问题,我有点难过。
答案 0 :(得分: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
答案 1 :(得分:0)
如果我理解了您的要求,那么您可以看到您正在使用此代码将原始符号添加回翻译中:
else:
translated.append(symbol)