你好,我對(duì)編碼非常陌生,正在研究凱撒密碼。但是對(duì)于這段代碼`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='')當(dāng)我插入像 Hello world 這樣的東西時(shí),它會(huì)返回正確的結(jié)果,但用 # 替換空格。當(dāng)我將加密結(jié)果插入解碼器時(shí),它返回完全沒(méi)有空格的字符串。兩者之間的唯一區(qū)別應(yīng)該是使用 newvalue = value + shift 進(jìn)行編碼,然后使用 newvalue = value-shift 進(jìn)行解密。有人可以幫助我理解為什么要這樣做以及如何解決加密中的 # 和解密中沒(méi)有空格的問(wèn)題。謝謝。編輯我使用的移位值是 3,確切的字符串是用于加密的 Hello world 和用于解密的相同字符串的編碼版本。
1 回答

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
這是因?yàn)榭臻g也移動(dòng)了 3。你的程序是絕對(duì)正確的。
空格的 ASCII 代碼是 32,# 的 ASCII 代碼是 35。
encoder()
with?Hello world
&?3
shift 應(yīng)該結(jié)果Khoor#zruogv
decoder()
with?Khoor#zruogv
&?3
shift 應(yīng)該結(jié)果Hello world
如果您希望空格不移動(dòng)并顯示為空格,可以在 for 循環(huán)內(nèi)放置 if 語(yǔ)句。
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='')
添加回答
舉報(bào)
0/150
提交
取消