为什么这段几乎相同的代码会产生不同的结果

你好,我对编码非常陌生,正在研究凯撒密码。但是对于这段代码`


def encoder():

user_string=str(input('Enter text to encrypt'))

shift=int(input('Enter number to shift letters by'))

for i in range(len(user_string)):

    char=user_string[i]

    value=ord(char)

    new_value=value+shift

    new_value=chr(new_value)

    print(new_value,end='')

def decoder():

user_string=str(input('Enter text to decrypt'))

shift=int(input('Enter number to shift letters by'))

for i in range(len(user_string)):

    char=user_string[i]

    value=ord(char)

    new_value=value-shift

    new_value=chr(new_value)

    print(new_value,end='')

当我插入像 Hello world 这样的东西时,它会返回正确的结果,但用 # 替换空格。当我将加密结果插入解码器时,它返回完全没有空格的字符串。两者之间的唯一区别应该是使用 newvalue = value + shift 进行编码,然后使用 newvalue = value-shift 进行解密。有人可以帮助我理解为什么要这样做以及如何解决加密中的 # 和解密中没有空格的问题。谢谢。编辑我使用的移位值是 3,确切的字符串是用于加密的 Hello world 和用于解密的相同字符串的编码版本。


德玛西亚99
浏览 96回答 1
1回答

繁星淼淼

这是因为空间也移动了 3。你的程序是绝对正确的。空格的 ASCII 代码是 32,# 的 ASCII 代码是 35。encoder()with Hello world& 3shift 应该结果Khoor#zruogvdecoder()with Khoor#zruogv& 3shift 应该结果Hello world如果您希望空格不移动并显示为空格,可以在 for 循环内放置 if 语句。for i in range(len(user_string)):    char=user_string[i]    if char == ' ':        print(char, end='')        continue    value=ord(char)    new_value=value+shift    new_value=chr(new_value)    print(new_value,end='')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python