Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 密码超出4X4网格,打印出错误的密码_Python - Fatal编程技术网

Python 密码超出4X4网格,打印出错误的密码

Python 密码超出4X4网格,打印出错误的密码,python,Python,因此,我在下面创建了这段代码,根据他们提供的密文创建了一个4*(密码长度)网格,用于处理可被4整除的最大值为80的任何值,我添加了验证,因此它只允许长度小于80的字符被4整除,所以我想让它一行一行地粘贴一个K M R和下面的单个字符,例如 A K M R ['D', 'C', 'B', 'A'] ['B', 'F', 'D', 'C'] ['D', 'F', 'B', 'F'] ['D', 'D', 'D', 'F'] 随机生成的密文是CFFDACFFDBDDB

因此,我在下面创建了这段代码,根据他们提供的密文创建了一个4*(密码长度)网格,用于处理可被4整除的最大值为80的任何值,我添加了验证,因此它只允许长度小于80的字符被4整除,所以我想让它一行一行地粘贴一个K M R和下面的单个字符,例如

   A    K    M    R
 ['D', 'C', 'B', 'A']
 ['B', 'F', 'D', 'C']
 ['D', 'F', 'B', 'F']
 ['D', 'D', 'D', 'F']
随机生成的密文是CFFDACFFDBDDBDCABBFBCABDFFFCBDFF(从用户输入的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,但即使这样似乎也不起作用。然后你打电话

grid2=list(zip(*mygrid))
它将
mygrid
(4x8)转换为
grid2
(8x4),并
print
转换为后者。试一试

 for i in range (len(mygrid)):
     print(mygrid[i])
或者,更像蟒蛇:

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

尝试过类似的方法,刚得到一个K M R,之后没有网格打印,在这里效果绝对不错。
zip
导致了您描述的问题,我无法告诉您为什么它在没有看到该代码的情况下不会
打印
。啊,我犯的错误是我在范围内(len(grid1))而不是我的网格,它现在可以打印了:)现在只需将它设置为正确的格式,谢谢这就是为什么您应该使用第二个版本的
print
循环;它更不容易出错。记住这一点,这对哈哈来说还是新鲜事,再次感谢你:)