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

why is this nearly same code producing different results

你好,我是编码的新手,正在研究凯撒密码。但是对于这段代码`

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 之类的东西时,它 returns 得到了正确的结果,但用 # 替换了 space。当我将加密结果插入解码器时,它 returns 字符串根本没有 space。两者之间的唯一区别应该是使用 newvalue = value + shift 进行编码,然后使用 newvalue = value-shift 进行解密。有人可以帮我理解为什么要这样做,以及如何解决加密中 # 和解密中没有 space 的问题。谢谢你。编辑我使用的移位值是 3,确切的字符串是加密的 Hello world 和解密的编码版本。

这是因为space也被移了3。你的程序完全正确。

ASCII code for space is 32 和 # 是 35。

encoder()Hello world & 3 shift 的结果应该是 Khoor#zruogv

decoder()Khoor#zruogv & 3 shift 的结果应该是 Hello world

如果想让space不移位,显示为space,可以在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='')