Python代码使用递归函数计算允许的最大行李量
我是python新手,我有一个任务,我需要编写一个递归函数,它包含两个参数权重,W,Weights是行李的重量列表,W是学生可以携带的最大重量,在python 2.7中,它计算学生可以携带的最大行李量,并且不超过最大限制W,例如:Python代码使用递归函数计算允许的最大行李量,python,python-2.7,function,recursion,count,Python,Python 2.7,Function,Recursion,Count,我是python新手,我有一个任务,我需要编写一个递归函数,它包含两个参数权重,W,Weights是行李的重量列表,W是学生可以携带的最大重量,在python 2.7中,它计算学生可以携带的最大行李量,并且不超过最大限制W,例如: >>> calc_max_baggage([5], 0) >>> 0 >>> calc_max_baggage ([1, 1, 1], 5) >>> 3 >>> calc_max
>>> calc_max_baggage([5], 0)
>>> 0
>>> calc_max_baggage ([1, 1, 1], 5)
>>> 3
>>> calc_max_baggage([4, 2, 3, 1], 5)
>>> 2
这是我的代码,但它返回错误:
def calc_max_baggage (weights, W):
weights = []
res = []
W = int
def number_of_index(weights, W, i):
if max(weights) > W:
return res
else:
count += i in weights
return calc_max_baggage()
错误消息:
回溯最近一次呼叫上次:
文件,第1行,在
计算最大行李量[5],0
文件C:/Users/user/Desktop/לייייפיתיןPython/עבית/ex6/test(ex6.py,第12行,在calc(u max)u行李中
返回计算最大行李
TypeError:calc_max_baggage只接受给定的2个参数0
我完全不确定我的代码我认为它完全错了
权重是权重列表,W是最大权重。
鉴于此,我想知道weights[]列表中有多少项可以带上飞机。
*我无法更改函数calc_max_baggageweights,这需要两个参数
W也可以是负数,在这种情况下,函数返回0
它必须只使用递归而不使用循环来解决
谢谢我们可以从中稍微修改powerset配方,以避免使用显式循环:
from itertools import chain, combinations
def powerset(iterable):
"powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
s = list(iterable)
return chain.from_iterable(map(lambda r: combinations(s, r), range(len(s)+1)))
对于每种行李组合,我们可以过滤掉所有超过最大重量的行李,然后选择物品最多的一件:
def calc_max_baggage(weights, W):
weights = powerset(weights)
filtered = filter(lambda items: sum(items) <= W, weights)
filtered = chain(filtered, ((),))
return max(filtered, key=len)
如果需要递归组件,可以递归地定义powerset,但效率明显较低
def powerset(seq):
if not seq:
return ((),)
else:
head, *tail = seq
tail_pow = powerset(tail)
with_head = tuple(map(lambda t: (head,) + t, tail_pow))
return with_head + tail_pow
到目前为止你试过什么?请发布您的代码。我编辑了上面的文章。您需要使用两个参数调用函数。您的答案是正确的,但我必须使用递归来解决问题,并且不使用任何循环。此代码不使用任何显式循环。可能有一种递归的方法来定义powerset,但我不知道该怎么做。@Thaa'erSawaid看到我的编辑。在提交此作业之前,您可能需要仔细阅读作业。我正在自由地使用map来绕过no-loops要求。
def powerset(seq):
if not seq:
return ((),)
else:
head, *tail = seq
tail_pow = powerset(tail)
with_head = tuple(map(lambda t: (head,) + t, tail_pow))
return with_head + tail_pow