我的简单python程序一直出现这个错误:"TypeError:'float'对象不能解释为整数"

rem*_*ath 29 python typeerror

我不明白为什么我不能使用我的变量c.

码:

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)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

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
Run Code Online (Sandbox Code Playgroud)

Jon*_*nts 65

在:

for i in range(c/10):
Run Code Online (Sandbox Code Playgroud)

你正在创建一个浮点数 - 为了解决这个问题,请使用int除法运算符:

for i in range(c // 10):
Run Code Online (Sandbox Code Playgroud)

  • 从 python 2.X 迁移到 python 3.X 时可能会出现此错误 (6认同)

Mar*_*ers 12

range()只能使用整数,但除了/运算符总是会产生一个浮点值:

>>> 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
Run Code Online (Sandbox Code Playgroud)

使值再次为整数:

for i in range(int(c / 10)):
Run Code Online (Sandbox Code Playgroud)

或使用//地板分部操作员:

for i in range(c // 10):
Run Code Online (Sandbox Code Playgroud)


iCo*_*dez 8

如下所示,range仅支持整数:

>>> 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]
>>>
Run Code Online (Sandbox Code Playgroud)

但是,c/10是一个浮点因为/总是返回一个浮点数.

在你把它放入之前range,你需要做c/10一个整数.这可以通过将其放入int:

range(int(c/10))
Run Code Online (Sandbox Code Playgroud)

或者通过使用//,返回一个整数:

range(c//10)
Run Code Online (Sandbox Code Playgroud)


And*_*eas 6

也可以使用np.arange()适用于浮点数的范围代替范围来解决此问题:

import numpy as np
for i in np.arange(c/10):
Run Code Online (Sandbox Code Playgroud)