7-2 输出成绩信息
7-2 输出成绩信息
分数 8
作者 殷伟凤
单位 浙江传媒学院
输入学生的学号、姓名、性别、三门课程成绩,以“#”结束,其中学号、姓名和性别为字符串,成绩可以是整数或浮点数。
按学号顺序输出学生的学号、姓名、性别和平均成绩,以空格隔开。
并依次列出每门课程的平均成绩、最高成绩、最低成绩、不及格人数。
若只输入“#”,则输出“没有学生信息!”
提示:其中平均成绩保留两位小数,如成绩为x,则以int(x*100)/100的形式输出
输入格式:
每一行输入一个学生的学号、姓名、性别和三门课程成绩,最后一行输入“#”
输出格式:
按学号顺序输出学生的学号、姓名、性别和平均成绩,以空格隔开。一行表示一个学生
然后输出一个空行
输出每门课程的平均成绩、最高成绩、最低成绩、不及格人数。一行表示一门课程
输入样例:
在这里给出一组输入。例如:
abc10 ccc 男 100 50 90
aaca01 aaa 女 90 90 90
bcd1002 bbb 男 80 86 89
1004 ddd 女 59 45 98
#
输出样例:
在这里给出相应的输出。例如:
1004 ddd 女 67.33
aaca01 aaa 女 90.0
abc10 ccc 男 80.0
bcd1002 bbb 男 85.0
82.25 100 59 1
67.75 90 45 2
91.75 98 89 0
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
解题思路
输入
首先接收数据的时候需要注意,成绩可能是小数也可能是整数,那么我们需要对精度做一个处理,最好是用eval这个函数来接收,这样能确保精度不丢失,同时,输出的时候不需要进行转换。另外需要判断没有输入的情况,此时输出“没有学生信息!”。
统计成绩
题目中有两种平均成绩,一个是每一个人的平均成绩(三科之和),还有一个是科目的平均成绩。
我们需要统计的全部信息为:
- 学生的学号
- 姓名
- 性别
- 平均成绩
- 每门课程的平均成绩
- 最高成绩
- 最低成绩
- 不及格人数
存储结构设计
可见,我们需要统计的内容较多,这里我们分上半部分和下半部分统计,前四项用一个容器list类型即可,后四项使用字典类型,这里举例如下结构:
上半部分的存储结构设计
top = ['202062476' '黄宏哲', ['男',100,99,95]]
#下半部分存储结构设计
#第一门科目代表字典的键 `1`
#第一个值为list类型,里面嵌套一个list和另外一个元素,其中前台的list有四个元素即为科目所有成绩,另外那个元素为不及格人数。
bottom = {1:[[100,90,80,50],1],2:[100,90,80,70],0,3:[100,90,80,70],0}
代码实现
import sys
def get_unqualified(l: list) -> int:
count = 0
for i in l:
if i < 60:
count += 1
return count
class Student:
def __init__(self):
self.items = {}
self.print_top = []
self.print_bottom = []
self.man = 0
# 初始化
for _ in range(1, 4):
self.items[_] = [[], 0]
def __str__(self):
self.input()
self.count()
self.print_top.sort()
message = ["\n".join(self.print_top), '', "\n".join(self.print_bottom)]
return "\n".join(message)
def count(self):
for i in self.items:
ave = sum(self.items[i][0]) / self.man
unqualified = get_unqualified(self.items[i][0])
min_ = min(self.items[i][0])
max_ = max(self.items[i][0])
bottom = f'{int(ave * 100) / 100} {max_} {min_} {unqualified}'
self.print_bottom.append(bottom)
def input(self):
while 1:
line = input()
if line == '#':
break
else:
self.man += 1
student_id = line.split()[0]
name = line.split()[1]
sex = line.split()[2]
course1 = eval(line.split()[3])
course2 = eval(line.split()[4])
course3 = eval(line.split()[5])
p_course = course1 + course2 + course3
p_ave_ = p_course / 3
p_ave = "{}".format(int(p_ave_ * 100) / 100)
self.print_top.append(" ".join([student_id, name, sex, p_ave]))
self.items[1][0].append(course1)
self.items[2][0].append(course2)
self.items[3][0].append(course3)
# 判断没有输入的情况
if self.man == 0:
print('没有学生信息!')
sys.exit(0)
print(Student())

浙公网安备 33010602011771号