设为首页 收藏本站
查看: 654|回复: 0

[经验分享] Python练习题(day4)

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2018-8-10 09:44:16 | 显示全部楼层 |阅读模式
一、生成器练习:  1、自定义函数模拟range(1,7,2)
  def my_range(start,stop,step=1):
  while start<stop:
  yield start
  start+=step
  obj=my_range(1,7,2)
  print(next(obj))
  print(next(obj))
  print(next(obj))
  print(next(obj))  #StopIteration 为什么不能在函数里面加异常处理的原因是,只有在取值的时候才会有异常,函数中没涉及取值
  2、模拟管道,实现功能:tail -f access.log | grep '404'
  def tail(file):
  import time
  with open(file,'rb') as f:
  f.seek(0,2)
  while True:
  line = f.readline()
  if line:
  # print(line)
  yield  line
  else:
  # continue  不要直接continue,会变成死循环 消耗资源
  time.sleep(0.05)
  def grep(lines,pattern):
  for line in lines:
  line = line.decode('utf-8')
  if pattern in line:
  yield  line
  for line in grep( tail('access.log'),'404'):
  print(line, end='')
  附加:另一个向access.log文件里面输入字符的py程序
  with open('access.log','a',encoding='utf-8') as f:
  f.write('出错啦404\n')
  f.flush()
  3、编写装饰器,实现初始化协程函数的功能
  4、实现功能:grep  -rl  'python'  /etc
  二、声明式编程练习题
  1、将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写
  names=['egon','alex_sb','wupeiqi','yuanhao']
  names=[name.upper() for name in names]
  print(names)
  2、将names=['egon','alex_sb','wupeiqi','yuanhao']中以sb结尾的名字过滤掉,然后保存剩下的名字长度
  names=['egon','alex_sb','wupeiqi','yuanhao']
  names=[name for name in names if name.endswith('sb') ]
  print(names)
  3、求文件a.txt中最长的行的长度(长度按字符个数算,需要使用max函数)
  with open('a.txt','r',encoding='utf-8') as f:
  print(max(len(line) for line in f))
  4、求文件a.txt中总共包含的字符个数?思考为何在第一次之后的n次sum求和得到的结果为0?(需要使用sum函数)
  with open('a.txt', 'r', encoding='utf-8') as f:
  print(sum(len(line) for line in f))
  print(sum(len(line) for line in f))  #求包换换行符在内的文件所有的字符数,为何得到的值为0?
  5、思考题
  with open('a.txt') as f:
  g=(len(line) for line in f)
  print(sum(g)) #为何报错?
  6、文件shopping.txt内容如下
  mac,20000,3
  lenovo,3000,10
  tesla,1000000,10
  chicken,200,1
  求总共花了多少钱?
  打印出所有商品的信息,格式为[{'name':'xxx','price':333,'count':3},...]
  求单价大于10000的商品信息,格式同上
  #每次必须重新打开文件或seek到文件开头,因为迭代完一次就结束了
  with open('a.txt',encoding='utf-8') as f:
  info=[line.split() for line in f]
  cost=sum(float(unit_price)*int(count) for _,unit_price,count in info)
  print(cost)
  with open('a.txt',encoding='utf-8') as f:
  info=[{
  'name': line.split()[0],
  'price': float(line.split()[1]),
  'count': int(line.split()[2]),
  } for line in f]
  print(info)
  with open('a.txt',encoding='utf-8') as f:
  info=[{
  'name': line.split()[0],
  'price': float(line.split()[1]),
  'count': int(line.split()[2]),
  } for line in f if float(line.split()[1]) > 10000]
  print(info)
  三、阶段性练习
  1、文件内容如下,标题为:姓名,性别,年纪,薪资
  egon male 18 3000
  alex male 38 30000
  wupeiqi female 28 20000
  yuanhao female 28 10000
  要求:
  从文件中取出每一条记录放入列表中,
  列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式
  2、根据1得到的列表,取出薪资最高的人的信息
  3、根据1得到的列表,取出最年轻的人的信息
  4、根据1得到的列表,将每个人的信息中的名字映射成首字母大写的形式
  5、根据1得到的列表,过滤掉名字以a开头的人的信息
  6、使用递归打印斐波那契数列(前两个数的和得到第三个数,如:0 1 1 2 3 4 7...)
  7、一个嵌套很多层的列表,如l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]],用递归取出所有的值
  #1
  with open('db.txt') as f:
  items=(line.split() for line in f)
  info=[{'name':name,'sex':sex,'age':age,'salary':salary} \
  for name,sex,age,salary in items]
  print(info)
  #2
  print(max(info,key=lambda dic:dic['salary']))
  #3
  print(min(info,key=lambda dic:dic['age']))
  # 4
  info_new=map(lambda item:{'name':item['name'].capitalize(),
  'sex':item['sex'],
  'age':item['age'],
  'salary':item['salary']},info)
  print(list(info_new))
  #5
  g=filter(lambda item:item['name'].startswith('a'),info)
  print(list(g))
  #6
  #非递归
  def fib(n):
  a,b=0,1
  while a < n:
  print(a,end=' ')
  a,b=b,a+b
  print()
  fib(10)
  #递归
  def fib(a,b,stop):
  if  a > stop:
  return
  print(a,end=' ')
  fib(b,a+b,stop)
  fib(0,1,10)
  #7
  l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]]
  def get(seq):
  for item in seq:
  if type(item) is list:
  get(item)
  else:
  print(item)
  get(l)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-549511-1-1.html 上篇帖子: Python3 错误和异常 下篇帖子: Python3 模块
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表