代码的输出与预期的顺序不同

问题描述 投票:-1回答:3
n = int(input())  
a_name = []  
a_score = []  
for _ in range(n):  
  name = input()  
  score = float(input())  
  a_name.append(name)  
  a_score.append(score)  
a_score1 = set(a_score)  
a_score1.remove(min(a_score1))  
x = min(a_score1)  
for i in range(n):  
    if a_score[i]==x:  
        print(a_name[i]) 

对于以下代码输入是:5哈里37.21浆果37.21蒂娜37.2阿克里蒂41苛刻39

我的输出:哈里浆果

预期输出:浆果哈里

我是编程界的新手,希望能帮助您解决此问题。这是一个黑客等级问题,问题是要找到第二个最低分的名字。我能够通过8/10个测试用例,但是有2个测试用例都无法通过该解决方案。我能够找到正确的名称(即得分第二低的名称),但打印顺序错误)

python-3.x list for-loop output
3个回答
0
投票

您可以首先找到第二个最小值,然后使用列表推导和内置函数zip查找具有第二个最小值的名称。>

second_minim = sorted(a_score)[1]
[n for n, s in zip(a_name, a_score) if s == second_minim]

输出:

['Harry', 'Berry']

与根据您指出的['Berry', 'Harry']为何应为['Harry', 'Berry']而不是requirements

[如果有多个同年级的学生,请按字母顺序排列其姓名,并在新行上打印每个姓名

因此您应该使用:

result = sorted(n for n, s in zip(a_name, a_score) if s == second_minim)

print(*result, sep='\n')

输出:

Berry
Harry

0
投票

因此,您可以使用分数将分数映射到名称,而不是使用两个列表。像这样:


0
投票
n = int(input())
a_name = []
a_score = []
for _ in range(n):
    name = input()
    score = float(input())
    a_name.append(name)
    a_score.append(score)
a_score1 = set(a_score)
a_score1.remove(min(a_score1))
x = min(a_score1)
y =[]
for i in range(n):
    if a_score[i]==x:
        y.append(a_name[i])
y.sort()
for j in range(len(y)):
    print(y[j])
© www.soinside.com 2019 - 2024. All rights reserved.