Por que um int é reconhecido como um float?

Sep 15 2020

Eu tenho que criar um algoritmo de redimensionamento em python usando travesseiro. Alguns var estão em francês. Aqui, eu adiciono a i no final de um tempo (então i é sempre um int) e x é sempre um int, pois está fora do intervalo. a [x] é uma tupla.

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()

Mas, recebo este erro:

#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

Isso não acontece para um valor específico. É totalmente aleatório

Alguém tem uma resposta? Porque parece complicado ou fácil demais. Vou perguntar ao meu professor amanhã, mas não sei se conseguirei resolver isso. Te agradece

Respostas

1 Jakob Sep 15 2020 at 03:10

a[x]não é uma tupla de intsconforme solicitado pela função, mas uma tupla de floats. Portanto, você deve converter esta tupla em inteiro.

veja aqui

Você pode mapear a tupla para um inteiro:

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