math.sqrt导致TypeError:“ float”对象无法解释为整数

时间:2019-07-09 11:13:22

标签: python python-3.x math

我正在做作业,希望对所有课程进行全面培训以达到他们的期望。我碰到了这个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')

给我一​​个垂直的矩形,我期待一个方形的窗口。 谢谢!

2 个答案:

答案 0 :(得分:1)

您两次使用表达式

range(math.sqrt(cir_num)-1)

math.sqrt的结果是一个浮点值,因此您正在尝试获取浮点值的range。如documentation for range所述,

  

范围构造函数的参数必须是整数(内置int或实现__index__特殊方法的任何对象)。

因此,如果您真的想同时使用rangemath.sqrt,则必须将float转换为int。这可能就是您想要的:

range(int(math.sqrt(cir_num))-1)

正如评论之一所暗示的,range要求整数是有意义的。如果您要求range(math.sqrt(5)),程序如何从0循环到2.2361?这没有明显的意义,因此Python要求仅遍历整数值。 numpy模块确实具有arange functionlinspace function,它们可以处理非整数值,但是范围的含义与Python的range有所不同。 / p>

答案 1 :(得分:1)

您使用 range 来表示自然语言中的含义,自然语言或多或少地是实数线的一部分,例如“温度范围为37.2C至38.6C”。但这不是range()在Python中的含义。在Python中,这意味着一堆连续的整数。这就是为什么您会抱怨称呼它为浮动货币的原因。