Python 3斐波那契列表生成器问题:如何按需终止序列
解决斐波那契序列超出限制的问题
嘿,作为编程新手用列表练手斐波那契序列是个很棒的选择!咱们来看看你的代码为什么会出现不符合预期的情况。
原代码的问题分析
你的循环逻辑是先检查当前列表的最大值是否≤100,然后再添加新元素,但这里有个漏洞:当你添加的新元素本身超过100时,循环已经执行了append操作。比如当列表最后两个数是55和89时,它们的和是144——此时当前列表的最大值是89(≤100),所以循环会执行append,把144加入列表,这就导致最终结果里出现了超过100的数。
咱们来走一遍最后几步流程更清楚:
- 此时
fib = [1,2,3,5,8,13,21,34,55,89],max是89≤100 - 执行
fib.append(55+89=144),列表变成[...,89,144] - 下一次循环检查
max(fib)=144>100,退出循环,但144已经留在列表里了
修正方案
这里有几种更稳妥的写法,核心思路都是先计算出下一个数,判断它是否符合≤100的条件,再决定是否添加到列表中:
方案1:调整原代码的逻辑顺序
把判断移到append之前,避免添加不符合要求的数:
fib = [1, 2] n = 0 while True: next_num = fib[n] + fib[n+1] if next_num > 100: break # 超过100就退出循环 fib.append(next_num) n += 1 print(fib)
方案2:更简洁的写法(推荐)
不用维护n变量,直接取列表的最后两个元素相加,代码更易读也不容易出错:
fib = [1, 2] while True: next_num = fib[-1] + fib[-2] # fib[-1]是最后一个元素,fib[-2]是倒数第二个 if next_num > 100: break fib.append(next_num) print(fib)
方案3:另一种循环条件写法
先计算第一个待添加的数,再用它作为循环判断条件:
fib = [1, 2] next_num = fib[-1] + fib[-2] while next_num <= 100: fib.append(next_num) next_num = fib[-1] + fib[-2] print(fib)
这几种写法都能得到[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]这个符合要求的结果,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

