Итак, вы — суперкарго. Вам нужно разместить на судне переданный груз. Грузы будем обозначать целыми числами, а палуб на нашем судне три: на нижней размещаются только трёхзначные числа, на средней двузначные, на верхней однозначные. Никакие другие наш корабль взять не может.
Напишите функцию 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 и наоборот. Что не так?
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))