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

如何修改ShiftCipher位移密码代码实现字母按指定偏移量向右加密

问题根因

你当前代码实现左移的核心问题在__init__方法的cipher构造逻辑:

  • 计算密文字母索引时用了i - abs(self.shift),相当于每个明文字母向左数shift位取密文,自然是左移效果
  • 多余的abs()调用会导致你传入正、负shift值的效果完全一致,丢失了反向移位的能力

修复方案

直接修改__init__中cipher和decoder的索引计算逻辑,把减法改为加法,移除不必要的abs()即可,修改后的代码如下:

def __init__(self, shift):
        """
        Constructs a ShiftCipher for the specified degree of shift (positive or negative),
        by building a cipher (dictionary mapping from letters to other letters), and 
        a decoder (the inverse of the cipher)
        """
        self.shift = shift
        self.letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
        # 右移逻辑:明文字母索引i + shift后模总长度得到密文索引
        self.cipher = {self.letters[i]: self.letters[(i + self.shift) % len(self.letters)] for i in range(len(self.letters))}
        # 解密是加密的逆操作,索引减shift即可
        self.decoder = {self.letters[(i + self.shift) % len(self.letters)]: self.letters[i] for i in range(len(self.letters))}

效果验证

修改后传入shift=13加密测试文本"I come to bury Caesar, not to praise him.",即可得到你预期的V pBzr GB oHEL PnrFnE, ABG GB CEnvFr uvz输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:04