Ik krijg steeds deze fout voor mijn eenvoudige python-programma: “TypeError: ‘float’-object kan niet worden geïnterpreteerd als een geheel getal”

Ik begrijp niet waarom ik mijn variabele cniet kan gebruiken.

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)

Ik krijg de volgende foutmelding:

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

Antwoord 1, autoriteit 100%

In:

for i in range(c/10):

Als resultaat creëer je een float – om dit op te lossen gebruik je de int division operator:

for i in range(c // 10):

Antwoord 2, autoriteit 16%

range()kan alleen werken met gehele getallen, maar delen met de operator /resulteert altijd in een float-waarde:

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

Maak de waarde opnieuw een geheel getal:

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

of gebruik de //operator voor verdiepingsdeling:

for i in range(c // 10):

Antwoord 3, autoriteit 10%

Zoals hieronder getoond, ondersteunt rangealleen gehele getallen:

>>> 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]
>>>

c/10is echter een float omdat /altijd een float retourneert.

Voordat je het in rangeplaatst, moet je van c/10een geheel getal maken. Dit kan gedaan worden door het in int:

range(int(c/10))

of door //, wat een geheel getal retourneert:

range(c//10)

Antwoord 4, autoriteit 3%

Het is ook mogelijk om dit op te lossen met np.arange() in plaats van bereik wat werkt voor float-nummers:

import numpy as np
for i in np.arange(c/10):

Other episodes