请教,python返回多个值的问题
本帖最后由 20032007 于 2018-08-27 11:11 编辑自学Python编程导论,在背包问题这里学不下去了,遇到个问题,请教帮忙。
首先定义了一个类Item,这个类实际很简单,名字n,价值v,重量w,定义了gentName、getValue、getWeight三个函数返回n、v和w。
class Item(object):
def __init__(self,n,v,w):
self.name=n
self.value=v
self.weight=w
def getName(self):
return self.name
def getValue(self):
return self.value
def getWeight(self):
return self.weight
def __str__(self):
result='<'+self.name+','+str(self.value)+','+str(self.weight)+'>'
return result
然后写了一个函数,就能使用决策树来解决背包问题
def maxVal(toConsider,avail):
"""Assumes toConsider a list of items,avail a weight.
Returns a tuple of the total value of a solution to the
0/1 knapsack problem and the items of that solution"""
if toConsider == [] or avail == 0:
result=(0,())
elif toConsider.getWeight() > avail:
#Explore right branch only
result =maxVal(toConsider,avail)
else:
nextItem=toConsider
#Explore left branch
withVal,withToTake=maxVal(toConsider,avail-nextItem.getWeight())
withVal+=nextItem.getValue()
#Explore right branch
withoutVal,withoutToTake=maxVal(toConsider,avail)
#Choose better branch
if withVal>withoutVal:
result=(withVal,withToTake+(nextItem,))
else:
result=(withoutVal,withoutToTake)
return result
我困惑不解的问题是,这个maxVal函数里,返回的是两个值,函数内部并没有明确指明第一个值是什么,第二个值是什么,但是返回的结果就是n和总的v。
names=['a','b','c','d']
vals=
weights=
Items=[]
for i in range(len(vals)):
Items.append(Item(names,vals,weights))
val,taken = maxVal(Items,5)
for item in taken:
print(item)
print('Total value of items taken=',val)运行能得到正确结果,但是不明白为什么能得到结果。请教一下,应该怎么理解?
为啥maxVal函数就能向val和taken传递准确的结果?
乱糟糟的看不下去 回复 2# dahe_1984
噢,可能是有点不吸引人注意。。。
if withVal>withoutVal:
result=(withVal,withToTake+(nextItem,))
else:
result=(withoutVal,withoutToTake)
maxVal函数返回的不就是这个吗?
页:
[1]