You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:35:32