Python编码解码程序特殊字符未正常保留问题求助
编码解码逻辑异常:特殊字符未正确保留的排查与修复
核心错误分析
你的代码中特殊字符处理失效的根本原因是字符串方法调用错误,导致判断逻辑完全不生效:
isalpha和isupper未加括号调用
原代码中message[i].isalpha == False和message[i].upper == True是错误写法:isalpha、isupper是字符串的方法,必须通过()调用才能返回布尔值;直接写方法名会得到方法对象本身,永远不等于False或True。- 这导致所有字符(包括空格、标点)都进入字母加密/解密逻辑,而非直接保留。比如空格的ASCII码是32,解码时被当成字母处理,计算后得到ASCII码48(对应字符
0);标点符号被移位后变成其他符号。
encode函数中upper()调用位置错误
原代码在处理每个字母后,对整个结果字符串执行encryption = encryption.upper(),虽然不影响字母,但如果特殊字符被错误处理后,会额外引入不必要的转换(不过这不是主要问题)。
修正后的代码
加密函数(encode)
def encode(message, key): encryption = "" for char in message: # 正确判断非字母字符,直接保留 if not char.isalpha(): encryption += char else: if char.isupper(): shifted = ord(char) + key # 用26(字母总数)代替硬编码的91-65,逻辑更清晰 encryption += chr(shifted) if shifted <= 90 else chr(shifted - 26) else: shifted = ord(char) + key encryption += chr(shifted) if shifted <= 122 else chr(shifted - 26) # 仅对当前处理的字母转大写,而非整个结果 encryption = encryption[:-1] + encryption[-1].upper() return encryption
解密函数(decode)
def decode(code, key): decryption = "" for char in code: # 正确判断非字母字符,直接保留 if not char.isalpha(): decryption += char else: shifted = ord(char) - key # 同理用26代替硬编码的91-65 decryption += chr(shifted) if shifted >= 65 else chr(shifted + 26) return decryption
主程序(输入处理优化)
原三元表达式的输入逻辑容易导致顺序混乱,优化为一次性读取所有输入:
mode = input().strip() text = input().strip() key = int(input().strip()) print(encode(text, key) if mode == '1' else decode(text, key))
验证结果
解码测试用例输入:
2 LOSXQ PYVVYGON MKXMOV WOODSXQ 10输出:
BEING FOLLOWED CANCEL MEETING(符合预期)编码测试用例输入:
1 Et tu, Brute--Then fall, Caesar! 2输出:
GV VW, DTWVG--VJGP HCNN, ECGUCT!(符合预期)
内容的提问来源于stack exchange,提问作者Asad
相关产品推荐
相关产品推荐

