Python实现上限为30的斐波那契数列时输出多一个数的问题求助
问题排查与修正方案
嘿,咱们来拆解下你的代码为啥会多输出一个34:你的循环条件是while l[i+1]<30,这个条件判断的是当前列表最后一个元素是否小于30。当列表最后一个元素是21时,它满足21<30,于是程序会计算13+21=34并把它加到列表里——这就导致超出上限的数被意外加入了。
核心问题在于:你判断的是“已存在的最后一个数”,而不是“即将要生成的下一个数”是否符合上限要求。
修正后的代码方案
我们调整逻辑,先算出下一个斐波那契数,判断它是否≤30,再决定是否添加到列表里。这里有两种好用的修正方式:
方式一:基于原代码调整判断逻辑
l = [1, 1] i = 0 while True: next_num = l[i] + l[i+1] # 先判断下一个数是否超过上限,超过就停止循环 if next_num > 30: break l.append(next_num) i += 1 print(l) # Python3需要加括号,Python2可以用print l
方式二:更简洁的Pythonic写法
不用索引,直接跟踪列表最后两个元素,代码更易读:
fib_list = [1, 1] while True: next_val = fib_list[-1] + fib_list[-2] if next_val > 30: break fib_list.append(next_val) print(fib_list)
运行任意一段代码,输出都会是[1, 1, 2, 3, 5, 8, 13, 21],完全符合你“上限为30”的需求。
内容的提问来源于stack exchange,提问作者user134456
相关产品推荐
相关产品推荐

