检查Python中属于Fibonacci数字的输入

时间:2011-09-19 13:59:07

标签: python

我想问一下如何检索出fibo列表列表,然后检查用户的输入值是否在fibo列表中。

    a , b = 1, 1
while num <= sys.maxint:
    fibo == a , b = b, a+b
    if num == (b +a+b):
        print "It is a Fibonacci number"        
        break
    else:
        print "It is not a Fibonacci number"
        break

谢谢!

4 个答案:

答案 0 :(得分:8)

使用more sophisticated Fibonacci number test,您可以使用

def is_fibonacci(n):
    phi = 0.5 + 0.5 * math.sqrt(5.0)
    a = phi * n
    return n == 0 or abs(round(a) - a) < 1.0 / n

(这可能是确定数字是否为斐波纳契数的最有效方法,而且很可能不是您作业的预期解决方案。我只是将此答案包括在内以供将来参考。)

答案 1 :(得分:4)

pythonic one-liner

def is_fibonacci(n):
    return n >= 0 and (n==0 or sqrt( 5*n*n - 4).is_integer() or sqrt( 5*n*n + 4).is_integer())

答案 2 :(得分:1)

可能是一个效率不高的解决方案 - 使用close公式更有效(参见Sven's answer),但你可以这样做:

def fibs():
    a,b = 0,1
    yield a
    yield b
    while True:
        a,b = b,a+b
        yield b

n = int(raw_input("please, enter a number "))
for fib in fibs():
  if n == fib:
    print "your number is a Fibonacci number!"
    break
  if fib > n:
    print "your number is not a Fibonacci number!"
    break

fibs生成器为您提供斐波纳契数列表。您可以浏览列表,每个数字都可以检查它是否等于用户输入的数字(在这种情况下你已经完成),或者它是否大于用户输入的数字(在这种情况下你也可以)重做)。

我希望这很有用,至少要理解Python生成器。

答案 3 :(得分:0)

x = int(input("Enter a number: "))

A = [0, 1]

for i in range(2,720):

    A.append(A[i-1]+A[i-2])

bool=False

for i in range(2,720):

    if x==A[i]: 

        bool=True
        break

if bool==True:

    print "Found,Index is:",i+1
else: 

    print "Not Found"