day015-16 生成器面试题和内置函数

一、生成器面试题

  (一)容易的

 1 def demo():
 2     for i in range(4):
 3         yield i
 4 
 5 
 6 g = demo()
 7 g1 = (i for i in g)
 8 g2 = (i for i in g1)
 9 
10 
11 print(list(g1))
12 print(list(g2))
13 
14 # 求输出结果
15 # 主要考核生成器的特性

  (二)一般的

 1 def add(n, i):
 2     return n + i
 3 
 4 
 5 def test():
 6     for i in range(4):
 7         yield i
 8 
 9 
10 g = test()
11 for n in [1, 10]:
12     g = (add(n, i) for i in g)
13 
14 print(list(g))
15 
16 # 同求输出结果

  (三)升级的

 1 def add(n, i):
 2     return n + i
 3 
 4 
 5 def test():
 6     for i in range(4):
 7         yield i
 8 
 9 
10 g = test()
11 for n in [1, 10, 8, 7, 9, 666]:
12     g = (add(n, i) for i in g)
13 
14 print(list(g))

  (四)提示

    n = (add(n, i)  for i in  (add(n, i)  for i in(add(n, i)  for i in(add(n, i)  for i in(add(n, i)  for i in))))) 防止自己看不懂。

二、内置函数

  (一)名称

    print、input

    map、lambda、max、min、filter、sorted

    len、type、id

    open、dir

    str、int、bool、tuple、list、set、bytes

    eval、exec(ps:eval函数只能计算单个表达式的值,可以有返回值;而exec函数可以动态运行代码段,返回值永远为None)

  (二)用法 

    待补充 

三、作业

  1、用map来处理字符串列表,把列表中所有人都变成sb,比方xxx_sb

 1 name = ['alex','wupeiqi','yuanhao','nezha']
 2 
 3 
 4 def func(i):
 5     return i + '__sb'
 6 
 7 
 8 ret = map(func, name)  # ret is iter not list or tuple
 9 
10 print(list(ret))
View Code

  2、用filter函数处理数字列表,将列表中所有的偶数筛选出来。

 1 num = [1, 3, 5, 6, 7, 8]
 2 
 3 
 4 def func(x):
 5     if x % 2 == 0:
 6         return True
 7 
 8 
 9 ret = filter(func, num)
10 print(list(ret))
View Code

  3、随意写一个20行以上的文件。运行程序,先将内容读到内存中,用列表存储。接收用户输入页码,每页5条,仅输出当页的内容

 1 with open('file',encoding='utf-8') as f:
 2     l = f.readlines()
 3 page_num = int(input('请输入页码 : '))
 4 pages,mod = divmod(len(l),5) #求有多少页,有没有剩余的行数
 5 if mod:           # 如果有剩余的行数,那么页数加一
 6     pages += 1    # 一共有多少页
 7 if page_num > pages or page_num <= 0:   #用户输入的页数大于总数或者小于等于0
 8     print('输入有误')
 9 elif page_num == pages and mod !=0:    #如果用户输入的页码是最后一页,且之前有过剩余行数
10     for i in range(mod):
11         print(l[(page_num-1)*5 +i].strip())  #只输出这一页上剩余的行
12 else:
13     for i in range(5):
14         print(l[(page_num-1)*5 +i].strip())  #输出5行
View Code

  4、

 1 如下,每个小字典的name对应股票名字,shares对应多少股,price对应股票的价格
 2 portfolio = [
 3     {'name': 'IBM', 'shares': 100, 'price': 91.1},
 4     {'name': 'AAPL', 'shares': 50, 'price': 543.22},
 5     {'name': 'FB', 'shares': 200, 'price': 21.09},
 6     {'name': 'HPQ', 'shares': 35, 'price': 31.75},
 7     {'name': 'YHOO', 'shares': 45, 'price': 16.35},
 8     {'name': 'ACME', 'shares': 75, 'price': 115.65}
 9 ]
10 
11 6.1.计算购买每支股票的总价
12 ret = map(lambda dic : {dic['name']:round(dic['shares']*dic['price'],2)},portfolio)
13 print(list(ret))
14 
15 6.2.用filter过滤出,单价大于100的股票有哪些
16 ret = filter(lambda dic:True if dic['price'] > 100 else False,portfolio)
17 print(list(ret))
18 ret = filter(lambda dic:dic['price'] > 100,portfolio)
19 print(list(ret))

 

posted @ 2018-10-19 10:47  wangspy  阅读(45)  评论(0)    收藏  举报