You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.")

额外优化说明

  1. 新增eord = input("").strip().upper(),将输入统一转为大写,减少了重复的小写分支判断,让代码更简洁。
  2. 添加无效输入提示分支,处理用户输入错误的情况。

测试修改后的程序,输入Hello world!偏移3位,会得到正确的Khoor zruog!,空格和感叹号都被保留下来。

内容的提问来源于stack exchange,提问作者Astolfo46290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:07:52