代码之家  ›  专栏  ›  技术社区  ›  zoid_

如何将列表中的一个项目更改为另一个列表中的另一个项目?

  •  0
  • zoid_  · 技术社区  · 2 年前

    基本上我一直在尝试制作一个凯撒密码类型的程序,

    caesar=[
    "x",
    "y",
    "z",
    "a",
    "b",
    "c",
    "d",
    "e",
    "f",
    "g",
    "h",
    "i",
    "j",
    "k",
    "l",
    "m",
    "n",
    "o",
    "p",
    "q",
    "r",
    "s",
    "t",
    "u",
    "v",
    "w"
    ]
    tempword=input('What would you like to encrypt? ')
    list(tempword)
    checklet=0
    caesarlet=caesar[checklet]
    for x in range(len(tempword)):
        caeserlet=caesar[checklet]
        tempword[checklet]=caesarlet
        checklet=checklet+1
    str(tempword)
    print('Done encrypting, your word is: ',tempword)
    

    但这一行似乎总是有一个错误:

    tempword[checklet]=caesarlet
    

    下面是输出的错误:

    Traceback (most recent call last):
          File "c:\Users\waisinz\Documents\python stuff\caesarcipher.py", line 35, in <module>
            tempword[checklet]=caesarlet
        TypeError: 'str' object does not support item assignment
    

    我已经在网站上找到了一些解决方法,但我那弱小的大脑太光滑了,无法理解其中的任何一个。有谁知道一个简单的解决方法吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   KetZoomer Gael Ramirez    2 年前

    您正在将字符串转换为列表,但没有重新分配它。您应该执行以下操作:

    tempword = list(tempword)
    

    有一种更好的方法可以使用 ord chr . 代码:

    word = input("What would you like to encrypt? ")
    word = list(word)
    for index, letter in enumerate(word):
        if ord(letter) - 3 < 97:
            word[index] = chr(122 + (ord(letter) - 2 - 97))
        else:
            word[index] = chr(ord(letter) - 3)
    print(f"Done encrypting, your word is: {''.join(word)}")