分配学号
类型:字典
描述
附件中学院代码和专业代码文件中的数据是每个学院的编号和专业的编号,学生名单文件中有若干学生信息,学生出现的顺序是他在班级中排名顺序,每行中的数据用逗号分隔,各数据依顺代表:
- 学生姓名,学生性别,学院,专业名称,行政班(专业加班级号,例如经济1901),入学年级
请为其增加学号,学号创建规则是:
- 学生层次(本科为012)+入学年份后两位+学院代码+专业代码+班级号+班中排名。
例如,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
# -------- ------- --------
def readFile(filename):
with open(filename,'r',encoding='utf-8') as file: # 只读模式打开文件
ls = [line.strip().split(',') for line in file] # 文件全部内容读取出来放入列表中,每个元素为一行字符串
return ls # 以列表形式返回文件中的数据
def studentID(lsStudent,lsSchool,lsMajor): # 生成学号并插入到lsStudent中
dicSchool = { x[0]:x[1] for x in lsSchool} # 构建学院字典
dicMajor = {x[0]: x[1] for x in lsMajor} # 构建专业字典
detail = []
for student in lsStudent: # 生成学号
id = '012'
id = id + student[5][2:] + dicSchool[student[2]] + dicMajor[student[3]] + student[4][-4:]
# student[5][2:] 入学年份后2位,student[2]是学院,dicSchool[student[2]] 是学院编号,student[3]是专业, dicMajor[student[3]]是专业编号,student[4]是专业班级,如'新闻类1703', student[4][-4:]取班级编号后2位
id = id + '{0:0>2}'.format([x[0] for x in lsStudent if student[4] == x[4]].index(student[0]) + 1) # 查询学生在自己班级中的排序拼接到学号上
detail.append([id] + student) # 将学号和其他信息加入到列表中
return detail # 返回加了学号的学生信息
def info(stuName,lsStudent):
info = [info for info in lsStudent if info[1] == stuName][0] # 列表中仅有一个元素,取出这个元素
return info # 返回学生的详细信息
def classmate(stuClass,lsStudent):
classmate = [info for info in lsStudent if info[5] == stuClass]
return classmate # 返回同班同学的信息列表
if __name__ == '__main__':
stuName = input() # 输入学生姓名
stuClass = input() # 输入班级
student = 'studentList.csv'
school = 'schoolCode.csv'
major = 'MajorCode.csv'
lsStudent = readFile(student) # 获得学生信息列表
lsSchool = readFile(school) # 获得学院信息列表
lsMajor = readFile(major) # 获得专业信息列表
studentDetail = studentID(lsStudent, lsSchool, lsMajor) # 调用函数计算ID并插入到列表中
print(*info(stuName,studentDetail)) # 输出学生信息
lsclassmate = classmate(stuClass,studentDetail) # 返回同班同学信息列表
for classmate in lsclassmate: # 逐个输出同学信息
print(*classmate)
本人写的代码:
with open('schoolCode.csv', 'r', encoding='utf-8') as f:
school = dict([s.strip().split(',') for s in f.readlines()])
with open('MajorCode.csv', 'r', encoding='utf-8') as f:
major = dict([m.strip().split(',') for m in f.readlines()])
with open('studentList.csv', 'r', encoding='utf-8') as f:
student = [s.strip().split(',') for s in f.readlines()]
def generate_id(st, index):
res = '012' + st[-1][-2:] + school.get(st[2]) + major.get(st[3]) + st[-2][-4:] + '{:02}'.format(index)
return res
name = input()
tar_student = [s for s in student if s[0] == name][0]
tar_class_mate = [s for s in student if s[-2] == tar_student[-2]]
tar_id = generate_id(tar_student, tar_class_mate.index(tar_student) + 1)
print(tar_id, name, tar_student[1], tar_student[2], tar_student[3], tar_student[4], tar_student[5])
Class = input()
class_mate = [s for s in student if s[-2] == Class]
for s in class_mate:
s_id = generate_id(s, class_mate.index(s) + 1)
print(s_id, s[0], s[1], s[2], s[3], s[4], s[5])