2014-01-12 34 views
-1

我目前正在尝试做一个密码程序,这里是我的代码;Python密码程序 - 太多成员

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]) 

但是,当我编译这个,我得到的错误;

for y, vector in matrix: ValueError: too many values to unpack (expected 2)

任何人都可以提供一些线索这光,为什么它正在发生,给一个解决方案吗?

感谢

+1

无关的,但重要的是要知道一个有抱负的Pythonista:取代'为我的range(LEN(矩阵) ):print(matrix [i])',你可以简单地在'matrix:print(item)'中做'item。 Python不是C :) –

回答

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]分成yvector?什么应该去哪里? (可能的解决办法看到其他的答案,他们速度更快,我不明白反正是预期的行为。)

你也不能索引字符:

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

以前你指定一个字符letter,在这里:

for letter in message: 

因为message是一个字符串。您可能会混淆名称,因为您最初已将字符串分配给letterletter = "ABCDEF"可能您希望使用两个不同的名称。

append也只有一个参数。再次我不知道你的期望,但我想它应该是codedmessage.append([letter[x], letter[y]])codedmessage += [letter[x], letter[y]]

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

1

matrix每个元素的项目的列表,所以如果你只在左侧提供变量名,Python不知道如何与其他四个做。

然而,你可以(在Python 3)解压缩回像这样的列表:

>>> a, *b = [1,2,3,4,5,6] 
>>> a 
1 
>>> b 
[2, 3, 4, 5, 6]