Задача на питоне, исправить код - Общение Python мододелов

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

Регистрация
18 Май 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Итак, вы — суперкарго. Вам нужно разместить на судне переданный груз. Грузы будем обозначать целыми числами, а палуб на нашем судне три: на нижней размещаются только трёхзначные числа, на средней двузначные, на верхней однозначные. Никакие другие наш корабль взять не может.



Напишите функцию 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 и наоборот. Что не так?
 
Регистрация
12 Дек 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
На 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) < capacity:
decks.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) == capacity for i in range(3))

return tuple(remaining_load), fully_loaded
 
Регистрация
29 Май 2013
Сообщения
89
Репутация
1
Спасибо
0
Монет
0
Если Вы не против, то я отвечу скриншотом:
309475014_103ce7d9848bbae89bab9de82c912c02_800.png

 
Регистрация
7 Мар 2013
Сообщения
77
Репутация
0
Спасибо
0
Монет
0
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
 
Регистрация
13 Мар 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
#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
 
Сверху Снизу