簡體   English   中英

用range(var)控制無法正常工作

[英]controlling with range(var) doens't work properly

我的代碼如下所示:

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

當我使用調試器時,我發現我的循環無法正常工作。 len(w) = 2 [0,1,2]情況下,它無法正確地遍歷list(range(k))給定的list(range(k)) 它僅選擇r=0 ,此后不再采取任何其他步驟。 誰能指出為什么呢?

我希望你有一個方便的夜晚,

b。

return從函數返回。 為什么要期待下一次迭代?

如果要在任何元素匹配時返回True,則僅在沒有元素匹配時返回False。 也就是說,將return False移出循環。

您需要將return False移到循環外,無論如何,您都可以在第一次迭代后返回,也可以簡化函數,也不需要並且不應僅在range上調用list來對其進行迭代:

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,則您永遠不會到達任何其他線路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM