我想问一下如何检索出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
谢谢!
答案 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"