Python的不同之处在于列表中的结果是整数还是字符串

2024-04-19 02:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个反向围栏密码,当我偶然发现一个错误! 这是我的密码:

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改为“.”会有任何不同


Tags: 代码in密码forif错误rangecipher
1条回答
网友
1楼 · 发布于 2024-04-19 02:23:03

原因如下:

s+=lis[x][y]

s是一个字符串,因此只能将其他字符串连接到它。如果lis[x][y]包含0,则这是一个数字,而不是字符串,因此不能将其串联起来

如果更改为:

s += str(lis[x][y])

然后它将与任何一个初始值一起工作

相关问题 更多 >