我是一名學生,剛接觸 Python。我正在嘗試撰寫一個程式來判斷用戶輸入的數字是否為斐波那契數。
num=int(input("Enter the number you want to check\n"))
temp=1
k=0
a=0
summ=0
while summ<=num:
summ=temp k
temp=summ
k=temp
if summ==num:
a=a 1
print("Yes. {} is a fibonnaci number".format(num))
break
if a==0:
print("No. {} is NOT a fibonacci number".format(num))
#The program is working for only numbers upto 2.
uj5u.com熱心網友回復:
我建議是這樣的:
fib_terms = [0, 1] # first two fibonacci terms
user_input= int(input('Enter the number you want to check\n'))
# Add new fibonacci terms until the user_input is reached
while fib_terms[-1] <= user_input:
fib_terms.append(fib_terms[-1] fib_terms[-2])
if user_input in fib_terms:
print(f'Yes. {user_input} is a fibonacci number.')
else:
print(f'No. {user_input} is NOT a fibonacci number.')
uj5u.com熱心網友回復:
你不需要那么多變數。可以使用單個賦值生成斐波那契整數序列
a, b = b, a b
# Short for
# temp = a
# a = b
# b = temp b
重復應用a按順序設定為模式中的數字。選擇初始值a并b確定您獲得的確切序列。斐波那契數列是在使用a = 0和時生成的b = 1。
a = 0
b = 1
a, b = 1, 0 1 # 0, 1
a, b = 1, 1 1 # 1, 2
a, b = 2, 1 2 # 2, 3
a, b = 3, 2 3 # 3, 5
# etc
(再舉一個例子,如果您以a = 2和開頭,則會生成盧卡斯數b = 1。)
您需要做的就是在每一步都回傳Trueif n == a,迭代直到n > a. 如果n不是a回圈生成的值之一,您將回傳False.
n = int(input(...))
a = 0
b = 1
while a <= n:
if n == a:
return True
a, b = b, a b
return False
uj5u.com熱心網友回復:
歡迎來到python社區。
在您的代碼中temp表示前一個數字,k表示temp. 問題是您temp在將下一個值分配給 之前更改了k。要解決這個問題,您只需更改第 8 行和第 9 行。在新的順序中,您首先將 的值分配給temp,k然后再分配summ給temp。就是這樣!
我建議你通過這種方式來做一個串列:
fib[i] = fib[i-1] fib[i-2]
它會提高你的代碼的清晰度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/366672.html
