Top.Mail.Ru
Ответы

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

Поместите в стек 10 экземпляром класса Box. У каждой коробки есть длина, ширина, выстоа (все задается случайным образом) Поместите коробки из стека в список, в котором коробки должны быть расположены в порядке уменьшения суммы значений длины и ширины

По дате
По рейтингу
Аватар пользователя
Новичок

На базе дека:

123456789101112131415
 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), т.е. по убыванию суммы длины и ширины.

Удаленный ответ Ответ удалён