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

2024-04-29 04:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下所示:

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,从那时起不采取任何进一步的措施。 有人能指出原因吗

祝你今晚过得愉快

b


Tags: andfalsetruelenreturnifparsedef
2条回答

您需要将return False移动到循环之外,无论第一次迭代后返回,您也可以简化您的函数,您也不需要也不应该调用list on range来对其进行迭代:

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)为假,那么np(w,i,j) and v(w,j,k)就不可能为真,相反,如果np(w,i,j)为真,那么就永远不会到达任何其他行

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

如果要在任何元素匹配时返回True,则只在元素匹配时返回False。也就是说,将return False移出循环

相关问题 更多 >