在python中组合字符串和Vigenere密码的整数?

时间:2014-05-05 20:08:17

标签: python vigenere

我正在尝试在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'" - 有什么帮助吗?

1 个答案:

答案 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)