Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Питон задача на классы

Uo SGGek Ученик (87), закрыт 9 месяцев назад
Поместите в стек 10 экземпляром класса Box. У каждой коробки есть длина, ширина, выстоа (все задается случайным образом) Поместите коробки из стека в список, в котором коробки должны быть расположены в порядке уменьшения суммы значений длины и ширины
Лучший ответ
Папа Высший разум (121710) 10 месяцев назад
На базе дека:
 from random import randint
from collections import deque

class Box:
def __init__(self, l, w, h):
self.l, self.w, self.h = l, w, h

def key(self): return - self.l - self.w

def __repr__(self): return f"Box {self.l} x {self.w} x {self.h}"

N = 10
stack = deque(Box(*map(randint, (10,) * 3, (50,) * 3)) for _ in range(N))
lst = sorted(reversed(stack), key = Box.key)
print(*lst, sep = '\n')

Дек имеет константную стоимость добавления в начало и в конец и удаления из начала и конца, в отличие от списка, которому приходится расширяться с переносом элементов.
Стек заполняется элементами Box, добавляемыми в конец. Поэтому извлекать их нужно в обратном порядке, что делается при помощи функции reversed(). Она не копирует элементы, а только меняет порядок обхода.
Элементы скармливаются функции sorted, которая сразу формирует сортированный список по возрастанию ключа (Box.key), т.е. по убыванию суммы длины и ширины.
HuginМыслитель (8195) 10 месяцев назад
Блин, вот это ты крут конечно, сразу видно не фуфломет сидеть рассказывать про деки которые проходят во 2 семестре любой шараги
HuginМыслитель (8195) 10 месяцев назад
Может ты еще и hello world писать умеешь?
Папа Высший разум (121710) Дима Смирнов, да, немного умею https://otvet.mail.ru/question/233225593
Остальные ответы
Похожие вопросы