编写程序来处理学生分数数据。
程序的输入包含以下两种格式之一的文本行:
学生的姓名和学生ID,分别为<student id>, <name>和
为一门课程的一名学生评分,为<student id>, <course name>, <marks>。
两种格式的示例是:
3190101234, Zhang San
3190101111, Linear Algebra, 89.5
逗号用作每个字段的分隔符,并且永远不会出现在任何字段中。请注意,人名和课程名称有多个词。为了使您的代码更容易,可以将分数视为double。
最初不知道学生的人数和课程的数量。开头的行数也不知道。不同格式的行不按顺序显示。一名学生可能不会每门课程都被录取。
您的程序应读入每一行并以.csv格式打印出摘要表。
输出的第一行是表头,包括如下字段:
student id, name, <course name 1>, <course name 2>, ..., average
课程名称是按字母顺序阅读的所有课程。每个逗号后应有一个空格。
然后,输出的每一行都是一个学生的数据,按其学生ID的升序排列,并带有每个课程的分数,例如:
3190101234, Zhang San, 85.0, , 89.5, , , 87.3
对于尚未注册的课程,请在逗号前留一个空白,并且不应计入平均值。平均值有一位小数。每个逗号后应有一个空格。
输出的最后一行是每个课程的平均分数的摘要行,例如:
, , 76.2, 87.4, , , 76.8
输出的所有数字(包括平均值)都保留一位小数。
输入格式
如上文所述。
输出格式
如上文所述。标准输出是由gcc编译的程序生成的,第一个小数点后一位是“ gcc方式”。
样本输入
3180111435, Operating System, 34.5
3180111430, Linear Algebra, 80
3180111435, Jessie Zhao
3180111430, Zhiwen Yang
3180111430, Computer Architecture, 46.5
3180111434, Linear Algebra, 61.5
3180111434, Anna Teng
样本输出
student id, name, Computer Architecture, Linear Algebra, Operating System, average
3180111430, Zhiwen Yang, 46.5, 80.0, , 63.2
3180111434, Anna Teng, , 61.5, , 61.5
3180111435, Jessie Zhao, , , 34.5, 34.5
, , 46.5, 70.8, 34.5, 50.6
字符串用split","做,然后用list读取就好了
https://blog.csdn.net/y_silence_/article/details/79339534
参考。
输出的话用print.format()这种就很妙了
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
data = '''3180111435, Operating System, 34.5
3180111430, Linear Algebra, 80
3180111435, Jessie Zhao
3180111430, Zhiwen Yang
3180111430, Computer Architecture, 46.5
3180111434, Linear Algebra, 61.5
3180111434, Anna Teng'''.split('\n')
course = set()
students = []
for i in data:
i = i.split(',')
student = {'score':0, 'n':0}
m = 1
for stu in students:
if stu['id'] == i[0]:
student = stu
m = 0
student['id'] = i[0]
if len(i)>2: # 成绩行
course.add(i[1])
student[i[1]] = i[2]
student['score'] += float(i[2])
student['n'] += 1
else: # 姓名行
student['name'] = i[1]
if m!=0:
students.append(student)
students = sorted(students, key = lambda i:i['id'])
course = sorted(course)
for i in students:
i['average'] = round(i['score']/i['n'],1)
scores = [0]*len(course) # 这一科目的均值
num = [0]*len(course)
course = list(course)
for i in range(len(course)):
for j in students:
if course[i] in j.keys():
num[i] += 1
scores[i] += float(j[course[i]])
ave1 = [0]*len(course)
for i in range(len(scores)):
ave1[i] = round(scores[i]/num[i],1)
# 打印表头
print('student id, name,',end='')
[print(i,end=',') for i in course]
print('average')
# 输出学生的信息
for a, k in enumerate(students):
print(k['id'],',',k['name'],end=',')
score = 0
number = 0
for i in course:
try:
print(k[i],end=',')
except:
print(' ',end=',')
print(k['average'])
# 打印最后一行平均值
print(' , ,', end=' ')
b = 0
for i in ave1:
print(i,end=',')
b += i
print(round(b/len(course), 1))
有简单方法麻烦和我说一声,也让我看看,笨办法就这样了
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y