Python 中整数列表与字符串结果的不同之处

标签 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)]

代码运行完美(没有产生任何错误 - 它仍然没有产生正确的结果)!

代码之间的唯一区别是这一行。我在 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/

相关文章:

python - 可迭代属性

python - 将日期插入 Python MySQLdb

python - 使用 Python 正则表达式进行行计数

python - 图像的哪些特征会产生用于 SVM 多类图像分类的良好结果?

python - 用 pandas 填充最后已知的数据

Python:传递要在 input() 函数中显示的参数

python - Django 1.8 和 Gmail - SMTPAuthenticationError 用户名和密码不被接受

python - 使用 Python 从字符串中提取整数

python - 使用python Elasticsearch映射地理点后如何获取一些原始json字段?

python - 启动 ipython 笔记本