我是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')
谢谢!
答案 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.
希望这会有所帮助。