附加列表以生成4x4矩阵密码

时间:2014-01-13 01:10:41

标签: python

我试图使用append以便来自用户的输入将给出6x6密文文本网格,现在用户输入密文(16个字符长)并且目的是使其成为表格,例如DECBBEFEAACDCFEC将制作如下表格

  A   K   M   R
['D','B','A','C',]
['E','B','A','F',]
['C','F','C','E',]
['B','E','D','C',]

这是我的源代码试图这样做....

def decodecipher():
global decode
decode=input("Please enter your cipher text\n")
grid1 = []
keyword="AKMR"
for i in range(0, len(decode), 4):
    grid1.append(decode[i:i+4])
for i in range(0,4,1):
    print(grid1[i])
print("  A    K    M    R")
for i in range(0,4,1):
    grid2 = ([])
    grid2.append(grid1[i])
for i in range(len(grid2)):
    print(grid2[i])

所以我先把它分成4个,所以它给出了4组不同的列表,然后我试图进一步拆分它们,然后将它们作为一列读取,并像上面一样粘贴它。但这是我的输出..

Would you like to (E)Encode , (G)Generate final cipher or (D)Decode a message?
******************************************************************************
D
Please enter your cipher text
DECBBEFEAACDCFEC

DECB
BEFE
AACD
CFEC

  A    K    M    R
CFEC
********************
***END OF PROGRAM***
********************

我无法理解为什么它只会打印出最后4个字符并且不会将其显示为向下列,我可以更改范围,以便打印出另外一组4个字符,但不能同时打印所有字符我希望的格式

2 个答案:

答案 0 :(得分:1)

我个人最喜欢的方式是

my_input = "DECBBEFEAACDCFEC"
my_grid = zip(*[iter(my_input)]*int(len(my_input)**0.5))

备用且可能更易阅读的版本

my_grid = [my_input[i:i+4] for i in range(0,len(my_input),4)]

如果你想转置网格(将它们转向两侧)

transposed_grid = list(zip(*my_grid))

为什么你的for循环range(0,4,1)每次都没有工作(可以改写为range(4))你正在重新创建grid2作为一个新的空数组,然后将该数组附加到它。 ..所以它只有一行......最后是最后一行...

答案 1 :(得分:0)

我喜欢Joran的回答,但要按照你在问题中指定的顺序排列...

  • 第一个字母是Col1,Row1
  • 第二个字母在Col1,Row2
  • 等。

......我最终得到了这个:

<强>代码

decode="DECBBEFEAACDCFEC"
grid = []
for i in range(4):
    row = [j for j in decode[i::4]]
    grid.append(row)

在这里,我们循环0到3 ......然后我们使用列表推导来获取每个第4个字符并添加到列表中。然后在继续

之前将该列表附加到网格中

<强>输出

print grid
[['D', 'B', 'A', 'C'], ['E', 'E', 'A', 'F'], ['C', 'F', 'C', 'E'], ['B', 'E', 'D', 'C']]