使用范围时“TypeError:'float'对象不能解释为整数”是啥意思?
Posted
技术标签:
【中文标题】使用范围时“TypeError:\'float\'对象不能解释为整数”是啥意思?【英文标题】:What does "TypeError: 'float' object cannot be interpreted as an integer" mean when using range?使用范围时“TypeError:'float'对象不能解释为整数”是什么意思? 【发布时间】:2013-11-18 10:28:05 【问题描述】:我不明白为什么我不能使用我的变量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)
我收到以下错误消息:
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
【问题讨论】:
【参考方案1】:在:
for i in range(c/10):
您正在创建一个浮点数 - 要解决此问题,请使用 int 除法运算符:
for i in range(c // 10):
【讨论】:
从 python 2.X 迁移到 python 3.X 时会出现此错误【参考方案2】: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
再次将值设为整数:
for i in range(int(c / 10)):
或使用//
楼层除法运算符:
for i in range(c // 10):
【讨论】:
【参考方案3】:如下图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]
>>>
但是,c/10
是一个浮点数,因为/
总是返回一个浮点数。
在将其放入range
之前,您需要将c/10
设为整数。这可以通过将其放入int
来完成:
range(int(c/10))
或者使用//
,它返回一个整数:
range(c//10)
【讨论】:
【参考方案4】:也可以使用np.arange()
来解决这个问题,而不是使用适用于浮点数的范围:
import numpy as np
for i in np.arange(c/10):
【讨论】:
以上是关于使用范围时“TypeError:'float'对象不能解释为整数”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: 'float' 类型的对象没有 len() & TypeError: 'float' 对象不可迭代
pyspark:TypeError:'float'对象不可迭代
python-2.7 | SimpleCV - TypeError:'float'对象不能被解释为索引
TypeError:'float' 对象在内置 max 函数的列表中不可迭代