2014-01-12 36 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]