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

移位解密算法中列表额外迭代导致字符重复移位的问题排查

解决移位解密的重复移位问题

嘿,我来帮你搞定这个移位解密的问题!你的代码现在遇到的核心问题是同一个字符被重复处理了两次,导致结果不符合预期,我来一步步给你拆解原因和解决方案:

问题根源分析

你在遍历字母表的内层循环里,直接修改了mylist[b]的值——当第一次找到匹配的字符(比如A,索引0),把它改成了myalph[c-K](也就是X),但这个内层循环还没结束,后续的循环会再次匹配到刚修改的X,然后又对它执行一次移位操作(X的索引是23,23-3=20,对应U),所以最终得到了U而不是预期的X。

另外,你的代码用嵌套循环找字符位置效率比较低,而且处理负数偏移的时候没有用模运算来优雅地实现循环,其实可以更简洁。

修正后的代码

N, K = [int(s) for s in input().split()]
myres = []
alph = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

for _ in range(N):
    s = input().strip()
    for char in s:
        # 找到当前字符在字母表中的索引
        c = alph.index(char)
        # 计算偏移后的索引,用模26处理负数情况
        new_c = (c - K) % 26
        # 添加解密后的字符到结果列表
        myres.append(alph[new_c])

# 拼接结果并输出
print("".join(myres))

关键改进点

  • 避免重复处理:不再用嵌套循环遍历字母表找匹配,而是直接用alph.index(char)获取字符位置,一次性计算并替换,不会出现修改后再次匹配的问题。
  • 模运算处理循环偏移:用(c - K) % 26来计算新索引,不管c-K是正数还是负数,都能得到0-25之间的有效索引。比如K=3,A的索引0,(0-3)%26=23,对应字母X,完全符合预期。
  • 简化代码结构:去掉了不必要的列表推导式,逻辑更清晰,可读性更强。

测试验证

当你输入:

1 3
A

输出会是X,完全符合预期;如果输入X,输出会是U,这也是正确的解密结果。

内容的提问来源于stack exchange,提问作者Liga Adrian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:19:19