Python凯撒密码程序问题:加解密丢失空格与符号,求修复方案
凯撒密码程序空格与符号丢失问题修复方案
问题原因
你的代码里的encrypt函数仅对大小写字母进行偏移处理,遇到空格、标点等非字母字符时,没有将它们添加到最终的加密/解密结果中,导致这些字符直接丢失。
修复步骤
在encrypt函数的循环逻辑中添加else分支,将非字母字符原样保留并追加到结果字符串里,不需要做任何偏移操作。
修改后的完整代码
run = True print("WELCOME TO THE C.C.E.D.P. (CAESAR CIPHER ENCRYPTION AND DECRYPTION PROGRAM)") print("") while run == True: def encrypt(message, shift): encryption = "" for character in message: if character.isupper(): character_letter = ord(character) - ord("A") new_letter = (character_letter + shift) % 26 new_unicode = new_letter + ord("A") new_character = chr(new_unicode) encryption += new_character elif character.islower(): character_letter = ord(character) - ord("a") new_letter = (character_letter + shift) % 26 new_unicode = new_letter + ord("a") new_character = chr(new_unicode) encryption += new_character # 新增分支:原样保留非字母字符 else: encryption += character return encryption print("ENTER [E] TO ENCRYPT A MESSAGE") print("ENTER [D] TO DECRPYT A MESSAGE") print("ENTER [Q] TO EXIT THE C.C.E.D.P.") eord = input("").strip().upper() # 优化:统一转大写,减少重复分支 if eord == "E": print("------------------------------") shift = int(input("ENTER SHIFT KEY: ")) print("------------------------------") message = input("ENTER MESSAGE: ") print("----------------------------------------------------------------------") print("INSERTED TEXT:", message) print("------------------------------") print("ENCRYPTED TEXT:", encrypt(message, shift)) print("------------------------------") elif eord == "D": print("------------------------------") str_in = input("ENTER MESSAGE: ") print("----------------------------------------------------------------------") print("POSSIBLE DECIPHERED MESSAGES. ") shift_counter = 27 for shift in range(26): shift_counter -= 1 str_out = encrypt(str_in, shift) print("------------------------------") print(shift_counter, str_out) print("------------------------------") elif eord == "Q": quit() else: print("Invalid input! Please enter E, D, or Q.")
额外优化说明
- 新增
eord = input("").strip().upper(),将输入统一转为大写,减少了重复的小写分支判断,让代码更简洁。 - 添加无效输入提示分支,处理用户输入错误的情况。
测试修改后的程序,输入Hello world!偏移3位,会得到正确的Khoor zruog!,空格和感叹号都被保留下来。
内容的提问来源于stack exchange,提问作者Astolfo46290
相关产品推荐
相关产品推荐

