找出谁在学生中得分最高

时间:2018-12-01 07:02:44

标签: python python-3.x

我是python的新手,目前正在研究一个项目,以对学生中的分数进行排序和计算。我被要求找出谁在学生中得分最高。

如果只有一个学生,它将输出:[名称]获得最高分。 如果只有两个学生,它将输出:[名称]和[名称]获得最高分。 如果学生超过两个,则输出:[名称],[名称]和[名称]得分最高。

但是,我被两个以上的学生困住,不知道如何满足上述要求,例如,如果有40名学生的班级,并且所有人都获得了相同的成绩,则我的程序无法正常工作。我想到了递归,但是我不知道它的方向是否正确。

这就是我现在得到的:

marks = {'Sally': 65, 'Ken': 61, 'Michael': 88, 'Yan': 67, 'Mary': 88,'May': 88}
highest = max(marks.values())
n = [k for k, v in marks.items() if v == highest]

if len(n)==1:
    print(n[0],' got the highest mark')
elif len(n)==2:
    print(n[0],'and',n[1],' got the highest mark')
elif len(n)==3:
    print(n[0],',',n[1],'and',n[2],' got the highest mark')

谢谢!

4 个答案:

答案 0 :(得分:0)

您可以使用''.join(<listhere>)完成它。 这是代码:

marks = {'Sally': 65, 'Ken': 61, 'Michael': 88, 'Yan': 67, 'Mary': 88,'May': 88}
highest = max(marks.values())
n = [k for k, v in marks.items() if v == highest]
str1 = ', '.join(n)
print(str1, 'got the highest mark')

答案 1 :(得分:0)

您可以使用一个简单的for循环修改if块

for i in range(len(n)):
if(i < len(n)-1): # for the name which is not the last of n
    print(n[i]+", ", end="")
else:
    print("and " + n[i] + " got the highest mark")

答案 2 :(得分:0)

mystr = ', '.join(n[:-1]) + ' and ' + n[-1] if len(n)>1 else n[0] 
print ( mystr + ' got the highest marks')
#Michael, Mary and May got the highest marks

答案 3 :(得分:0)

使用for循环并列出索引。

marks = {'Sally': 65, 'Ken': 61, 'Michael': 88, 'Yan': 67, 'Mary': 88, 'May': 88}
highest = max(marks.values())
toppers_list = [name for name, score in marks.items() if score == highest]

for student in toppers_list[:-1]:
    print(student, end=', ')

print("and", toppers_list[-1], "scored highest marks.")

toppers_list[:-1]创建一个列表,其中列出了除最后一个得分最高的所有学生。

print(student, end=', ')将在每次打印后禁止换行,并使用逗号(和空格)分隔所有名称。


输出:

Michael, Mary, and May scored highest marks.

希望这会有所帮助。