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

凯撒密码实现求助:rotate_text函数无法通过隐藏测试

排查你的简单替换密码代码问题

我来帮你分析下代码里导致隐藏测试失败的几个关键问题:

1. 偏移量的模运算处理不完整

你的代码只在int1 == len(loL)时才做取模,但实际上任何大于26或者小于0的偏移量都需要取模,比如偏移30(等价于偏移4)、偏移-1(等价于偏移25)。如果不处理,当偏移量过大时会出现list index out of range错误,偏移负数时会直接触发索引异常。

2. 索引越界问题

当原字母的索引加上偏移量超过25时(比如字母Z,索引25,偏移5的话25+5=30),直接访问loL[loLindex + int1]会超出列表的索引范围(列表只有0-25的索引),这时候需要用取模运算来循环回到字母表开头。

3. 未处理小写字母

你的代码只定义了大写字母表,但如果测试用例里包含小写字母(比如dog),这些字符会被直接忽略,导致输出缺失字符,不符合加密要求。

4. 未处理非字母非空格的字符

如果明文里有数字、符号(比如DOG123!),这些字符在你的代码里不会被加入结果列表,导致输出长度和原文本不一致,隐藏测试大概率包含这类用例。


修复后的代码

def rotate_text(text, n):
    # 定义大小写字母表
    upper_alpha = ['A','B','C','D','E','F','G','H','I','J','K',
                   'L','M','N','O','P','Q','R','S','T','U','V',
                   'W','X','Y','Z']
    lower_alpha = [c.lower() for c in upper_alpha]
    alpha_length = len(upper_alpha)
    
    # 先对偏移量做模运算,处理正负和超过26的情况
    n = n % alpha_length
    result = []
    
    for char in text:
        if char in upper_alpha:
            idx = upper_alpha.index(char)
            result.append(upper_alpha[(idx + n) % alpha_length])
        elif char in lower_alpha:
            idx = lower_alpha.index(char)
            result.append(lower_alpha[(idx + n) % alpha_length])
        else:
            # 非字母字符(包括空格、数字、符号)直接保留
            result.append(char)
    
    return ''.join(result)

修复说明

  • 新增了小写字母表,支持大小写字母的加密
  • 对偏移量n先做模运算,确保它始终在0-25之间
  • 对每个字符的新索引用(idx + n) % alpha_length计算,彻底避免索引越界
  • 所有非字母字符(空格、数字、符号等)都直接保留,保证输出长度和原文本一致

这样修改后,应该能通过所有测试用例了。

内容的提问来源于stack exchange,提问作者Law Suit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:35