用范围控制(var)不能正常工作

时间:2015-10-20 17:15:46

标签: python loops

我的代码如下:

def rd_parse(w,i,k):
    for r in list(range(k)):
            j = i+1 + i+r + k-1
            if np(w,i,j):
                    return True
            elif v(w,i,j):
                    return True
            elif np(w,i,j) and v(w,j,k):
                    return True
     else:
            return False

def np(w,i,k):
if k == i + 1 and w[i] == "Hans":
    return True
else:
    return False



def v(w,i,k):
if k == i + 1 and w[i] == "isst":
    return True
else:
    return False

可能的查询:

w = ["Hans"] rd_parse[w,0,len(w) True

这是我的预期结果。

现在我想查询更复杂的内容

w = ["Hans", "isst"] rd_parse(w,0,len(w))

返回False

当我使用调试器时,我看到我的循环无法正常工作。它没有在list(range(k))给出的列表上正确地进行交互,这是len(w) = 2 [0,1,2]的情况。它只选择r=0,并且不再采取任何进一步措施。 任何人都可以指出为什么会这样吗?

我希望你方便一个晚上,

2 个答案:

答案 0 :(得分:1)

return从函数返回。为什么期望下一次迭代?

如果要在任何元素匹配时返回True,则仅在元素的 none 匹配时返回False。也就是说,将return False移到循环之外。

答案 1 :(得分:0)

你需要在循环之外移动return False,无论你在第一次迭代后返回,你还可以简化你的函数,你也不需要也不应该调用范围上的列表来迭代它:

def np(w, i, k):
    return k == i + 1 and w[i] == "Hans"


def v(w, i, k):
    return k == i + 1 and w[i] == "isst"


def rd_parse(w, i, k):
    for r in range(k):
        j = i + 1 + i + r + k - 1
        if v(w, i, j) or v(w,j,k):
            return True
        elif np(w, i, j):
            return True
    return False # outside loop

如果np(w,i,j)为False,则np(w,i,j) and v(w,j,k)可能无法为True,相反如果np(w,i,j)为True,则您永远不会到达任何其他行。