在编写凯撒密码练习时,输入的秘密消息应该输出为VhfuhwqPhvvdjh,但它输出为VhfuhwqPhvvdjh.&l



我当前的代码是这样的:

message = input("Message to be encrypted: ")
shift = int(input("Number to shift by: "))
def encrypt(message,shift):
encryption = ""
for i in range(len(message)):
char = message[i]

if (char.isupper()):
encryption += chr((ord(char) + shift-65) % 26 + 65) 

else:
encryption += chr((ord(char) + shift - 97) % 26 + 97)

return encryption
print("Encrypted Text:",encrypt(message,shift))

我不太确定我的空白字符是q而不是正常的";在一个字符串中。这是我头几周的编码,所以如果我忽略了一个简单的错误,我道歉。

要得到预期的结果,您应该在其他条件之前添加这个条件:

if char == " ":
encryption += " "
continue

您没有得到所需的输出,因为当您在输入字符串中获得空格并传递给char变量时,空格不是大写字母,因此您的代码在else语句中正确。虽然它适用于字母,但不适用于其他特殊字符。因此,正如你的问题标题所描述的那样,如果你希望保持单词之间的空格,你只需在加密的句子中添加空格。

然而,我的第一个建议只适用于空格。如果您希望保留其他特殊字符(例如%,$,#,*等),您应该使用:

if char.isalnum() == False:
encryption += char
continue

最新更新