我在Python中编写了一个代码,用于打印在给定阈值下截断的Fibonacci序列。
m_char=input('threshold: ')
m=int(m_char)
def fibonacci(m):
lst=[0, 1]
while lst[-1] <= m:
a = lst[-2]+lst[-1]
if a <= m:
lst.append(a)
else:
print(lst)
return
fibonacci(m)
我不喜欢对m
和while
语句中的变量if
进行双重检查:我很确定它是多余的,所以有一种方法可以写更高效的代码。我想保留列表的使用。你有什么想法吗?
答案 0 :(得分:1)
只需使用
while True:
循环中的检查实际上决定了循环的运行频率。
根本不使用列表索引会更有效,而是使用两个变量维护最后两个Fibonacci数。此外,返回列表而不是打印它更为惯用。如果需要,让调用代码打印列表:
def fibonacci(m):
lst=[0, 1]
a,b = lst
while True:
a,b = b, a+b
if b <= m:
lst.append(b)
else:
return lst
答案 1 :(得分:1)
def fibonacci(m):
lst=[0, 1]
a = lst[-2]+lst[-1]
while a <= m:
lst.append(a)
a = lst[-2]+lst[-1]
return lst
您可以为每个循环计算a
一次,并使用它来确定循环是否继续