在回应评论时,我提出了更多细节 - 这是原始问题和输入格式 根据物理类学生中每个学生的姓名和成绩,将它们存储在嵌套列表中,并打印任何具有第二低成绩的学生的姓名。
注意:如果有多个同一年级的学生,请按字母顺序排列名称,并在新行上打印每个名称。
输入格式
第一行包含一个整数,即学生数。 随后的行描述了每个学生的线路;第一行包含学生的姓名,第二行包含他们的成绩.-
示例输入 -
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
示例输出
0
Berry, Harry
这是我到目前为止的编码解决方案:
marksheet = []
for _ in range(int(input())):
name = input()
score = float(input())
marksheet.append([name, score])
print (marksheet)
list_score = sorted([name_scores[1]] for name_scores in marksheet)
print (list_score)
list_names = sorted([name_scores[0]] for name_scores in marksheet if
name_scores[1] == list_score[1])
print (list_names)
一切正常,直到解释器到达list_names行
预期输出为'Harry' and 'Berry'
但是,程序只返回一个空字符串。
的问候,
贾斯汀
答案 0 :(得分:0)
我使用您提供的示例输入尝试了您的代码,发现您在排队时遇到了错误:
list_names = sorted([name_scores[0]] for name_scores in marksheet if name_scores[1] == list_score[1])
list_score [1]将返回一个值为37.21的列表,并将它与int 37.21进行比较,即37.21 = [37.21],这将返回false。这就是没有结果的原因。 尝试以下代码,它将起作用:
marksheet = []
for _ in range(int(input())):
name = input()
score = float(input())
marksheet.append([name, score])
print (marksheet)
list_score = sorted([name_scores[1]] for name_scores in marksheet)
print (list_score)
list_names = sorted([name_scores[0]] for name_scores in marksheet if
name_scores[1] == list_score[1][0])
print (list_names)
输入:
5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39
输出:
[['Harry', 37.21], ['Berry', 37.21], ['Tina', 37.2], ['Akriti', 41.0], ['Harsh', 39.0]]
[[37.2], [37.21], [37.21], [39.0], [41.0]]
[['Berry'], ['Harry']]