密码超过4X4网格并打印出错误的密码

时间:2014-01-13 08:53:14

标签: python

所以我在下面创建了这个代码,根据他们提供的密码文本制作了一个4 *(密码的长度)网格,以处理任何可被4整除的值,我添加了验证这样它只允许长度小于80的字符可以被4整除,所以我希望它能逐行粘贴AKMR和单个字符以下,例如

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

随机生成的密文是CFFDACFFDBDDBDBDCABBFCABDFFCBDFF(来自用户的16个字符的消息输入转换为密文) 但它反而给出了这个输出,所以它在同一行输出另外4个字符, 当用户输入为8个字符然后变为密文

时,不会发生此问题
      A    K    M    R
    ('C', 'A', 'D', 'B', 'C', 'F', 'D', 'B')
    ('F', 'C', 'B', 'D', 'A', 'C', 'F', 'D')
    ('F', 'F', 'D', 'B', 'B', 'A', 'F', 'F')
    ('D', 'F', 'D', 'D', 'B', 'B', 'C', 'F')

它应该是......

      A    K    M    R
    ('C', 'A', 'D', 'B')
    ('C', 'F', 'D', 'B')
    ('F', 'C', 'B', 'D')
    ('A', 'C', 'F', 'D')
    ('F', 'F', 'D', 'B') 
    ('B', 'A', 'F', 'F')
    ('D', 'F', 'D', 'D')
    ('B', 'B', 'C', 'F')

源代码......

 def decodecipher():

 global decode
 decode=input("Please enter your cipher text\n")
 grid1 = []
 finalcipher =""

 #AKMR
 print("  A    K    M    R")
 mygrid =([decode[i:i+4] for i in range(0,len(decode),4)])
 grid2=list(zip(*mygrid))
 for i in range (len(grid2)):
    print(grid2[i])

我知道它与我的范围有关,但是我无法弄明白,我已经使用我的网格长度作为变量而不是将范围定义为4但是即使这似乎也没有工作

1 个答案:

答案 0 :(得分:0)

mygrid具有您想要的尺寸。然后你打电话

grid2=list(zip(*mygrid))

mygrid(4x8)转换为grid2(8x4),将print转换为后者。尝试

 for i in range (len(mygrid)):
     print(mygrid[i])

或更多pythonic:

for l in mygrid:
    print(l)

如果您希望mygrid中的每个子列表都是单个字符的列表,而不是四个字符的字符串,您可以通过对列表理解的一个小修改来执行此操作:

mygrid = [list(decode[i:i+4]) for i in range(0,len(decode),4)]
        # ^ add call to list