为什么 int 被识别为 float?

Why an int is recognized as a float?

我必须使用 pillow 在 python 中创建调整大小算法。一些 var 是法语的。在这里,我在一段时间的末尾添加到 i(所以 i 始终是一个 int)并且 x 始终是一个 int,因为它不在范围内。 a[x] 是一个元组。

from PIL import Image
photo=Image.open("meh.jpg")
from random import randint

taille=photo.size
largeur=int(taille[0]*facteur)
hauteur=int(taille[1]*facteur)
diffhauteur=hauteur-taille[1]
difflargeur=largeur-taille[0]
newImage= Image.new('RGB', (largeur,hauteur))

if diffhauteur>1:
    i=0
    while i !=taille[0]:
        a=[]
        for b in range(taille[1]):
            liste.append(photo.getpixel((i,b))) #get all the data of the pixels in the row
        for b in range(diffhauteur): #add some pixel  (gradient) to get the lenght of the new img
            index=randint(0,len(a)-2)
            pixel2=a[index+1]
            pixel1=a[index]
            ab=  degrade(pixel1,pixel2) #create a gradient of two pixels as a tuple
            a.insert(index,ab)
        for x in range (hauteur):#add the row to the new img
            newImage.putpixel((i,x),a[x])
        i=i+1

newImage.show()

但是,我得到这个错误:

#here are the values
a[x]=(0.0, 0.0, -1.0)
i=0
x=6
line 71, in resizing
    newImage.putpixel((i,x),a[x])
 
TypeError: integer argument expected, got float

对于特定值不会发生这种情况。完全随机

有人有答案吗?因为它看起来很棘手或太容易了 我明天要问我的老师,但我不知道我是否能够解决这个问题。 谢谢

a[x]不是函数要求的ints的元组,而是floats的元组。因此,您必须将此元组转换为整数。

您可以将元组映射到整数:

for x in range (hauteur):
    a2 = tuple(map(int, a[x]))
    newImage.putpixel((i,x),a2)