Python 密码超出4X4网格,打印出错误的密码
因此,我在下面创建了这段代码,根据他们提供的密文创建了一个4*(密码长度)网格,用于处理可被4整除的最大值为80的任何值,我添加了验证,因此它只允许长度小于80的字符被4整除,所以我想让它一行一行地粘贴一个K M R和下面的单个字符,例如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
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
循环;它更不容易出错。记住这一点,这对哈哈来说还是新鲜事,再次感谢你:)