def supercargo(load, capacity):
decks = [[], [], []]
limits = [(0, 10), (10, 100), (100, 1000)]
for item in load:
for i, (low, high) in enumerate(limits):
if low <= item < high and len(decks[i]) < capacity[i]:
decks[i].append(item)
break
remaining_load = [item for item in load if not any(item in deck for deck in decks)]
fully_loaded = all(len(decks[i]) == capacity[i] for i in range(3))
return tuple(remaining_load), fully_loaded
#import random
def supercargo(load: tuple, capacity: tuple) -> tuple:
return tuple(filter(lambda x: x > 999, load)) \
+ ((sum(0 <= x <= 9 for x in load) >= capacity[0]) \
and (sum(10 <= x <= 99 for x in load) >= capacity[1]) \
and (sum(100 <= x <= 999 for x in load) >= capacity[2]),)
#load = tuple(random.randint(0, 1200) for _ in range(10))
#capacity = tuple(random.randint(1, 10) for _ in range(3))
load = 666, 9, 37, 69, 3810, 345, 999, 1
capacity = 1, 2, 3
assert supercargo(load, capacity) == 3810, True
Напишите функцию supercargo(load, capacity), принимающую в качестве аргументов кортеж чисел-грузов и кортеж вместимостей палуб — сначала верхней, затем средней, потом нижней.
Функция возвращает кортеж нераспределённых грузов и логическое значение: удалось загрузить судно полностью или нет (то есть, если не осталось свободных мест ни на одной палубе, значит, удалось).
В качестве ответа сдайте только код, содержащий указанную функцию. Вызывать её не нужно!
Мой код:
def supercargo(load, capacity):
upper_deck = []
middle_deck = []
lower_deck = []
for item in load:
if 0 <= item <= 9 and len(upper_deck) < capacity[0]:
upper_deck.append(item)
elif 10 <= item <= 99 and len(middle_deck) < capacity[1]:
middle_deck.append(item)
elif 100 <= item <= 999 and len(lower_deck) < capacity[2]:
lower_deck.append(item)
remaining_load = [item for item in load if item not in upper_deck + middle_deck + lower_deck]
fully_loaded = len(remaining_load) == 0
return tuple(remaining_load), fully_loaded
В итоге выдает false вместо true и наоборот. Что не так?