当我偶然发现一个错误时,我试图创建一个反向栅栏密码! 这是我的代码:
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)]
代码运行完美(没有产生任何错误 - 它仍然没有产生正确的结果)!
代码之间的唯一区别是这一行。我在 Windows 10 上使用 Python 37。
为什么一个代码可以工作而另一个却不能?
编辑:我的输入密码是“Js s!ae saeoemiwm”,它是使用栅栏密码中的三个“轨道”进行编码的。
编辑2:我有一个可以反转此密码的工作版本,但这个问题的重点是为什么将0更改为“。”有什么不同吗?
最佳答案
原因是这一行:
s+=lis[x][y]
s
是一个字符串,因此您只能将其他字符串连接到它。如果 lis[x][y]
包含 0
,则这是一个数字,而不是字符串,因此您无法连接它。
如果将其更改为:
s += str(lis[x][y])
然后它将使用任一初始值。
关于Python 中整数列表与字符串结果的不同之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165404/