web-dev-qa-db-fra.com

Je continue à avoir cette erreur pour mon simple python: "TypeError: l'objet 'float' ne peut pas être interprété comme un entier"

Je ne comprends pas pourquoi je ne peux pas utiliser ma variable c.

code:

from turtle import *

speed(0)
hideturtle()
c = 450

def grid(x,y,a):
    seth(0)
    pu()
    goto(x,y)
    pd()
    for i in range(4):
        forward(a)
        rt(90)
    for i in range(c/10):
        seth(0)
        forward(10)
        rt(90)
        forward(c)
        backward(c)
    for i in range(c/10):
        seth(0)
        rt(90)
        forward(10)
        rt(90)
        forward(c)
        backward(c)
    pu()
    goto(a+10,0)
    write("x")
    goto(0,a+10)
    write("y")
    pd()

grid(0,0,c)
grid(-c,0,c)
grid(-c,c,c)
grid(0,c,c)

Je reçois le message d'erreur suivant:

Traceback (most recent call last):
  File "C:\Users\nick\Desktop\gridv2.py", line 35, in <module>
    grid(0,0,c)
  File "C:\Users\nick\Desktop\gridv2.py", line 15, in grid
    for i in range(c/10):
TypeError: 'float' object cannot be interpreted as an integer
26
remorath

Dans:

for i in range(c/10):

Vous créez un float à la suite - pour résoudre ce problème, utilisez l'opérateur int division:

for i in range(c // 10):
58
Jon Clements

range() ne peut fonctionner qu'avec des entiers, mais en divisant avec le / l'opérateur donne toujours une valeur float:

>>> 450 / 10
45.0
>>> range(450 / 10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer

Faites à nouveau la valeur d'un entier:

for i in range(int(c / 10)):

ou utilisez le // opérateur de division de plancher:

for i in range(c // 10):
11
Martijn Pieters

Comme indiqué ci-dessous, range ne prend en charge que les entiers:

>>> range(15.0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: range() integer end argument expected, got float.
>>> range(15)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>>

Toutefois, c/10 est un float parce que / retourne toujours un float.

Avant de le mettre dans range, vous devez faire c/10 un nombre entier. Cela peut être fait en le mettant dans int :

range(int(c/10))

ou en utilisant // , qui renvoie un entier:

range(c//10)
7
iCodez