如何解决Python中的Caesar代码问题

问题描述 投票:2回答:1

我正在尝试创建一个简单的Caesar Code函数,该函数必须解密输入中给定的字符串。

[明文= 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]

已加密= D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

这是我给DECIPHER的代码:

def deciph(s):
    b='abcdefghijklmnopqrstuvwxyz'
    a='defghijklmnopqrstuvwxyzabc'
    for i in s:
        for j in range(len(a)):
            if i==a[j]:
                s=s.replace(i,b[j])
    return s

此代码几乎总是可以正常工作,例如:

deciph('vxq') --> 'sun'

deciph('ohwwhu') --> 'letter'

问题是这种情况的问题:

deciph('sp')--> 'mm'  #should be 'pm'

deciph('ol')-->'ii'  #should be 'li'

因此,解密后的第一个字母等于加密的第二个字母。

如何修改我的代码?错误在哪里?我知道互联网上还有许多其他方法可以执行相同的练习,但是现在我有兴趣了解MY代码的错误。

python python-3.x string caesar-cipher
1个回答
1
投票

让我们以您的deciph('sp')为例。问题是,当您执行s=s.replace(i,b[j])时,首先将's'的所有实例替换为'p',得到s = 'pp',然后在第二遍,将'p'的所有实例替换为'm',给你s = 'mm'。这可以通过以下方法纠正:保留一个新的初始变量rv = '',然后为每个字母使用rv+=b[j]而不是更改s。然后最后,只需返回rv

© www.soinside.com 2019 - 2024. All rights reserved.