这两天笔者几篇文章介绍了改函数、程序-的文章. 关联文章的地址
有一个包括上面容内的件文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)
终最程序的运行结果
文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗
写字楼里写字间,写字间里程序员;
程序人员写程序,又拿程序换酒钱。
酒醒只在网上坐,酒醉还来网下眠;
酒醉酒醒日复日,网上网下年复年。
但愿老死电脑间,不愿鞠躬老板前;
奔驰宝马贵者趣,公交自行程序员。
别人笑我忒疯癫,我笑自己命太贱;
不见满街漂亮妹,哪个归得程序员。