Делим счёт · Шаг 3 из 4
Свести долги переводами
Балансы посчитаны, но человеку от них толку мало: он хочет знать, кому и сколько перевести. Переводов должно быть мало — иначе проще было считать на салфетке.
Что сделать
Превратите балансы в переводы — кому и сколько, и чтобы переводов было мало.
Что приходит
balansy— словарь «имя → баланс» из шага 2; плюс — переплатил, минус — должен, сумма — ноль
Что вернуть
Список троек (кто платит, кому, сколько): каждый раз самый большой должник переводит тому, кому должны больше всех, меньшее из двух; все в расчёте — [].
Допишите функцию kto_komu в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В проекте
Программа зовёт kto_komu на команду «готово» и печатает переводы стрелками. Решите шаг — и вместо балансов человек увидит, кому сколько перевести.
Иван переплатил 700, Пётр должен 500, Аня — 200. Самый большой должник — Пётр: он переводит Ивану 500. Дальше Аня — 200 Ивану. Ответ — [("Пётр", "Иван", 500), ("Аня", "Иван", 200)].
balansy = {"Иван": 700, "Пётр": -500, "Аня": -200}
kto_komu(balansy)
[('Пётр', 'Иван', 500), ('Аня', 'Иван', 200)]
Функция принимает словарь «имя → баланс» из второго шага. Сумма балансов равна нулю. Возвращает список переводов — троек (кто платит, кому, сколько).
Порядок расчёта задан, иначе ответов было бы много: берём самого большого должника и того, кому должны больше всех, переводим меньшее из двух чисел и повторяем. При равных суммах первым идёт тот, чьё имя раньше по алфавиту. Все в расчёте — пустой список.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.