Python实现任意字符串字符+3并循环回绕的方法求助
解决字符递增3位并循环的问题(Blackhat利雅得挑战题)
嘿,我来帮你搞定这个Blackhat的挑战题!你想用ord()和ASCII来实现每个字符递增3位,还要处理循环(比如xyzab变成abcde)对吧?其实核心就是处理字符溢出循环的问题,我给你拆解一下思路和代码:
核心思路
字母的ASCII范围是固定的:
- 小写字母:
a对应97,z对应122 - 大写字母:
A对应65,Z对应90
要实现递增3位后循环,关键是把字母转换为0-25的索引(比如a=0,b=1…z=25),加3后对26取模(因为一共26个字母),再转换回ASCII字符,这样就能自动处理溢出循环了。
完整代码实现
def shift_chars(input_str): shifted_result = [] for char in input_str: if char.islower(): # 处理小写字母的偏移和循环 base = ord('a') shifted_index = (ord(char) - base + 3) % 26 shifted_result.append(chr(base + shifted_index)) elif char.isupper(): # 处理大写字母的偏移和循环 base = ord('A') shifted_index = (ord(char) - base + 3) % 26 shifted_result.append(chr(base + shifted_index)) else: # 非字母字符保持原样,可根据需求修改逻辑 shifted_result.append(char) return ''.join(shifted_result) # 测试你的案例 print(shift_chars("abc")) # 输出: def print(shift_chars("xyzab")) # 输出: abcde print(shift_chars("XYZAB")) # 输出: ABCDE print(shift_chars("Test123!")) # 输出: Whvw123!
关键代码解释
拿小写字母举例:
ord(char) - ord('a'):把字符转换成0-25的索引(比如x是23)+3:实现递增3位(23+3=26)%26:取模26让索引循环(26%26=0,对应a)+ ord('a'):把索引转换回ASCII字符(0+97=97,即a)
这样不管输入的字母在什么位置,都能正确实现递增3位后的循环效果。如果题目只需要处理小写字母,直接去掉大写字母的判断逻辑就行。
内容的提问来源于stack exchange,提问作者Kongming
相关产品推荐
相关产品推荐

