2014-01-13 54 views
0

进出口试图附加使用使得来自用户的输入将给出一个6×6密文网格,现在用户输入的密文(16个字符长)和目的是把它变成一张表格DECBBEFEAACDCFEC将使表如下追加一个列表,以4×4矩阵的密码

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个字符,但并非所有的人都在一次和格式祝

回答

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作为一个新的空数组,然后追加该集来...所以它永远只能有这一个行......在结束了最后一排...

+0

对不起,我不是很熟悉的功能,你建议 – Student

+0

这两个方法创建二维列表你的字符串:那么列表继续

输出之前追加到网格。 ..然后我添加了一些代码,将其在其一侧 –

+0

拉链是非常有用的功能,良好的告知自己http://docs.python.org/2/library/functions.html#zip – Raiyan

0

我喜欢Joran的答案,但让你在问题中指定的命令列表...

  • 第一个字母是Col1中,ROW1
  • 第二个字母在Col1中,行2
  • 等。

...我结束了与此:

代码

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']] 
+0

为我在范围内(4): print(grid [i]) – Student

+0

上面我用这个来给出我需要的格式,它基本上是循环次,把每个片段添加到一个新的线上,给出4x4矩阵想要的,Ii不知道这是否是更好的方法它? – Student