计算机二级python真题
一、简单应用题——字符串长度对比
设计打字测试功能代码。
默认原始字符串为“我爱你中国”,如果输入的字符串长度与原始字符串长度相同,则调用编程模板中Percentage 函数去计算这两个字符串对应位置相同的字符个数占字符总长度的百分比,按照示例的格式输出;
请参考编程模板及输入输出示例,完善程序。
示例1:
输入:“我爱你中国
输出:“我爱你中国”
输出:“100.00%”
示例 2:
输入: “我爱你江苏”
输出:“我爱你中国"
输出:“60.00%”
示例 3:
输入: “我爱你”
输出:“我爱你中国”
输出: “输入字符串长度不一致,请重新运行本程序!”
代码:
def Percentage(str1,str2):
n = 0
for s1,s2 in zip(str1,str2):
if s1 == s2:
n += 1
return n/len(str1)
s1 = "我爱你中国"
print(s1)
s2 = input()
if len(s1) != len(s2):
print("输入字符串长度不一致,请重新运行本程序!")
else:
print("{:.2%}".format(Percentage(s1,s2)))
Zip() 函数:https://www.runoob.com/python/python-func-zip.html
二、综合应用题——奖学金评选之一
某班级评选奖学金,奖学金人选条件是:1)总成绩排名在前 10 名;2)全部课程及格(成绩大于等于60)
所有学生的 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 和问题 2 的功能。(共2问,解答问题1)
问题1: 请筛选出按总成绩从高到低排序的前10名学生名单,并写入文件candidate0.txt,每行记录一个学生的信息,分别为学生学号、姓名、10 门课成绩以及总成绩。
文件candidate0 txt 的行记录参老格式如下:
1120161858 房某某 95 96 93 54 93 100 84 97 94 87 893
……
代码:
fi = open("score.txt","r")
lines = fi.readlines()
fi.close()
D = [] #单个学生的数据
L = [] #所有学生原始成绩和总成绩
#读取学生单科成绩并计算总成绩
for line in lines:
D = line.strip().split()
sum =0
for i in range(2,12):
sum += int(D[i])
D.append(sum)
L.append(D)
L.sort(key=lambda x:x[-1],reverse=True) #按学生总成绩从大到小排序
fo = open('candidate0.txt','w')
for i in range(10):
for j in range(len(L[i])): #前十个学生数据写入文件中
fo.write("{} ".format(L[i][j]))
fo.write("\n")
fo.close()
问题2: 读取文件 candidate0.txt,根据评选条件 2,选出候选人,并将学号和姓名写入文件candidate.txt,格式如下:
1120161719王某某
……
代码:
fi = open("candidate0.txt",'r')
lines = fi.readlines()
fi.close()
D = []
fo = open('candidate.txt','w')
for line in lines:
D = line.split()
for i in range(2,12):
if int(D[i]) < 60:
break
else:
fo.write('{}{}\n'.format(D[0],D[1]))
fo.close()