微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

你好,我对编码非常陌生,正在研究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进行加密,而其编码版本用于解密。

解决方法

这是因为空间也偏移了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='')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。