在Python中将字符串和整数结合用于维吉尼亚密码?
我正在尝试用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)