Rot13函数编码超过122时转换失效问题排查问询
修复Rot13字符转换函数的问题
原代码的核心问题
原函数处理超出z(ASCII 122)的字符时,直接用a - 122得到的是ASCII控制字符,没有回到小写字母的起始位置(a,ASCII 97)。此外,原函数仅处理小写字母、未保留转换结果仅打印中间过程,也未考虑大写字母的情况。
解决方案代码
以下是修正后的通用字符偏移函数(支持任意偏移量,自然适配Rot13的13偏移需求):
def rotate_word(line, num): result = [] for char in line: if char.islower(): # 小写字母循环偏移:基于a(97)的位置计算 base = ord('a') shifted_pos = (ord(char) - base + num) % 26 result.append(chr(base + shifted_pos)) elif char.isupper(): # 大写字母循环偏移:基于A(65)的位置计算 base = ord('A') shifted_pos = (ord(char) - base + num) % 26 result.append(chr(base + shifted_pos)) else: # 非字母字符直接保留 result.append(char) return ''.join(result) # 测试Rot13场景 print(rotate_word("hello", 13)) # 输出 uryyb print(rotate_word("r", 13)) # 输出 e print(rotate_word("HELLO", 13)) # 输出 URYYB
代码说明
- 字母范围循环:通过
(当前字符相对起始位置 + 偏移量) % 26实现循环,确保偏移后始终落在对应字母区间内(小写a-z、大写A-Z)。 - 结果收集:用列表存储转换后的字符,最后拼接成字符串返回,方便后续使用而非仅打印过程。
- 兼容非字母:遇到数字、符号等非字母字符时直接保留,不做转换。
内容的提问来源于stack exchange,提问作者Mahir Hasan
相关产品推荐
相关产品推荐

