-1

Vigenere Cipher のコードは次のとおりです。

BASE = ord("A") #65
print("Welcome to the keyword encrypter and decrypter!")
msg = ("FUN")
keyword = ("RUN")
list_out = []

for letter in msg:
    a = (ord(letter) - (BASE)) #67 - 65 = 2

for character in keyword:
    b = (ord(character) - (BASE)) #72 - 65 = 7
    list_out.append(BASE + a + b) #65 + 2 + 7 = 74
("".join(str(list_out)))

メッセージの各文字とキーワードを、BASEである65から個別に取り除こうとしています。最後に、a と b の結果に BASE を追加します。新しい手紙をリストに追加して印刷したい。誰かが助けてくれれば、それは大歓迎です。

上記で、プログラムがどのように機能するかを説明しましたが、問題が何であるかはわかりません。私のコードの主な問題は、何も印刷されていないことです。

4

1 に答える 1

1

str(list) ではなく、リストで join を呼び出してコンテンツを結合します。リスト自体を str にキャストし、実際のリストではなく、その上で join を呼び出します。

intあなたのケースでは、それぞれを aにマップする必要がありstrます。

"".join(map(str,list_out))

これはに相当します"".join([str(x) for x in list_out ])

ord を char に変更する場合は、次のようにマップできますchr

"".join(map(chr,(list_out)))

これはすべて、単一の理解で実行できます。

print("".join([chr(BASE + a + (ord(ch) - (BASE))) for ch in keyword)])

また、前のループで最後の値のみを使用しているのは、必要な場合やネストされたループaに応じて、反復ごとに新しい値を割り当てているためです。+=

for letter in msg:
    # will be equal to  (ord(N) - (BASE))
    a = (ord(letter) - (BASE)) #67 - 65 = 2
于 2015-03-01T12:41:46.080 に答える