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

时间:2020-10-05 04:41:14

标签: python caesar-cipher

你好,我对编码非常陌生,正在研究Caesar密码。但是对于此代码`

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用于解密。有人可以帮助我理解为什么这样做,以及如何解决加密中的#问题以及解密中没有空格的问题。谢谢。编辑我使用的shift值为3,确切的字符串是Hello world进行加密,而其编码版本用于解密。

1 个答案:

答案 0 :(得分:2)

这是因为空间也偏移了3。您的程序是绝对正确的。

ASCII code for space is 32和#均为35。

encoder()Hello world3会导致Khoor#zruogv

decoder()Khoor#zruogv3会导致Hello world

如果您希望空间不移位并显示为空格,则可以在if循环中放置一个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='')
相关问题