我正在尝试在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'" - 有什么帮助吗?
答案 0 :(得分:0)
首先 ,您需要更改:
key[i] + ord(key[i])-97
要:
key[i] = ord(key[i])-97
这似乎是一种错误。
第二次 ,ord(...)
函数返回一个int。您想使用chr(...)
将其转换回char:
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)