Расстановка приоритетов с помощью кучи Python

Рейтинг: 2Ответов: 1Опубликовано: 06.06.2023

Код должен формировать словарь priority и добавлять приоритет значениям словаря с помощью кучи. А по определённому запросу необходимо вернуть наибольшее по приоритету и по номеру значение

Я проверяю, что в начальном запросе promt. Если номер задачи 'task' - я добавляю её название task и её номер task_is в словарь, а после даю этой задаче соответствующий приоритет pri, формируя макс-кучу через отрицательное значение приоритета -1 * pri. Когда поступает команда 'take', я удаляю максимальное значение и возвращаю его в виде f-строки:

f'Задача {num_is} с приоритетом {-1 * pri_is}'

Но при этом не выполняется условие, что при запросе 'take' должно возвращаться не только наибольший приоритет, но и номер. Не могу понять как отсортировать по данному условию при запросе, подскажите, где заблуждаюсь

Код:

from heapq import heappop, heappush, heapify


heap = []
heapify(heap)

priority = {}

while (promt := input()) != 'end':

    if 'task' in promt:
        task = promt.split(',')[0]
        task_is = int(task.split()[1])
        pri = int(promt.split(',')[1])

        priority[task] = task_is

        heappush(heap, (priority[task], -1 * pri))

    elif 'take' in promt:
        pop_is = heappop(heap)
        num_is = pop_is[0]
        pri_is = pop_is[1]

        print(f'Задача {num_is} с приоритетом {-1 * pri_is}')

Входящие данные:

task 101,5
task 10,5
task 10,3
task 1,6
task 2,2
take
take
task 10,10
take
take
end

Итог:

Correct output:
Задача 1 с приоритетом 6
Задача 101 с приоритетом 5
Задача 10 с приоритетом 10
Задача 10 с приоритетом 5

Your code output:
Задача 1 с приоритетом 6
Задача 2 с приоритетом 2
Задача 10 с приоритетом 10
Задача 10 с приоритетом 5

Ответы

▲ 0
from heapq import heappop, heappush, heapify

heap = []
heapify(heap)

priority = {}

while True:
    promt = input()
    if 'task' in promt:
        task = promt.split(',')[0]
        task_is = int(task.split()[1])
        pri = int(promt.split(',')[1])

        priority[task] = task_is

        heappush(heap, (-pri,-task_is))
        

    elif 'take' in promt:
        pop_is = heappop(heap)
        num_is = -pop_is[1]
        pri_is = -pop_is[0]

        print(f'Задача {num_is} с приоритетом {pri_is}')
        
    elif 'end' in promt:
        break