我试图使用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个字符,但不能同时打印所有字符我希望的格式
答案 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的回答,但要按照你在问题中指定的顺序排列...
......我最终得到了这个:
<强>代码强>:
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']]