2 回答
TA贡献1864条经验 获得超2个赞
大错在这里:
grades_list=[]
for i in range(N):
grades_list.append(physics_students[i][1])
grades_list.sort()
grades_list.remove(min(grades_list))
HackerRank问题描述
注意:如果有多个学生与同年级,字母顺序排序它们的名称和在新行打印每个名字。 强调我的
现在考虑是否有多个学生的最低成绩相同。假设成绩是[1, 1, 2, 3]. 这将成为您的排序grades_list.
现在当你打电话时会发生什么.remove()?
>>> grades_list.remove(min(grades_list))
>>> print(grades_list)
[1, 2, 3]
所以你看,min没有完全删除。
有几种方法可以解决这个问题,但我想把实现留给你,因为这是一个很好的练习。
剧透:
其他事宜
N=int(input("enter number of students in the range of 2 to 5"))
那里应该不需要提示。它会破坏标准输出,HackerRank 会将其标记为错误。
print("name",physics_students[i][0])
这也是。您可以删除name. :)
TA贡献1829条经验 获得超6个赞
您代码的更新版本(通过所有 Hackerrank 测试):
if __name__ == '__main__':
physics_students = []
for _ in range(int(input())):
name = input()
score = float(input())
physics_students.append([name, score])
physics_students.sort()
N = len(physics_students)
### Removing the lowest grades
grades_list = []
for i in range(N):
grades_list.append(physics_students[i][1])
grades_list.sort()
min_grade = min(grades_list)
grades_list_temp = grades_list[:]
for i in range(len(grades_list)):
if grades_list[i] == min_grade:
grades_list_temp.pop(0)
else:
pass
#### Finding out the names of students with second lowest grade
lowest2nd_names_list = []
for i in range(N):
if physics_students[i][1] == grades_list_temp[0]:
lowest2nd_names_list.append(physics_students[i][0])
for name in lowest2nd_names_list:
print(name)
添加回答
举报