python入门练习题3(函数)

时间:2021-07-17 11:47:07

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()