我有以下功能:
def spell_checker(w):
correzione = []
limite = 2
for word in frequenza():
res = edit_distance(word.lower(), w)
if word not in correzione:
if res == 0:
correzione.append(w)
break
if res > 0 and res < limite:
correzione.append(word)
return correzione
所以我需要做的是:当for循环结束时,如果列表 correzione 为空,我想将 limite 增加一个,然后重新开始环。
如果我在循环中放置限制+ = 1,它会在列表为空的任何时候增加,但是只有在它的所有内容都是空的时候才需要它。
可能是这样的:
if len(correzione) == 0:
limite += 1
for word in frequenza():
#same loop as before
但这太过分了!
答案 0 :(得分:0)
为了简单起见,您可以使用while循环继续工作,直到列表不为空:
def spell_checker(w):
correzione = []
limite = 2
while len(correzione) == 0:
for word in frequenza():
res = edit_distance(word.lower(), w)
if word not in correzione:
if res == 0:
correzione.append(w)
break
if res > 0 and res < limite:
correzione.append(word)
if len(correzione) == 0:
limite += 1
return correzione
答案 1 :(得分:0)
正如@Megalng提出的那样,在这种情况下递归似乎很合理。这样的事情可能是:
from edit_distance import edit_distance
MAX_LIMIT = 10
def frequenza():
return ['first', 'second', 'third']
def spell_checker(w, limite=1):
global MAX_LIMIT
if limite > MAX_LIMIT:
raise RuntimeError('Stack overflow!')
correzione = []
for word in frequenza():
res = edit_distance(word.lower(), w)
if word not in correzione:
if res == 0:
correzione.append(w)
break
if 0 < res < limite:
correzione.append(word)
if not correzione:
return spell_checker(limite + 1)
return correzione
def main():
print(spell_checker('awordofmine'))
if __name__ == '__main__':
main()
果然,您可以使用类而不是全局变量,或者以某种方式处理您的限制,如返回None
,如果可以放弃的话。