Python字符串操作-替换函数以创建Caesar密码

Python字符串操作-替换函数以创建Caesar密码,python,Python,我的代码遇到了问题,我怀疑是我使用了替换方法,但我不确定。我想写一个代码,使用caesar密码对变量明文引用的字符串进行加密,移位为1,然后将结果存储在变量密文中;存储它是我的值不正确的地方 plaintext = 'thequickbrownfoxjumpsoverthelazydog' alphabet = 'abcdefghijklmnopqrstuvwxyz' ciphertext = 'thequickbrownfoxjumpsoverthelazydog' for i in ran

我的代码遇到了问题,我怀疑是我使用了替换方法,但我不确定。我想写一个代码,使用caesar密码对变量明文引用的字符串进行加密,移位为1,然后将结果存储在变量密文中;存储它是我的值不正确的地方

plaintext = 'thequickbrownfoxjumpsoverthelazydog'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
ciphertext = 'thequickbrownfoxjumpsoverthelazydog'

for i in range(len(plaintext)):
    j = plaintext[i]
    j_index = alphabet.index(j)
    if j_index + 13 >= 26:
        j_index = (j_index + 13) % 26
    else:
        j_index+=13
    ciphertext = ciphertext.replace(j,alphabet[j_index])
    print(ciphertext[i])
    
print(ciphertext)
当我打印每个字符时,它会给出我想要的结果,但是当我打印整个密文时,有些字母是不同的,值是不正确的。谢谢你的帮助,蒂亚

我希望我的输出是:“gurdhvpxoebjasbkwhzcbirgurynmlqbt”,而不是“turquickbrbwnfbkwumcbirtrunmlqbt”


编辑以修复代码并添加输出。

问题是字符多次被替换,因为我们在整个字符串中替换,而不是在确切的位置

plaintext = 'thequickbrownfoxjumpsoverthelazydog'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
ciphertext = 'thequickbrownfoxjumpsoverthelazydog'
ciphertextfinal = ''
for i in range(len(plaintext)):
    j = plaintext[i]
    j_index = alphabet.index(j)
    if j_index + 13 >= 26:
        j_index = (j_index + 13) % 26
    else:
        j_index+=13
    ciphertext = ciphertext.replace(j,alphabet[j_index])
    ciphertextfinal += ciphertext[i]
    print(ciphertext[i])
    
print(ciphertextfinal)
#prints gurdhvpxoebjasbkwhzcfbiregurynmlqbt

我只是使用了替换的位置,并通过将其合并成变量来生成一个字符串

请输入预期的输出
j=plaintext[I]
您正在引用
plaintext
即使您从未定义过它,我假设这是一个输入错误?假设您的纯文本是“a”。首先是i=0,然后将“a”改为“n”。然后我们i=13,将“n”改回“a”。您的错误是没有区分已经编码的字符和尚未编码的字符。从a点到m点之间的每封信你都会得到错误的答案。非常感谢!现在效果很好。为了进一步澄清,我认为我的代码是在查看明文中每个字母的单独位置,而For循环是在遍历这些单独的字符。你介意进一步解释为什么要多次替换它们吗?你的字符串-abcdef,在循环1之后新字符串:cbcdef(a到c),在循环2之后:cdcddef(b到d),在循环3之后:ededef(c到e),在循环4之后:efefefef(d到f)等等,看看你是否在同一个字符串中进行了更改,它还将取代旧的价值观,这些价值观是好的,但却是错的。