函数题:德才兼备 - 实验16 数据分析之排序 - 《Python编程基础及应用实验教程》 - 高教社
某公司进行了一场招聘考试,考试内容包括笔试和实践考核,考试成绩均采用百分制。公司领导喜欢阅读《资治通鉴》,看重实践操作能力,仿照其“德才论”的方式制定了录取规则如下:
![image.png](~/72348678-e487-46aa-8177-f1946163b0af.png)
<br>
请定义classify()和admissionSort()两个函数。
<br>完整的程序逐行从键盘读取应聘者信息,一个应聘者为一行,包含报名号、实践成绩和笔试成绩,数据项之间用空格分开。请将达到最低录取要求的应聘者分类,并按上述规则确定录取先后顺序。<br>
输出要求:第一行首先给出达到最低录取要求的总人数,随后每行按照输入格式输出一位应聘者的信息,按录取先后顺序输出。
【问题分析】<br>
按函数式编程,对问题自上而下设计如下。
* 数据读取:使用getdata( )函数读取应聘者信息并返回应聘者信息数据列表。
* 分类:使用函数classify( )把满足要求的应聘者分成4类,并返回4个类别的子列表。
* 排序:分别对四类应聘者按总分、实践操作分降序,报名号升序排序,并返回排好序的列表。使用admissionSort( )函数完成。
* 输出录取人数和录取顺序使用myPrintL( )函数完成。
* 编写一个main函数,调用上述函数,实现完整功能。
### 函数接口定义:
python
def classify(listT)
def admissionSort(a,b,c,d)
### 裁判测试程序样例:
python
def getdata( ):
"""从文件读取应聘者信息"""
s = []
while True:
line = input()
if not line:
break
s.append(line.split())
return s
#在此处定义两个函数
def myPrintL(listA):
"""输出录取人数和按录取顺序排列的应聘者名单"""
print("上线人数",len(listA))
for j in listA:
print(" ".join(j))
def main():
listA = getdata()#获取原始数据
a, b, c, d = classify(listA)
admissionList=admissionSort( a, b, c, d)#生成录取顺序名单
myPrintL(admissionList)
main()
### 输入样例:
注意输入的末位应包括一个连空格都不包含的空行,以表示输入的结束。
in
10001 63 91
10002 90 60
10011 84 81
10003 84 81
10004 81 84
10005 82 76
10006 83 75
10007 90 78
10008 76 79
10009 59 90
10010 88 45
10012 80 100
10013 90 99
10014 65 60
### 输出样例:
out
上线人数 12
10013 90 99
10012 80 100
10003 84 81
10011 84 81
10004 81 84
10007 90 78
10006 83 75
10005 82 76
10002 90 60
10014 65 60
10008 76 79
10001 63 91
【解题提示】
按总分、实践分降序,学号升序排序可采用如下的匿名函数写法:
python
key=lambda x : (-(int(x[1])+int(x[2])),-int(x[1]),int(x[0]))
![image.png](~/b6efa9f1-eaa7-4186-b9ae-4d052c91892b.png)
![image.png](~/d723366e-b645-400d-a7ac-42cd177de16f.png)
<br>
注意:只向系统提交两个函数的定义代码,不要提交完整程序。
<br>**拼尽全力还是不会?参考B站习题讲解**<br>
哔哩哔哩up主:[海洋饼干叔叔](https://space.bilibili.com/384177380) [Python课程](https://www.bilibili.com/video/BV1kt411R7uW/)
[Python习题](https://www.bilibili.com/video/BV1iL411t7UZ/)
[简洁的C和C++](https://www.bilibili.com/video/BV1it411d7zx/)
作者每天分享一篇关于C/C++/Python的技术文章,学习编程不迷路。
![image.png](~/7c4cfd2d-8e3e-40cd-826d-299d4200e600.png)
答案:若无答案欢迎评论
![image.png](~/72348678-e487-46aa-8177-f1946163b0af.png)
<br>
请定义classify()和admissionSort()两个函数。
<br>完整的程序逐行从键盘读取应聘者信息,一个应聘者为一行,包含报名号、实践成绩和笔试成绩,数据项之间用空格分开。请将达到最低录取要求的应聘者分类,并按上述规则确定录取先后顺序。<br>
输出要求:第一行首先给出达到最低录取要求的总人数,随后每行按照输入格式输出一位应聘者的信息,按录取先后顺序输出。
【问题分析】<br>
按函数式编程,对问题自上而下设计如下。
* 数据读取:使用getdata( )函数读取应聘者信息并返回应聘者信息数据列表。
* 分类:使用函数classify( )把满足要求的应聘者分成4类,并返回4个类别的子列表。
* 排序:分别对四类应聘者按总分、实践操作分降序,报名号升序排序,并返回排好序的列表。使用admissionSort( )函数完成。
* 输出录取人数和录取顺序使用myPrintL( )函数完成。
* 编写一个main函数,调用上述函数,实现完整功能。
### 函数接口定义:
python
def classify(listT)
def admissionSort(a,b,c,d)
### 裁判测试程序样例:
python
def getdata( ):
"""从文件读取应聘者信息"""
s = []
while True:
line = input()
if not line:
break
s.append(line.split())
return s
#在此处定义两个函数
def myPrintL(listA):
"""输出录取人数和按录取顺序排列的应聘者名单"""
print("上线人数",len(listA))
for j in listA:
print(" ".join(j))
def main():
listA = getdata()#获取原始数据
a, b, c, d = classify(listA)
admissionList=admissionSort( a, b, c, d)#生成录取顺序名单
myPrintL(admissionList)
main()
### 输入样例:
注意输入的末位应包括一个连空格都不包含的空行,以表示输入的结束。
in
10001 63 91
10002 90 60
10011 84 81
10003 84 81
10004 81 84
10005 82 76
10006 83 75
10007 90 78
10008 76 79
10009 59 90
10010 88 45
10012 80 100
10013 90 99
10014 65 60
### 输出样例:
out
上线人数 12
10013 90 99
10012 80 100
10003 84 81
10011 84 81
10004 81 84
10007 90 78
10006 83 75
10005 82 76
10002 90 60
10014 65 60
10008 76 79
10001 63 91
【解题提示】
按总分、实践分降序,学号升序排序可采用如下的匿名函数写法:
python
key=lambda x : (-(int(x[1])+int(x[2])),-int(x[1]),int(x[0]))
![image.png](~/b6efa9f1-eaa7-4186-b9ae-4d052c91892b.png)
![image.png](~/d723366e-b645-400d-a7ac-42cd177de16f.png)
<br>
注意:只向系统提交两个函数的定义代码,不要提交完整程序。
<br>**拼尽全力还是不会?参考B站习题讲解**<br>
哔哩哔哩up主:[海洋饼干叔叔](https://space.bilibili.com/384177380) [Python课程](https://www.bilibili.com/video/BV1kt411R7uW/)
[Python习题](https://www.bilibili.com/video/BV1iL411t7UZ/)
[简洁的C和C++](https://www.bilibili.com/video/BV1it411d7zx/)
作者每天分享一篇关于C/C++/Python的技术文章,学习编程不迷路。
![image.png](~/7c4cfd2d-8e3e-40cd-826d-299d4200e600.png)
答案:若无答案欢迎评论