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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:50:29