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 を返します。次を使用して、それを char に変換します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 に答える