ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第048讲:魔法方法:迭代器 | 课后测试题及答案

2022-01-29 17:07:26  阅读:146  来源: 互联网

标签:__ return 迭代 测试题 self 课后 048 year% def


测试题(笔试,不能上机哦~):

0. 请用你的话解释一下“迭代”的概念?

答:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。

1. 迭代器是一个容器吗?

答:不是。因为我们耳熟能详的容器像列表,字典,元组都是可以存放数据的,而迭代器就是实现了__next__()方法的对象(用于遍历容器中的数据)。

2. 迭代器可以回退(获取上一个值)吗?

答:迭代器性质决定没有办法回退,只能往前进行迭代。但这并不是什么很大的缺点,因为我们几乎不需要在迭代途中进行回退操作。

3. 如何快速判断一个容器是否具有迭代功能?

答:判断该容器是否拥有 __ ter__() 和 __ next__() 魔法方法。

4. for 语句如何判断迭代器里边已经取空了?

答:迭代器通过 __ next__() 方法每次返回一个元素,并指向下一个元素。如果当前位置已无元素,通过抛出 StopIteration 异常表示。

5. 在 Python 原生支持的数据结构中,你知道哪一个是只能用迭代器访问的吗?

答:set。对于原生支持随机访问的数据结构(如tuple、list),可以使用迭代器或者下标索引的形式访问,但对于无法随机访问的数据结构 set 而言,迭代器是唯一的访问元素的方式。

动动手(一定要自己动手试试哦~):

0 用 while 语句实现与以下 for 语句相同的功能:

for each in range(5):
    print(each)

答:

alist = range(5)
it = iter(alist)

while True:
    try:
        print(next(it))
    except StopIteration:
        break

1. 写一个迭代器,要求输出至今为止的所有闰年。如:

>>> leapYears = LeapYear()
>>> for i in leapYears:
        if i >=2000:
                print(i)
        else:
                break

2012
2008
2004
2000

提示:闰年判定法((year%4 == 0 and year%100 != 0) or (year%400 == 0))

答:

import datetime as dt

class LeapYear:
    def __init__(self):
        self.now = dt.date.today().year

    def isLeapYear(self, year):
        if (year%4 == 0 and year%100 != 0) or (year%400 == 0):
            return True
        else:
            return False
        
    def __iter__(self):
        return self

    def __next__(self):
        while not self.isLeapYear(self.now):
            self.now -= 1 

        temp = self.now
        self.now -= 1
        
        return temp

2. 要求自己写一个 MyRev 类,功能与 reversed() 相同(内置函数 reversed(seq) 是返回一个迭代器,是序列 seq 的逆序显示)。例如:

>>> myRev = MyRev("FishC")
>>> for i in myRev:
    print(i, end='')

ChsiF

答:


class MyRev:
    def __init__(self, data):
        self.data = data
        self.index = len(data)
        
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.index == 0:
            raise StopIteration

        self.index = self.index - 1
        return self.data[self.index]

标签:__,return,迭代,测试题,self,课后,048,year%,def
来源: https://blog.csdn.net/lemogate/article/details/122745236

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有