计算机二级python真题
文章目录
- 计算机二级python真题
- 一、简单应用——明星投票
- 二、综合应用题《评奖学金 两问》
一、简单应用——明星投票
描述使用字典和列表型变量完成最有人气的明星的投票数据分析。投票信息由附件里的文件vote.txt给出,一行只有一个明星姓名的投票才是有效票
。有效票中得票最多的明星当选最有人气的明星。
问题一:请统计有效票张数
。在编程模板中补充代码完成程序。
像一行同时出现 (孙俪 杨幂)则为无效票
附图vote.txt截图
代码:
with open("vote.txt",encoding="utf-8") as f:
names = f.readlines()
n = 0
for name in names:
num = len(name.split(" "))
if num == 1:
n+=1
print("有效票{}张".format(n))
问题二:请给出当选最有人气明星的姓名和票数。
with open("vote.txt",encoding="utf-8") as f:
names = f.readlines()
D = {}
for name in names:
if len(name.split(" "))==1:
D[name[:-1]]=D.get(name[:-1],0) + 1
l = list(D.items())
l.sort(key=lambda s:s[1],reverse = True)
name = l[0][0]
score = l[0][1]
print("最具人气明星为:{},票数为:{}".format(name, score))
二、综合应用题《评奖学金 两问》
某班学生评选一等奖学金,学生的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名;
给出按总成绩从高到底排序的前10名学生名单,并写入文件candidate0.txt,每行纪录一个学生的信,息,分别为学生学号、姓名以及10门课成绩。补充,修改编程模板中的代码完成这些功能。
代码:
fi = open("score.txt", "r", encoding="utf-8")
lines = fi.readlines()
D = [] # 单个学生的数据
L = [] # 所有学生原始成绩和总成绩
# 读取学生单科成绩并计算总成绩
for line in lines:
D = line.split()
s = 0 # 每个学生的总成绩初始值
for i in range(10):
s += int(D[i + 2]) # 各科成绩累加求和,+2是因为前两个元素是学号和姓名
D.append(s)
L.append(D)
fi.close()
L.sort(key=lambda x: x[-1], reverse=True) # 按学生总成绩从大到小排序
fo = open('candidate0.txt', 'w', encoding="utf-8")
for i in range(10): # 取前十个学生数据
for j in range(len(L[i])-1): # 一个学生的各项数据
fo.write('{} '.format(L[i][j])) # 文件中写入各项数据,用空格隔开
fo.write('\n') # 换行
fo.close()
问题2:全部课程及格(成绩大于等于60) 。(下一题的答案中会增加判断条件)
问题2:读取文件candidate0.txt,从中选出候选人,并将学号和姓名写入文件candidate.txt,格式如下:
1010112161722 张三
1010112161728 李四
……
代码:
fi = open('candidate0.txt', encoding="utf-8")
ls = []
for line in fi:
ls.append(line.strip().split())
fi.close()
fo = open('candidate.txt', 'w', encoding="utf-8")
for l in ls:
for i in range(2, len(l)):
if eval(l[i]) < 60:
break
else:
fo.write('{} {}\n'.format(l[0], l[1]))
fo.close()