在Python中将字符串和整数结合用于维吉尼亚密码?

0 投票
1 回答
636 浏览
提问于 2025-04-18 05:28

我正在尝试用Python写一个维杰尼尔密码加密器。但是我遇到了一个错误...

def vigenere(string,key):
for i in range(len(key)):
    if key[i].isupper():
        tempList = list(key)
        tempList[i] = chr(ord(key[i])-65)
        key = "".join(tempList)
    elif key[i].islower():
        tempList = list(key)
        tempList[i] = chr(ord(key[i])-97)
        key = "".join(tempList)
k = 0
newstring = ''
for i in string:
    if i.isupper():
        newstring = newstring + ((ord(i)-65)+(key[k % len(key)]))%26 + 65
    elif i.islower():
        newstring = newstring + ((ord(i)-97)+(key[k % len(key)]))%26 + 97
    k = k + 1
return newstring

错误信息是:“不支持的操作数类型:'int'和'str'”——有没有人能帮帮我?

1 个回答

0

首先,你需要把这个改成:

key[i] + ord(key[i])-97

改成:

key[i] = ord(key[i])-97

看起来这是个打错了的地方。

其次ord(...)这个函数会返回一个整数。你想把它再转换回字符,可以用chr(...)

key[i] = chr(ord(key[i])-97)

最后,在Python中,字符串是不可变的。这意味着你不能直接改变字符串中的某个字符。这里有个简单的方法可以做到:

if key[i].isupper():
    tempList = list(key)
    tempList[i] = chr(ord(key[i])-65)
    key = "".join(tempList)
elif key[i].islower():
    tempList = list(key)
    tempList[i] = chr(ord(key[i])-97)
    key = "".join(tempList)

撰写回答