-1

現在、暗号プログラムを作成しようとしています。これが私のコードです。

import string
import random

matrix = []
codedmessage = []
letter = "ABCDEF"

message = input("Enter message to be encoded:\n").upper().replace(' ', '')
print ('---MESSAGE---\n', message)

newlist = list(string.ascii_uppercase + string.digits)
random.shuffle(newlist)

print ('---MATRIX---')

for x in range(0,len(newlist),6):
    matrix.append(list(newlist[x:x+6]))

for letter in message: 
   for y, vector in matrix: 
      for s, member in vector: 
          if letter == member:
            codedmessage.append(letter[x], letter[y])

for i in range(len(matrix)):
    print(matrix[i])

ただし、これをコンパイルするとエラーが発生します。

y の場合、行列のベクトル: ValueError: アンパックする値が多すぎます (予想される 2)

なぜそれが起こっているのか、解決策を提供できる人はいますか?

ありがとう

4

2 に答える 2

2
matrix.append(list(newlist[x:x+6]))

に 6 つの要素リストを追加しますがmatrix、後でそれらを 2 つの変数にアンパックしようとします。

for y, vector in matrix:

数字が一致している必要があります。

現在、あなたは のようにmatrix見えます[ [4,3,2,6,3,2], [2,1,6,8,9,2], ... ][4,3,2,6,3,2]python は、要素の 1 つを、たとえばyandにどのようにアンパックすることになっていvectorますか? 何をどこに行けばいいですか?(可能な解決策については、他の回答を参照してください。それらはより高速でした。とにかく、どのような動作が予想されるかわかりません。)

また、文字にインデックスを付けることはできません:

codedmessage.append(letter[x], letter[y])

以前に に単一の文字を割り当てましたletter

for letter in message: 

は文字列だからmessageです。letterすでに最初に文字列を割り当てているため、名前を混同する可能性があります。letter = "ABCDEF"おそらく、2 つの異なる名前を使用したいでしょう。

appendも引数を 1 つだけとります。繰り返しますが、あなたが何を期待しているのかわかりませんが、またはのいずれかである必要があると思いcodedmessage.append([letter[x], letter[y]])ますcodedmessage += [letter[x], letter[y]]

また、反復変数として別の独立したループでのみ使用したためx、 inを使用することも非常に疑わしいです。codedmessage.append(letter[x], letter[y])x

于 2014-01-12T18:51:11.687 に答える