每日一题 | PAT乙级1004成绩排名
题目
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
注意:对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
示例
输入:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出:
Mike CS991301
Joe Math990112
思路
难度简单
。
思路简单,代码逻辑复杂。
解题流程
-
查到有几个学生(准备循环比较)
-
定义一个student列表,用于承装数据(成绩int()函数,其他字符串)
-
通过循环来比较大小,找到所在student的位置,用于推算出最值学生的学号和姓名位置
代码展示
Python3
n = int(input())
#查到学生的人数 int()取整形
student = []
#定义一个列表
max_grade = 0
max_index = 0
min_grade = 100
min_index = 0
#设置最大最小的成绩和最大最小那个学生的学号
#这里的思想是通过循环比最大和最小(所以最大开始是0最小开始是100))
for i in range(n):
#有几个学生循环几次
name, id, grade = input().split(" ")
#用什么把把数值分来
student.extend([name, id, int(grade)])
# grade是str(),比较数值int() ,
# 列表 extend() 方法通过在列表末尾追加可迭代对象中的元素来扩展列表。 -- 可迭串代对象(字符、列表、元祖、字典)。
#print(student) #为了让extend()函数插入student列表更加直观(题目提交不用提交print(student))
for i in range(2, len(student), 3):
if student[i] > max_grade:
#循环找出最大的那个学生的【成绩】位置
max_grade = student[i]
max_index = i
if student[i] < min_grade:
#循环找出最小的那个学生的【成绩】位置
min_grade = student[i]
min_index = i
print(student[max_index - 2], student[max_index - 1])
#最大的那个学生的【成绩】位置推算出那个学生的姓名和学号——的列表位置
print(student[min_index - 2], student[min_index - 1])
#最小的那个学生的【成绩】位置推算出那个学生的姓名和学号——的列表位置
"""
测试用例:(用于跑PyCharm)
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
"""