zoukankan      html  css  js  c++  java
  • [Python]小甲鱼Python视频第048课(魔法方法:迭代器) )课后题及参考解答

    # -*- coding: utf-8 -*-
    """
    Created on Sun Mar 24 20:24:02 2019
    
    @author: fengs
    """
    
    """
    
    0. 请用你的话解释一下“迭代”的概念?
        重复相同的操作,将上一次操作的输出时的状态当次本次操作的输入状态
    
    1. 迭代器是一个容器吗?
        不是,迭代是一个计算得出后续状态的过程(__next__()),容器是已经存在,去取就行。
    
    2. 迭代器可以回退(获取上一个值)吗?
        不能
        
    3. 如何快速判断一个容器是否具有迭代功能?
        isinstance(a,itera)
        
        是否有 __iter__()和 __next__() 魔法方法
        
    4. for 语句如何判断迭代器里边已经取空了?
        接管了迭代已经停止的异常,遇到迭代停止异常就认为是取空
    
    5. 在 Python 原生支持的数据结构中,你知道哪一个是只能用迭代器访问的吗.
        无序的集合
    """
    
    
    """
    0. 用 while 语句实现与以下 for 语句相同的功能:
    for each in range(5):
        print(each)
        
        
    """
    iter_range = iter(range(5))
    while True:
        try:
            each = next(iter_range);
            print(each)
        except StopIteration:
            break
    
    
    """
    1. 写一个迭代器,要求输出至今为止的所有闰年。如
    >>> leapYears = LeapYear()
    >>> for i in leapYears:
            if i >=2000:
                    print(i)
            else:
                    break
    
    2016W
    2012
    2008
    2004
    2000
    """
    import time
    class LeapYear():
        def __init__(self):
            self.year = time.localtime().tm_year
            #print(self.year)
            
        def isLeap(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 True:
                if self.isLeap(self.year) == False:
                    self.year -= 1
                else:
                    break
            tmp = self.year;
            self.year -= 1
            return tmp;
            
    print('---------------------------------')
    leapYears = LeapYear()
    for i in leapYears:
        if i >=2000:
            print(i)
        else:
            break
    print('---------------------------------')
    
    
    """
    2. 要求自己写一个 MyRev 类,功能与 reversed() 相同(内置函数 reversed(seq) 是返回一个迭代器,是序列 seq 的逆序显示)。例如:
    >>> myRev = MyRev("FishC")
    >>> for i in myRev:
        print(i, end='')
    
    ChsiF
    """
    
    
    class MyRev():
        def __init__(self,value):
            self.value = value;
            self.idx = len(self.value)
            
        def __iter__(self):
            return self
        
        def __next__(self):
            self.idx -= 1
            if self.idx >= 0:
                return self.value[self.idx]
            else:
                raise StopIteration
                
            
    myRev = MyRev("FishC")
    print('------------------')
    for i in myRev:
        print(i, end='')  
    print('
    ------------------')    
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    完美图解教程 Linux环境VNC服务安装、配置与使用
    c语言中<stdbool.h>的使用
    UNIX文件结构(转自UNIX/AIX操作系统基础教程)
    umask
    在AIX环境为Oracle表空间增加裸设备(逻辑卷)
    面的面积大小合线的长度的判断。
    不用新浪博客了。以后的日常感悟也在这里写了, 新浪太烂了。 (感叹也没用,什么都写不出来。 )
    轴心工具的做法。
    选择因素随机的判断。
    上面发的那个完整版变量还有问题,难道我不是用英文输入法, 电脑不说谎 ,看来我是大意了。下面是最终版。
  • 原文地址:https://www.cnblogs.com/alimy/p/10590751.html
Copyright © 2011-2022 走看看