`
wwweducn
  • 浏览: 29721 次
文章分类
社区版块
存档分类
最新评论

函数、程序-python综合练习 -by小雨

阅读更多

这两天笔者几篇文章介绍了改函数、程序-的文章. 关联文章的地址

    有一个包括上面容内的件文record.txt

#name, age, score
tom, 12, 86
Lee, 15, 99
Lucy, 11, 58
Joseph, 19, 56

根据容内,写一个Python程序来成完以下的问题:

    第一栏为姓名(name),第二栏为纪年(age),第三栏为得分(score)

    1)打印如下结果:

    得分低于60的人都有谁?

    谁的名字以L头开?

    有所人的总分是多少?

    2)姓名的首字母要需大写,该record.txt是不是符合此要求? 如何改正错误的方地?

    首先创立一个类,并在类的__init__构造函数中对name,age,score性属赋值

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 class UserAll:
5     def __init__(self, name, age, score):
6         self.name   = name
7         self.age    = age
8         self.score  = score

然后取读件文,判断首个符字是不是是#,并且把首字母是小写的更新成大写

 1 file_name   = 'record.txt'
 2 user = []
 3 update_user = []
 4 
 5 f = open(file_name)
 6 for line in f:
 7     if not line.startswith('#'):
 8         if line[0].islower():
 9             line = line[0].upper() + line[1:]
10         user_list = line.strip().split(', ')
11         user.append(UserAll(user_list[0], user_list[1], user_list[2]))
12     update_user.append(line)
13 
14 f.close()
15 f = open(file_name, 'w')
16 f.write(''.join(update_user))

接下来,我们通过filter函数式编程工具来行进数据的滤过,掏出那些得分小于60和名字首字母是L的用户,并终最打印出来。

1 print "得分小于60的同窗:"
2 for user_score in filter(lambda s: s.score < 60, user):
3     print user_score.name
4 
5 print "首字母是L的同窗:"
6 for user_start in filter(lambda s: s.name.startswith('L'), user):
7     print user_start.name

接下来我们统计有所同窗得分,只要需把每一个同窗的分数相加就好了,可以通过map和lambda函数组合来发生一个只包括每一个同窗得分的表列。最后通过reduce函数式编程工具来行进和求。

1 all_scores = map(lambda s: s.score, user)
2 print "有所同窗的总得分是:%s" % reduce(lambda x, y: x + y, all_scores)

终最程序的运行结果

    

 

 

文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
  写字楼里写字间,写字间里程序员;
  程序人员写程序,又拿程序换酒钱。
  酒醒只在网上坐,酒醉还来网下眠;
  酒醉酒醒日复日,网上网下年复年。
  但愿老死电脑间,不愿鞠躬老板前;
  奔驰宝马贵者趣,公交自行程序员。
  别人笑我忒疯癫,我笑自己命太贱;
  不见满街漂亮妹,哪个归得程序员。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics