2015-10-20 32 views
0

我的代碼如下:與範圍(VAR)好好嘗試控制工作正常

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。

+0

*無法刪除評論* – bngschmnd

回答

1

return從函數返回。你爲什麼期待下一次迭代?

如果你想返回True如果任何元素相匹配,只有返回False當元素匹配的沒有。也就是說,在循環的外部移動return False

+0

我編輯了我的代碼上面。你是這個意思嗎? – bngschmnd

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)是假,則np(w,i,j) and v(w,j,k)不可能是真實的,並在此相反,如果np(w,i,j)爲真,那麼你永遠也達不到任何其他線路。