20032007 发表于 2018-08-27 10:40

请教,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传递准确的结果?

dahe_1984 发表于 2018-08-30 16:25

乱糟糟的看不下去

20032007 发表于 2018-09-04 09:34

回复 2# dahe_1984

噢,可能是有点不吸引人注意。。。

bernana 发表于 2018-09-29 10:51

if withVal>withoutVal:
            result=(withVal,withToTake+(nextItem,))
      else:
         result=(withoutVal,withoutToTake)
maxVal函数返回的不就是这个吗?
页: [1]
查看完整版本: 请教,python返回多个值的问题