Python类型错误“ float”对象不能解释为整数

时间:2020-01-23 06:49:50

标签: python recursion typeerror

  10
 /
 5
/ \

2 3 // \ 1 1 2 / 1

def fusc(n): 对于范围(0,n)中的i: 如果n == 0: 返回0 elif n == 1: 返回1 elif n%2 == 0: 返回fusc(n / 2) elif n%2!= 0: n = n // 2 返回(fusc(n)+ fusc(n + 1))

a = fusc(10) 打印(a)

Type error :float object cannot be interpreted as an integer

5 个答案:

答案 0 :(得分:1)

问题在return fusc(n/2)行中。该除法的结果是float。因此,您在此处用fusc()的{​​{1}}调用n/2,并且此浮点数输入float,但是范围的签名不允许使用浮点数!解决的办法是在整数中使用整数,并将range(0, n)替换为/(所谓的“底数除法”),这将返回整数而不是//。另外,您在float调用中不需要0,它与range()

相同

答案 1 :(得分:0)

尝试一下:

elif n%2 == 0: 返回fusc(n // 2)

但如果不是这样:请尝试重新创建这部分代码。

答案 2 :(得分:0)

这是缺少的回溯:

Traceback (most recent call last):
  File "C:\test.py", line 13, in <module>
    a = fusc(10)
  File "C:\test.py", line 8, in fusc
    return fusc(n/2)
  File "C:\test.py", line 2, in fusc
    for i in range(0,n):
TypeError: 'float' object cannot be interpreted as an integer

for i in range(0,n):导致了错误。 in必须是浮点数,应为整数。 range返回整数序列并需要整数参数,因此它必须为n

return fusc(n/2)是堆栈上的上一个函数调用。 Python 3中的/是浮点除法,结果是浮点。使用//进行整数除法可以解决此问题。

答案 3 :(得分:0)

尝试一下

def fusc(n):
    for i in range(0, n):
        print(n)
        if n == 0:
            return 0
        elif n == 1:
            return 1
        elif n % 2 == 0:
            return fusc(int(n/2))
        elif n % 2 != 0:
            n = n//2
            return fusc(n)+fusc(n+1)


a = fusc(10)
print(a)

我的结果是

10
5
2
1
3
1
2
1
3

P.S:在python中,如果您将10/3除以3,就等于3.333333 错误行的n / 2不是5,而是5.0

答案 4 :(得分:-1)

简单修复。只需更改:

for i in range(0,n):

for i in range(0,int(n)):