0
点赞
收藏
分享

微信扫一扫

【慕课网】如何实现 可迭代对象和迭代器对象(天气查询)


# 如何实现 可迭代对象和迭代器对象
# 某软件要求,从网络上抓去各个城市气温信息,并依次显示
# 北京:15~20
# 天津:15~20
# 长春:12~18
#
# 如果一次抓取所有城市天气再显示 显示第一个城市气温时 有很高的延时
# 并且浪费存储空间 我们期望以用时访问的策略 并且能把所有城市气温封装到一个对象里
# 可用for语句进行迭代 如何解决
import requests
from collections import Iterable,Iterator
def main():
l = [1, 2, 3, 4, 5]
s = 'abcde'
for x in l:
print(x)
for x in s:
print(x)
print(iter(l))
t = iter(l)
print(t.__next__())
print(t.__next__())
print(t.__next__())
print(t.__next__())
print(t.__next__())
print(l.__iter__())
print(iter(s))
pass







class WeatherIterator(Iterator):
def __init__(self,cities):
self.cities=cities
self.index=0


def getWeather(self,city):
r = requests.get(u'http://wthrcdn.etouch.cn/weather_mini?city=' + city)
data1={}
for x in range(5):
data = r.json()['data']['forecast'][x]
data1[data['date']] = '%s:%s-%s,%s' % (city, data['low'], data['high'], data['type'])



return data1

def __next__(self):
if self.index==len(self.cities):
raise StopIteration
city=self.cities[self.index]
self.index+=1
return self.getWeather(city)
class WeatherIterable(Iterable):
def __init__(self,cities):
self.cities=cities;
def __iter__(self):
return WeatherIterator(self.cities)
def main1():
# 实现一个迭代器对象 WeatherIterator,next方法每次返回一个城市气温
# 实现一个可迭代器对象WeatherIterable,_iter_方法返回一个迭代器对象

for x in WeatherIterable([u'海淀',u'历城',u'汶上',u'曹县']):
print(x)

pass

main1()


举报

相关推荐

0 条评论