Python:TypeError:' int'对象不可迭代

时间:2016-02-07 17:59:12

标签: python-3.x

我正在解决以下问题:

编写一个函数is_fib(n),如果n是斐波那契数,则返回True,否则返回False。

这是我的代码:

def is_fib(n):
    def fib(x):
        if x == 0:
            return 0
        elif x == 1:
            return 1
        else:
            return fib(x-1) + fib(x-2)
    for a in n:
        if fib(a) == n:
            result = True
            break
        else:
            result = False
    return result

运行它会产生:

TypeError: 'int' object is not iterable.

我一直盯着代码半小时。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我认为你的意思是

for a in range(n)

for a in n

答案 1 :(得分:0)

正如jozefg所说你缺少范围(n)

还注意到你需要范围(n + 2)来涵盖所有情况

def is_fib(n):
    def fib(x):
        if x == 0:
            return 0
        elif x == 1:
            return 1
        else:
            return fib(x-1) + fib(x-2)
    for a in range(n+2):
        if fib(a) == n:
            return True


    return False

print(is_fib(3))

答案 2 :(得分:0)

首先感谢帮助我的两个人。 但是,对于Yoav的版本,当n是一个非常大的数字时,python会遇到错误。

这是我的新版和改进版。

def is_fib(n):
    if n < 0:
        return False
    else:
        fib_0 = 0
        fib_1 = 1
        if n == fib_0 or n == fib_1:
            return True
        else:
            for a in range(2,n+2):
                fib = fib_0 + fib_1
                fib_0,fib_1 = fib_1,fib
                if fib >= n:
                    break
            return fib == n