分配学号
类型:列表元组
一、描述
文件“schoolCode.csv”和“MajorCode.csv”中的数据是每个学院的编号和专业的编号,“studentList.csv”文件中有若干学生信息,学生出现的顺序是他在班级中排名顺序,每行中的数据用逗号分隔,各数据依顺代表:
学生姓名,学生性别,学院,专业名称,行政班(专业加班级号,例如经济1901),入学年级。
假如本科的学生层次编号为012,请为“studentList.csv”中的数据增加学号,学号创建规则是:
学生层次+入学年份后两位+学院代码+专业代码+班级号+班中排名。
例如:012171985170110 表示本科生、2017年入学、文法学院、 编辑出版专业、1701班、排名为10的同学
输入格式说明
第一行输入学生姓名
第二行输入班级
输出格式说明
第一行输出该学生的学号、学生姓名、学生性别、学院、专业名称、行政班、入学年级信息,各项之间空格分隔
其后分行输出该班级所有同学的学号、学生姓名、学生性别、学院、专业名称、行政班、入学年级信息,各项之间空格分隔
示例 1
输入:
段宁
金融gj1701
输出:
012142172140101 段宁 女 国际学院 金融 金融gj1401 2014
012172172170101 罗愚 女 国际学院 金融 金融gj1701 2017
012172172170102 卢佳 女 国际学院 金融 金融gj1701 2017
012172172170103 张郁 女 国际学院 金融 金融gj1701 2017
二、代码实现:
# -------- ------- --------
# @Author : 赵广辉
# @Contact: vasp@qq.com
# @Company: 武汉理工大学
# @Version: 1.0
# @Modify : 2022/06/13 11:33
# Python程序设计基础,赵广辉,高等教育出版社,2021
# Python程序设计基础实践教程,赵广辉,高等教育出版社,2021
# -------- ------- --------
####### BEGIN HELPER FUNCTIONS ####################
# read_file()函数帮助你读取文件到列表,直接调用就可以,此段不需修改
def read_file(filename):
"""接收一个文件名为参数,数据类型为字符串类型,文件编码为utf-8,
返回值为列表,列表元素为将文件每一行根据逗号切分成的列表"""
with open(filename, 'r', encoding='utf-8') as file:
file_to_list = [line.strip().split(',') for line in file]
# 文件全部内容读取出来放入列表中,每个元素为一行字符串
return file_to_list # 以列表形式返回文件中的数据
####### END HELPER FUNCTIONS ####################
def student_id(ls_student, ls_school, ls_major):
"""参数为三个文件对象,依序分别由读学生信息、学院信息和专业信息文件获得。返回值为列表,为包含了新生成的学号的学生信息列表。"""
student_detail = []
ID = 1
dic = {}
for item in ls_student:
s = '012'
s += item[-1][-2:]
dic[item[-2]] = dic.get(item[-2], 0) + 1
for i in ls_school:
if item[2]==i[0]:
s += i[1]
break
for i in ls_major:
if item[3]==i[0]:
s += i[1]
break
s += item[4][-4:]
if dic[item[-2]]<10:
s += '0'
s += str(dic[item[-2]])
ls = [s]
for i in item:
ls.append(i)
student_detail.append(ls)
# =============================== #
# 此处按文档注释要求补充你的代码
# =============================== #
return student_detail # 返回加了学号的学生信息列表
def student_info(stu_name, ls_student):
"""参数为学生名字字符串和学生的信息列表,返回值为该学生的详细信息"""
for item in ls_student:
if stu_name==item[1]:
return item
"""参数为学生班级和学生信息列表,返回值为同班同学的信息列表"""
# =============================== #
# 此处按文档注释要求补充你的代码
# =============================== #
def classmate(stu_class, ls_student):
"""参数为学生班级和学生信息列表,返回值为同班同学的信息列表"""
mate_ls = []
for item in ls_student:
if stu_class==item[-2]:
mate_ls.append(item)
# =============================== #
# 此处按文档注释要求补充你的代码
# =============================== #
return mate_ls
if __name__ == '__main__':
stuName = input() # 输入学生姓名
stuClass = input() # 输入班级
student_list = read_file('studentList.csv')[1:] # 获得学生信息列表
school_code = read_file('schoolCode.csv') # 获得学院信息列表
major_code = read_file('MajorCode.csv') # 获得专业信息列表
studentDetail = student_id(student_list, school_code, major_code) # 调用函数计算ID并插入到列表中
print(*student_info(stuName, studentDetail)) # 输出学生信息
ls_classmate = classmate(stuClass, studentDetail) # 返回同班同学信息列表
for classmate in ls_classmate: # 逐个输出同学信息
print(*classmate)