【问题标题】:Find the Runner Up Score找到亚军分数
【发布时间】:2020-06-18 11:56:04
【问题描述】:

我是编程新手,在解决这个 HackerRank 问题时遇到了问题。 https://www.hackerrank.com/challenges/nested-list/problem?h_r=next-challenge&h_v=zen 我的代码工作正常,但我无法获得所需的输出。

student_marks = {}
lsit_name = []
lsit_marks = []
N = int(input())

for _ in range(N):
    name = input()
    score = float(input())
    student_marks[name] = [score]
    lsit_marks.append(score)
    lsit_name.append(name)

final = []

for i in range(len(student_marks)):
    if lsit_marks[i] < max(lsit_marks):
        final.append(lsit_marks[i])
print(lsit_name[lsit_marks.index(max(final))])


final_1 = []

for i in range(len(final)):
    if final[i] < max(final):
        final_1.append(final[i])

print(lsit_name[lsit_marks.index(max(final_1))])

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    我认为最好的方法是使用字典将成绩作为其键。通过对列表进行相应的排序,您可以在字典中引入键值对,以便稍后打印时获得所需的输出。

    这得益于对于 Python 3.6,字典保持插入顺序这一事实。如果您运行的是以前的 Python 版本,则需要使用来自 collections 模块的 OrderedDict 对象。

    students = [[input(), float(input())] for _ in range(int(input()))]
    d = dict()
    for name, grades in sorted(students, key=lambda x: (x[1], x[0])):
        d.setdefault(grades, []).append(name)
    print(*d[list(d.keys())[1]], sep='\n')
    

    所以,对于以下输入:

    5
    Harry
    37.21
    Berry
    37.21
    Tina
    37.2
    Akriti
    41
    Harsh
    39
    

    你会得到以下输出:

    Berry
    Harry
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2016-01-10
      • 1970-01-01
      • 2015-09-16
      • 2015-04-05
      相关资源
      最近更新 更多