【初久】星雨☆星晨 2024-11-10 16:10 采纳率: 97.1%
浏览 6
已结题

Python迭代器与生成器

编程要求
在右侧编辑器Begin-End区间补充代码,完成类FibIterator中的__next__()函数的功能。

测试说明
每一组测试会有一个值n,n大于等于0,这个值由测试代码来读取,不需要学员处理。读取进来的n会作为调用GetFib函数时的参数count。
测试代码会打印出从GetFib函数获得的迭代器中的值:

测试输入:2
输出:
1
1

测试输入:4
输出:
1
1
2
3

class FibIterator:
    count = 0
    now = 1 #初始值分别设置为1和0,方便__next__函数处理
    last = 0 #
    def __init__(self,count):
        self.count = count
    def __iter__(self):
        return self
    def __next__(self):
        #********** Begin *********#




        #********** End **********#
def GetFib(count):
    return FibIterator(count)

  • 写回答

2条回答 默认 最新

  • 无疆76 2024-11-10 16:11
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在给出的代码中,FibIterator类需要实现一个斐波那契数列的迭代器。我们可以使用以下代码来完成__next__()函数的功能:

    class FibIterator:
        count = 0
        now = 1
        last = 0
        def __init__(self, count):
            self.count = count
        def __iter__(self):
            return self
        def __next__(self):
            if self.count == 0:
                raise StopIteration  # 当count为0时抛出停止迭代异常
            fib_num = self.now + self.last  # 当前斐波那契数为前两个数的和
            self.last = self.now  # 更新上一个数值为当前数值
            self.now = fib_num  # 更新当前数值为新的斐波那契数
            self.count -= 1  # 计数减一,以便在后续调用时继续生成斐波那契数列
            return fib_num  # 返回当前生成的斐波那契数
    
    def GetFib(count):
        return FibIterator(count)
    

    在这个实现中,__next__()函数首先检查count是否为0。如果是,它会抛出一个StopIteration异常来结束迭代。否则,它会计算下一个斐波那契数(当前数与上一个数的和),并更新nowlast变量以便在下一次迭代中使用。然后它将count减一以准备下一次迭代,并返回计算出的斐波那契数。这样,每次调用__next__()函数时,都会生成下一个斐波那契数,直到count用完为止。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 创建了问题 11月10日