0

我正在尝试在 python 中编写一个 vigenere 密码加密器。我收到另一个错误...

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'”——有什么帮助吗?

4

1 回答 1

0

首先,您需要更改:

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

至:

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

这似乎是一个错误的输入。

其次,该ord(...)函数返回一个int。您想使用以下方法将其转换回字符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)
于 2014-05-05T20:21:15.910 回答