ステートメント内のの値はリストの要素の 1 つであり、 に渡された文字列引数の個々の文字であるため、TypeError
例外が発生します。これを修正するには、たまたま元の文字列と同じ長さのリストのすべての可能なインデックスをループします。x
s[x]=ord(s[x])
s
encrypt()
s
def encrypt(s):
lenStr=len(s)
s=list(s) # convert the string to a list
for i in range(lenStr):
s[i]=ord(s[i])
s[i]=chr(s[i])
これにより、エラーが発生することなくコードを実行できます。実装しようとしている暗号化アルゴリズムの説明から、注意すべきことの 1 つは、0 ~ 255 の範囲外の不正な 8 ビット文字値を生成することです。mod 演算子%
を中間結果に適用して値を適切な範囲に保つだけで、この問題を回避できます。これが私が意味することです:
def encrypt(s):
lenStr = len(s)
s = list(s) # convert the string to a list
for i in range(lenStr):
s[i] = chr((ord(s[i]) + lenStr) % 256)
return ''.join(s) # convert list back into a string
同様に、文字列を復号化するときも同じことを行う必要があります。
def decrypt(s):
lenStr = len(s)
s = list(s) # convert the string to a list
for i in range(lenStr):
s[i] = chr((ord(s[i]) - lenStr) % 256)
return ''.join(s) # convert list back into a string
enc = encrypt('Gnomorian')
print('encrypted:', enc)
dec = decrypt(enc)
print('decrypted:', dec)
出力:
encrypted: Pwxvx{rjw
decrypted: Gnomorian
また、値が 0 ~ 255 の範囲にあるすべての文字ord()
が印刷可能であるとは限らないことにも注意してください。そのため、暗号化変換が必要な場合 (暗号化されたバージョンが印刷可能である必要がある場合) は、さらに制限することをお勧めします。