我试图创建一个反向围栏密码,当我偶然发现一个错误! 这是我的密码:
n=len(cipher)
strings=[]
for r in range(3,4):
lis=[[0 for i in range(n)] for i in range(r)]
x,y=0,0
for c in cipher:
try:
lis[x][y]=c
except:
for i in lis:
print(i)
print(x,y)
break
y+=2*r-3
print(y)
if y>=n:
y-=n
x+=1
print(x,y)
x,y,z=0,0,1
s=""
for i in range(n):
try:
if(lis[x][y]==0):
print(r,n)
s+=lis[x][y]
except:
for i in lis:
print(i)
print(x,y,c)
break
y+=1
if x==0:
z=1
elif x==r-1:
z=0
if z==1:
x+=1
else:
x-=1
strings.append(s)
return strings
我添加了几个try/except语句来确定错误。后来,我发现如果我把第4行改成
lis=[['.' for i in range(n)] for i in range(r)]
这段代码运行得非常完美(比如,它没有产生任何错误-它仍然没有产生正确的结果)
代码之间唯一的区别就是这一行。我在windows10上使用python37
为什么一个代码能工作而另一个不能
编辑:我的输入密码是“Js s!ae saeoemiwm”,它是用围栏密码中的三个“rails”编码的
编辑2:我有一个工作版本来反转此密码,但问题的关键是为什么将0改为“.”会有任何不同
原因如下:
s
是一个字符串,因此只能将其他字符串连接到它。如果lis[x][y]
包含0
,则这是一个数字,而不是字符串,因此不能将其串联起来如果更改为:
然后它将与任何一个初始值一起工作
相关问题 更多 >
编程相关推荐