Некоторые тестовые случаи терпят неудачу. Скажи мне, что пошло не так - PullRequest
0 голосов
/ 13 октября 2019

Учитывая имена и оценки для каждого учащегося в классе физики, сохраните их во вложенном списке и напечатайте имена любого ученика, имеющего второй самый низкий класс.

Примечание: Если есть несколько учеников с одинаковым классом, упорядочите их имена в алфавитном порядке и напечатайте каждое имя в новой строке.

Формат ввода

В первой строке записано целое число, количество учеников,Последующие строки описывают каждого студента через строки;В первой строке указывается имя учащегося, а во второй - его оценка.

Ограничения

Всегда будет один или несколько учащихся, имеющих второй самый низкий класс. Формат вывода

Напечатайте имя (имена) любого ученика (ов), имеющего второй самый низкий класс по физике;если есть несколько учеников, упорядочите их имена в алфавитном порядке и напечатайте каждое из них на новой строке.

Пример ввода 0

5 Гарри 37,21 Берри 37,21 Тина 37,2 Акрити 41 Суровый 39 Пример вывода 0

Берри Гарри Объяснение 0

В этом классе есть ученики, чьи имена и оценки собраны для составления следующего списка:

Python студентов = [['Harry', 37.21],['Ягода', 37.21], ['Тина', 37.2], ['Акрити', 41], ['Суровая', 39]]

Самая низкая степень принадлежит Тине. Второй младший класс принадлежит Гарри и Берри, поэтому мы упорядочиваем их имена в алфавитном порядке и печатаем каждое имя в новой строке.

мой код: **

marksheet=[]
for _ in range(int(raw_input())):
    stud=[]
    name = raw_input()
    score = float(raw_input())
    stud.append(name)
    stud.append(score)
    marksheet.append(stud)
marksheet.sort(key= lambda x:x[0])
minimum = min(marksheet,key = lambda x:x[1])
for x in marksheet:
    if x[1]== minimum[1]:
        marksheet.remove(x)
sec_high=min(marksheet, key= lambda x :x[1]  )
for x in marksheet:
    if x[1] == sec_high[1]:
        print x[0]

**

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Посмотрите на это решение в Python 3.7 ...

if __name__ == '__main__':
    mark_sheet = []
    _min = 1e99
    for _ in range(int(input())):
        name = input()
        score = float(input())
        if score < _min:
            _min = score
        mark_sheet.append((name, score))

    # make a new mark_sheet excluding the one(s) that have the minimum score and 
    # sort on score in ascending order
    mark_sheet = sorted([mark for mark in mark_sheet if mark[1] != _min], key=lambda x: x[1])

    # if there is still a list then the first item should have the second best score
    mark_second_best = []
    if mark_sheet:
        second_best_score = mark_sheet[0][1]

        # make a list with the second best score and sort on name
        mark_second_best = sorted([mark for mark in mark_sheet if mark[1] == second_best_score],
            key=lambda x: x[0])

    # and print the result
    for mark in mark_second_best:
        print(mark[0])

пройдено HackerRank.

0 голосов
/ 13 октября 2019

Рабочий раствор (проверено на Hackerank)

# Gather Inputs
n = int(raw_input())
lst = []
for x in range(n):
    lst.append([raw_input(), float(raw_input())])

# Sort by score (i.e. sublists are [name, score])
lst = sorted(lst, key=lambda x: x[1])

# Find second lowest score
for x in range(1, n):
    if(lst[x][1] != lst[x-1][1]):
        score = lst[x][1]
        break

#Sort by name
lst = sorted(lst)

# Aggregate students whose result was score
# this is the second lowest value
lower_scorers = [x[0] for x in lst if x[1] == score]

print "\n".join(lower_scorers)

Тест

Вход

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

Вывод

Berry
Harry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...