加解密程序代码调试请求:修复加密/解密文本无输出异常
修复你的加解密程序空输出问题
我来帮你排查这个加解密程序的问题,你的代码现在输出为空主要是变量覆盖、函数逻辑错误和流程顺序混乱这几个核心原因,咱们一步步拆解并修复:
原代码的关键问题
- 变量被重复覆盖,操作选择丢失:你先用
text获取了用户的加密/解密选择,但后面又用同一个变量接收加密消息,导致后续的if text == '1'判断完全失效——此时text已经是用户输入的明文,不是操作选项了。而且不管用户选啥,都会先执行解密消息的输入,逻辑完全混乱。 - 函数内部错误重置变量:
encrypt函数里你重新定义了text = '',直接把传入的参数清空,自然输出为空;decrypt函数更离谱,用了未赋值的空变量message来调用translate,根本没用到传入的密文参数。 - 无用函数占坑:
toList函数里的split()没赋值给变量(split()不会修改原字符串,要接收返回值才有用),而且这个函数从头到尾没被调用,完全多余。
修复后的完整代码
# 定义加解密字符映射表 decrypted_chars = b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " encrypted_chars = b"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM " encrypt_table = bytes.maketrans(decrypted_chars, encrypted_chars) decrypt_table = bytes.maketrans(encrypted_chars, decrypted_chars) def encrypt(plain_text): # 字符串转bytes后使用映射表,处理完再转回字符串 encrypted_bytes = plain_text.encode('utf-8').translate(encrypt_table) return encrypted_bytes.decode('utf-8') def decrypt(cipher_text): decrypted_bytes = cipher_text.encode('utf-8').translate(decrypt_table) return decrypted_bytes.decode('utf-8') def main(): while True: choice = input("请选择操作:\n1. 加密消息\n2. 解密消息\n0. 退出程序\n输入选项数字:") if choice == '0': print("程序已退出") break elif choice == '1': plain_text = input("请输入要加密的消息:") result = encrypt(plain_text) print(f"加密后的消息:{result}\n") elif choice == '2': cipher_text = input("请输入要解密的消息:") result = decrypt(cipher_text) print(f"解密后的消息:{result}\n") else: print("输入无效,请重新选择!\n") if __name__ == "__main__": main()
修复说明
- 流程逻辑梳理:先让用户选择操作,再根据选择获取对应的输入,彻底避免变量覆盖问题
- 函数逻辑修正:加解密函数直接使用传入的参数,不再重置为空,并且改成有返回值的设计,更灵活
- 类型兼容处理:因为
bytes.maketrans生成的映射表只支持bytes类型,所以先把字符串转成bytes处理,再转回字符串输出 - 增加循环交互:用户可以反复操作直到选择退出,不用每次重启程序
内容的提问来源于stack exchange,提问作者oemn
相关产品推荐
相关产品推荐

