【问题标题】:Python cipher program - Too many membersPython密码程序 - 成员太多
【发布时间】:2014-01-31 11:05:54
【问题描述】:

我目前正在尝试制作一个密码程序,这是我的代码;

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: too many values to unpack (预计 2 个)

谁能解释一下为什么会发生这种情况并给出解决方案?

谢谢

【问题讨论】:

  • 不相关,但对于有抱负的 Pythonista 来说很重要:您可以简单地使用 for item in matrix: print(item),而不是 for i in range(len(matrix)): print(matrix[i])。 Python 不是 C :)

标签: python list matrix encryption members


【解决方案1】:
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 是一个字符串。您可能会混淆名称,因为您最初已经为 letter 分配了一个字符串:letter = "ABCDEF" 可能您想使用两个不同的名称。

append 也只接受一个参数。再说一次,我不知道你期待什么,但我想应该是 codedmessage.append([letter[x], letter[y]])codedmessage += [letter[x], letter[y]]

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

【讨论】:

    【解决方案2】:

    matrix 的每个元素都是六个项的列表,所以如果你只在左侧提供两个变量名,Python 不知道其他四个怎么办。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多