python入门练习题3(函数)
1.写函数:
如有以下两个列表
l1 = [...]
l2 = []
第一个列表中的数字无序不重复排列,第二个列表为空列表
需求: 取出第一个列表的最小值 放到第二个列表的首个位置,
取出第一个列表的最小值(仅大于上一次的最小值) 放到第二个列表的首个位置,
取出第一个列表的最小值(仅大于上一次的最小值) 放到第二个列表的首个位置, ... 依此类推,从而获取一个有序的列表l2 ,并将其返回给函数调用者。
1 l1 = [11,33,44,2,66] 2 l2 = [] 3 def foo(x,y): 4 for item in range(len(x)): 5 v = min(x) 6 y.insert(0,v) 7 x.remove(v) 8 return y 9 print(foo(l1,l2)) 10
2,写程序
1 利用递归实现 1 * 2 * 3 * 4 * 5 * 6 * 7 2 3 count = 0 4 a = 1 5 def calc(count,a): 6 count +=1 7 if count <= 7: 8 a = a*count 9 print(a) 10 else: 11 return 12 calc(count,a) 13
3,通过yield实现在单线程的情况下实现并发运算的效果
1 1 import time 2 2 def consumer(name): 3 3 print('%s准备吃包子啦!' %name) 4 4 while True: 5 5 baozi = yield # 生成器遇到yield就会终止该函数的操作,并且会将函数执行的状态挂起, 6 6 # 直到send来恢复当前状态,然后继续执行以下的代码 7 7 print('包子[%s]来啦!,被[%s]吃了!!' %(baozi,name)) 8 8 def producer(): 9 9 c = consumer('laiying') # 创建了一个生成器c 10 10 b = consumer('zcy') # 创建了一个生成器b 11 11 c.__next__() # 通过c.__next__()执行consumer这个生成器 12 12 b.__next__() # 通过c.__next__()执行consumer这个生成器 13 13 print('陈师傅要开始做包子啦!') 14 14 for i in range(1,10): 15 15 time.sleep(2) 16 16 print('做了2个包子') 17 17 c.send(i) # 通过send方法去恢复yield的挂起状态,并将变量i的值传递给yield 18 18 b.send(i) #其实__next__方法也可以恢复yield的挂起状态,但是__next__不能传值给yield 19 19 producer()