题目
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例
Mike CS991301
Joe Math990112
方法一
n=int(input())
namelist=[]
idlist=[]
scorelist=[]
for i in range(n):
xinxistr=input()
a=xinxistr.split()
namelist.append(a[0])
idlist.append(a[1])
scorelist.append(int(a[2]))
maxnum=scorelist.index(max(scorelist))
minnum=scorelist.index(min(scorelist))
print(namelist[maxnum]+" "+idlist[maxnum])
print(namelist[minnum]+" "+idlist[minnum])
思路:用三个列表分别储存姓名,学号,成绩;然后查找出成绩最大值和成绩最小值的索引。
知识点:提取空格分开的字符串
>>> xinxistr=input()
Joe Math990112 89
>>> a=xinxistr.split()
>>> print(a)
['Joe', 'Math990112', '89']
>>>
方法二
n=int(input())
student=[]
scorelist=[]
for i in range(n):
xinxistr=input()
a=xinxistr.split()
studict={}
studict['name']=a[0]
studict['id']=a[1]
studict['score']=int(a[2])
student.append(studict)
for i in student:
scorelist.append(i['score'])
maxid=scorelist.index(max(scorelist))
minid=scorelist.index(min(scorelist))
print(student[maxid]['name']+" "+student[maxid]['id'])
print(student[minid]['name']+" "+student[minid]['id'])
思路:用一个字典来表示学生的“姓名”,“学号”,“分数”等信息,然后用一个列表来包含不同的字典。
知识点:1.字典里添加键值对
>>> adict={}
>>> adict["成绩"]=89
>>> adict["学号"]=20206389
>>> print(adict)
{'成绩': 89, '学号': 20206389}
>>>
知识点2:在一个列表里循环添加字典:
错误案例:
n=int(input())
student=[]
studict={}
scorelist=[]
for i in range(n):
xinxistr=input()
a=xinxistr.split()
studict['name']=a[0]
studict['id']=a[1]
studict['score']=int(a[2])
student.append(studict)
print(student)
以上代码输入样本案例后得到如下结果:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
[{'name': 'Mary', 'id': 'EE990830', 'score': 95}, {'name': 'Mary', 'id': 'EE990830', 'score': 95}, {'name': 'Mary', 'id': 'EE990830', 'score': 95}]
>>>
也就是说列表里的三个字典是一样的,后来值把前面的值都覆盖掉了。
正确代码:
n=int(input())
student=[]
scorelist=[]
for i in range(n):
xinxistr=input()
a=xinxistr.split()
studict={}
studict['name']=a[0]
studict['id']=a[1]
studict['score']=int(a[2])
student.append(studict)
输出结果:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
[{'name': 'Joe', 'id': 'Math990112', 'score': 89}, {'name': 'Mike', 'id': 'CS991301', 'score': 100}, {'name': 'Mary', 'id': 'EE990830', 'score': 95}]
>>>
知识点三:遍历时i的含义
这里的 i 指的是一个索引数字。
for i in range(len(student)):
print(student[i]['name'])
这里的 i 指的是一个字典(student是一个成员为字典的列表)
for i in student:
print(i['score'])
225

被折叠的 条评论
为什么被折叠?



