代码之家  ›  专栏  ›  技术社区  ›  Destiny Brown

如何在Python中解决random.sample中的ValueError?

  •  0
  • Destiny Brown  · 技术社区  · 11 年前

    我想写一个背包问题的代码。如果有一个具有一定重量的背包,您可以选择特定的物品组合来找到最佳解决方案。然而,我试图随机生成可能的解决方案。因此,我的代码将选择随机数量的随机项(生成一个随机大小的列表),并测试解决方案是否可行(小于容量)或不可行(大于容量)。但我对random.sample()有问题。为了得到一个随机大小的列表,我将k设置为leng(一个随机整数),而总体是从给定的项目范围中选择的一个随机项目列表。但我知道,如果长度大于人口,则存在ValueError。我想使用random.sample(),这样我就可以有一个唯一的数字列表,但我需要以某种方式解决ValueError。我尝试过尝试:除了ValueError:但我不确定如何真正实现。这是我目前所掌握的:

    def genSoln(cap, items)
        g = input("Would you like to generate random potential solutions? [y/n] ")
        if g == 'y':
            gen = int(input("Number of times to generate/check random potential solutions? "))
            totalwt = 0
            totalval = 0
            for i in range(1,gen+1):
                try:
                    pop = range(1,items)
                    leng = random.randint(1,8)
                    ran = random.sample(pop, leng)
                except ValueError:
                    pass
                for i in ran:
                    totalwt += int(wts[i])
                    totalval += int(vals[i])
                    if i == len(ran):
                        if totalwt < int(cap):
                            print("Items picked: ", ran)
                            print("Feasible: ", "Total Wt = ", totalwt, "Total Val = ", totalval)
                        else:
                            print("Items picked: ", ran)
                            print("Infeasible: ", "Total Wt = ", totalwt, "Total Val = ", totalval)
                        totalwt = 0
                        totalval = 0
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   Calum    11 年前

    他们应该这样做。

    leng = random.randint(1, items)