-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,但稍后您尝试将它们解压缩为两个变量:

for y, vector in matrix:

数字必须匹配。

目前你matrix看起来像[ [4,3,2,6,3,2], [2,1,6,8,9,2], ... ]。python 应该如何解压缩其中一个元素,例如[4,3,2,6,3,2]放入yand vector?应该去哪里?(对于可能的解决方案,请参阅其他答案,它们更快。无论如何我都不明白预期的行为。)

你也不能索引一个字符:

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

之前您将单个字符分配给letter,这里:

for letter in message: 

因为message是一个字符串。letter您可能会混淆名称,因为您最初已经分配了一个字符串:letter = "ABCDEF"可能您想使用两个不同的名称。

append也只接受一个论点。同样,我不知道您期望什么,但我想它应该是codedmessage.append([letter[x], letter[y]])or codedmessage += [letter[x], letter[y]]

我也非常怀疑您是否要使用xin,codedmessage.append(letter[x], letter[y])因为您仅x在另一个独立循环中用作迭代变量。

于 2014-01-12T18:51:11.687 回答
0

的每个元素matrix是一个包含六个项目的列表,因此如果您只在左侧提供两个变量名,Python 不知道如何处理其他四个。

但是,您可以(在 Python 3 中)解压缩到这样的列表中:

>>> a, *b = [1,2,3,4,5,6]
>>> a
1
>>> b
[2, 3, 4, 5, 6]
于 2014-01-12T18:53:11.307 回答