你好,我對編碼非常陌生,正在研究凱撒密碼。但是對于這段代碼`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 和用于解密的相同字符串的編碼版本。
1 回答

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
這是因為空間也移動了 3。你的程序是絕對正確的。
空格的 ASCII 代碼是 32,# 的 ASCII 代碼是 35。
encoder()
with?Hello world
&?3
shift 應該結果Khoor#zruogv
decoder()
with?Khoor#zruogv
&?3
shift 應該結果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='')
添加回答
舉報
0/150
提交
取消