【发布时间】:2016-01-14 21:47:42
【问题描述】:
我正在尝试制作 Vigenère Cipher,但我似乎无法找到一种方法来实现在输入消息然后打印最终结果时忽略输入空格的功能,例如:我输入起始消息:“ python 计算”然后我输入密钥:“堆栈”如果程序忽略原始消息中的空格,我希望得到:“isukzg wppannjqr”,但我得到:“isukzgwppannjqr”。任何人都知道我该如何解决这个问题。我考虑过使用 ords 但我还没有找到实现它的方法。代码如下:
def translateMessage(key, message, mode):
translated = ""
keyIndex = 0
key = key.upper()
for symbol in message:
xyz = alphabet.find(symbol.upper())
if xyz != -1:
if mode == 'encrypt' or 'e':
xyz += alphabet.find(key[keyIndex]) + 1
elif mode == 'decrypt' or 'd':
xyz -= alphabet.find(key[keyIndex]) + 1
xyz %= len(alphabet)
if symbol.isupper():
translated += alphabet[xyz]
elif symbol.islower():
translated += alphabet[xyz].lower()
keyIndex += 1
if keyIndex == len(key):
keyIndex = 0
return translated
if __name__ == '__main__':
fetch_user_inputs()
【问题讨论】:
-
您明确忽略了在
alphabet(xyz = alphabet.find(symbol.upper())、if xyz != -1:)中找不到的所有符号,其中包括忽略空格。如果您忽略将其附加到输出中,为什么会期望在输出中有一个空格? -
那我怎么只允许空格呢?我会使用 x.isspace() 吗?
-
mode == 'decrypt' or 'd'应该是mode == 'decrypt' or mode == 'd'或mode in ['decrypt', 'd']。也可以考虑'decrypt'.startswith(mode)。 -
@MadPhysicist 我试过这些,但我得到了一个语法错误。在测试这些时,我还注意到解密与加密相同。我不确定为什么这不起作用,因为我在解密 elif 之后有
xyz -=。 -
我无法相信语法错误出现在 mutt 建议中。虽然您当前的语法是合法的,但它根本不像您看起来那样做。