如何用Python生成指定第N个斐波那契数?现有代码仅返回生成器
解决生成器返回对象而不是具体斐波那契数的问题
嘿,我来帮你搞定这个小问题!你现在遇到的情况是因为你写的fib是个生成器函数——调用它之后得到的是一个生成器对象,而不是直接的数值。生成器的特点是“按需产出”,你得主动去迭代它才能拿到里面的具体值。下面给你几种实用的解决办法:
方法1:遍历生成器获取最后一个值
生成器会逐个产出第1到第N个斐波那契数,我们只需要遍历到最后一个,就能拿到目标值:
a = int(input('Enter N Number: ')) def fib(n): current, next_num = 1, 1 for _ in range(n): yield current current, next_num = next_num, current + next_num # 遍历生成器,记录最后一个值 target_num = None for num in fib(a): target_num = num print(target_num)
方法2:把生成器转换成列表再取值
生成器可以直接转成列表,列表的最后一个元素就是第N个斐波那契数(因为生成器刚好产出N个值):
a = int(input('Enter N Number: ')) def fib(n): current, next_num = 1, 1 for _ in range(n): yield current current, next_num = next_num, current + next_num # 转换为列表后取最后一个元素 fib_list = list(fib(a)) print(fib_list[-1])
方法3:修改函数直接返回目标值(无需生成器)
如果你只是需要获取单个斐波那契数,生成器反而有点多余,直接计算会更高效:
a = int(input('Enter N Number: ')) def fib(n): # 前两个斐波那契数都是1 if n <= 2: return 1 current, next_num = 1, 1 # 从第3个开始循环计算到第n个 for _ in range(3, n + 1): current, next_num = next_num, current + next_num return next_num print(fib(a))
简单解释下你原来的代码问题:生成器对象本身不会自动输出数值,它只是一个“数值生产者”,只有当你通过迭代(比如for循环、next()函数)去触发它时,它才会一步步计算并产出值。直接打印生成器对象,Python只会告诉你这是一个生成器实例,而不是里面的具体内容~
内容的提问来源于stack exchange,提问作者Raau
相关产品推荐
相关产品推荐

