某班学生评选一等奖学金,学生的10门主干课程成绩存在附件score.txt中,每行为一个学生的信息,分别纪录了学生学号、姓名以及10门课成绩,格式如下:
1820161043 郑珉镐 68 66 83 77 56 73 61 69 66 78
1820161044 沈红伟 91 70 81 91 96 80 78 91 89 94
…
从这些学生中选出奖学金候选人。条件如下:
1:总成绩排名在前10名;
2:全部课程及格(成绩大于等于60)。
问题1:给出按总成绩从高到底排序的前10名学生名单,并写入文件candidate0.txt,每行纪录一个学生的信息,分别为学生学号、姓名以及10门课成绩。
f = open("score.txt", "r", encoding="utf-8")
D = [] # 单个学生的数据
L = [] # 所有学生原始成绩和总成绩
# 读取学生单科成绩并计算总成绩
for line in f.readlines():
D = line.split()
s = 0 # 每个学生的总成绩初始值
for i in range(10):
s += int(D[i + 2]) # 各科成绩累加求和,+2是因为前两个元素是学号和姓名
D.append(s)
L.append(D)
f.close()
L.sort(key=lambda x: x[-1], reverse=True) # 按学生总成绩从大到小排序
f = open('candidate0.txt', 'w', encoding="utf-8")
for i in range(10): # 取前十个学生数据
for j in range(len(L[i]) - 1): # 一个学生的各项数据
f.write('{} '.format(L[i][j])) # 文件中写入各项数据,用空格隔开。f.write()向文件写入一个字符串或字节流。
f.write('\n') # 换行
f.close()
问题2:读取文件candidate0.txt ,从中选出候选人,并将学号和姓名写入文件candidate.txt,格式如下:
1010112161722 张三
1010112161728 李四
…
f = open("candidate0.txt", 'r', encoding="utf-8") #正式考试可以不用指定编码,用系统默认。
lines = f.readlines()
f.close()
D = []
f = open('candidate.txt', 'w', encoding="utf-8") #正式考试可以不用指定编码,用系统默认。
for line in lines:
D = line.split()
for i in range(10):
if int(D[i + 2]) < 60:
break
else:
f.write('{} {}\n'.format(D[0], D[1]))
f.close()