我的代码如下:
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
,并且不再采取任何进一步措施。
任何人都可以指出为什么会这样吗?
湾
答案 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,则您永远不会到达任何其他行。