python中的无限循环?

时间:2013-07-01 23:33:36

标签: python knapsack-problem

我一直在研究Knapsack问题的实现,但我无法实现它,代码只是继续进入这个无限循环的同时(真实)
这是代码:

class KSBB:
    global x
    global y
    x=[]
    y=[]
    global sp
    sp=0
    global cw
    global cp
    global nw
    global np
    cw,cp,nw,np=0,0,0,0
    global k
    k=0
    global pi
    pi=0
def __init__(self,a,b,c):
    self.weights=a
    self.values=b
    self.c=c
    x=len(self.weights)
    y=len(self.weights)

绑定方法:

def bound(self):
    global cp
    found=False
    bv=0
    n=len(self.weights)
    np=cp
    nw=cw
    pi=k
    while(pi < n and ~found):
        if(nw+self.weights[pi] <= self.c):
            nw+=self.weights[pi]
            np+=self.values[pi]
            y.append(1)
        else:
            bv=np+((self.c-nw)*(self.values[pi]/self.weights[pi]))
            found=True
            #y.append(0)
        pi+=1
    if found:
        pi-=1
        return bv
    else:
        return np

分支方法:

def Knapsack(self):
    n=len(self.weights)
    while True:
        global sp
        while (self.bound() <= sp):
            while(k !=0 and y[k] !=1):
                k-=1 
            if (K==0):return
            y[k]=0
            cw-=self.weights[k]
            cp-=self.values[k]
        cw=nw
        cp=np
        k=pi
        print k
        if (k==n):              
            sp=cp
            x=y
            k=n-1
        else:
            y[k]=0

输出方法:

def output(self):return sp

2 个答案:

答案 0 :(得分:3)

if (K==0)

应该是

if (k==0)

只是一个错字......

很容易本地化这个问题 - 你知道你想要终止循环的地方,唯一可能出错的是if语句。发现这些东西很容易,也是编程中最基本的东西之一。一旦程序开始超过5行,您需要学习调试。

答案 1 :(得分:1)

~found是一个按位补充。我想你的意思是not found

>>> ~False
-1             # True
>>> ~True
-2             # also True!