python 小甲鱼 第42课_[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('\n------------------')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值