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

Задача на питоне, исправить код

Ольга Коберник Знаток (316), открыт 1 неделю назад
Итак, вы — суперкарго. Вам нужно разместить на судне переданный груз. Грузы будем обозначать целыми числами, а палуб на нашем судне три: на нижней размещаются только трёхзначные числа, на средней двузначные, на верхней однозначные. Никакие другие наш корабль взять не может.

Напишите функцию 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 и наоборот. Что не так?
4 ответа
Даниил Лумумба Гуру (2509) 1 неделю назад
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 and
len(upper_deck) == capacity[0] and
len(middle_deck) == capacity[1] and
len(lower_deck) == capacity[2])
return tuple(remaining_load), fully_loaded
никому я не нужен... Просветленный (22811) 1 неделю назад
Если Вы не против, то я отвечу скриншотом:
Рустам Абдрашитов Мыслитель (9542) 1 неделю назад
На
 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
Алексей Хвостовский Мудрец (18148) 1 неделю назад
 #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
Похожие вопросы