我正在做作业,希望对所有课程进行全面培训以达到他们的期望。我碰到了这个TypeError,真是困扰我。
这是对小孩子的健康评估测试。
我已经尝试过google,但这只是给了我一大堆代码,
并且我尝试删除Power
类,当然给了我一个错误。
主循环(未完成):
pd = Power()
num = pd.calc_num()
cir_num = int(math.sqrt(num))**2
circles = []
filled = 0
while True:
for i in range(math.sqrt(cir_num)-1):
for j in range(math.sqrt(cir_num)-1):
c = Circle(frame, cir_num)
circles.append(c)
##drawing
for c in circles:
if c.stage == 'empty':
c.draw_empty()
elif c.stage == 'filled':
c.draw_filled()
avar = 0
for c in circles:
avar += c.num2
filled += avar
功率等级的定义是: 就像有一个数字,并且有一个函数将数字取2的幂。
圈子类是有一个按钮。如果按钮阶段为“空”,则我将用一个空圆圈绘制按钮。如果单击带有空圆圈的按钮,则该按钮将具有一个无用的实心圆圈。
这是错误消息:
Traceback (most recent call last):
File "C:/Users/roche/Documents/assignment.py", line 47, in <module>
for i in range(math.sqrt(cir_num)-1):
TypeError: 'float' object cannot be interpreted as an integer
tkinter的大小很奇怪:
root.geometry('750x750+0+0')
给我一个垂直的矩形,我期待一个方形的窗口。 谢谢!
答案 0 :(得分:1)
您两次使用表达式
range(math.sqrt(cir_num)-1)
math.sqrt
的结果是一个浮点值,因此您正在尝试获取浮点值的range
。如documentation for range所述,
范围构造函数的参数必须是整数(内置int或实现
__index__
特殊方法的任何对象)。
因此,如果您真的想同时使用range
和math.sqrt
,则必须将float转换为int。这可能就是您想要的:
range(int(math.sqrt(cir_num))-1)
正如评论之一所暗示的,range
要求整数是有意义的。如果您要求range(math.sqrt(5))
,程序如何从0
循环到2.2361
?这没有明显的意义,因此Python要求仅遍历整数值。 numpy
模块确实具有arange function和linspace function,它们可以处理非整数值,但是范围的含义与Python的range
有所不同。 / p>
答案 1 :(得分:1)
您使用 range 来表示自然语言中的含义,自然语言或多或少地是实数线的一部分,例如“温度范围为37.2C至38.6C”。但这不是range()
在Python中的含义。在Python中,这意味着一堆连续的整数。这就是为什么您会抱怨称呼它为浮动货币的原因。