#生成器函数deff():
a, b =1,1while1:yield a #暂停执行,需要时再产生一个新的元素
a, b = b, a+b
#这样做可以节省内存,而不用开list保存所有的中间结果#也不必要一次性print所有中间结果
a = f()for i inrange(10):print(a.__next__(),end =' ')#__next__迭代器方法#Answer:1 1 2 3 5 8 13 21 34 55
a = f()
b =next(a)print(b)
b =next(a)print(b)
b =next(a)print(b)#pass#Answer:#1#1#2 处于yield#迭代器classFab(object):def__init__(self,max):
self.max=max
self.n, self.max, self.b =0,0,1def__iter__(self):return self
def__next__(self):#py3.*需写成__next__,for循环中自动调用__next__()if self.n < self.max:
r = self.b
self.max, self.b = self.b, self.a + self.b
self.n = self.n +1return r
raise StopIteration()#抛出异常表示迭代结束for item in Fab(10):#迭代器访问print(item, end =' ')#Answer:1 1 2 3 5 8 13 21 34 55defcount(start , step):
num = start
whileTrue:yield num
num += step
x = count(3,5)#目前的x是迭代器对象for i inrange(10):print(next(x),end =' ')print()#Answer:3 8 13 18 23 28 33 38 43 48defdemo(*para):
average =sum(para)/len(para)#print(average)
g =[i for i in para if para[i]> average]return[average,]+list(g)#返回列表
g = demo(1,2,3,3,3,4,4,5,3,6,1,2,3,3,5,2,1,3)print(g)#Answer:[3.0, 5, 6, 5]defdemo(*para):
average =sum(para)/len(para)#print(average)
g =[i for i in para if para[i]> average]return(average,)+tuple(g)#返回元组
g = demo(1,2,3,3,3,4,4,5,3,6,1,2,3,3,5,2,1,3)print(g)#Answer:(3.0, 5, 6, 5)defget_A(s):#统计一个字符串的大写字母数量和小写字母数量
x, y =0,0for i inrange(len(s)):if s[i]>='A'and s[i]<='Z':
x +=1elif s[i]>='a'and s[i]<='z':
y +=1return(x, y)str="aoewinawioneAOWENOAINWEOITsswoinfaoinwe"
g = get_A(str)print(g)#Answer:(14, 25)defdemo(s):#函数等价于上述函数
g =[0,0]for ch in s:if ch.islower():
g[1]+=1elif ch.isupper():
g[0]+=1returntuple(g)str="aoewinawioneAOWENOAINWEOITsswoinfaoinwe"
g = demo(str)print(g)defreversek(s, k):#给一个字符串s,给一个下标k,实现k之前元素逆序,k之后元素逆序,再整体逆序
r =len(s)for i inrange(0, k):if i > k /2:break
s[i], s[k -1- i]= s[k -1- i], s[i]for i inrange(k , r):if(i >(r + k)/2):break
s[i], s[r -1- i]= s[r -1- i], s[i]for i inrange(0, r):if(i > r /2):break
s[i], s[r -1- i]= s[r -1- i], s[i]return s
str1 =[1,2,3,4,5,6,7,8,9]#str类型不能被搞来搞去,所以这里改成了列表
ans_str = reversek(str1 ,3)print(str1)defreverseK(s, k):#同上述函数
x = s[0: k-1:-1]#切片操作并反转
y = s[k-1:-1:-1]#切片操作并反转returnlist(reversed(x + y))
str1 =[1,2,3,4,5,6,7,8,9]#str类型不能被搞来搞去,所以这里改成了列表
ans_str = reversek(str1 ,3)print(str1)