2016-02-24 95 views
-2

我發現了密切相關的主題,但它沒有回答我的問題。我的single_insert_or_delete函數返回0,12並基於該值我想在我的spelling_corrector函數中使用它,但到目前爲止我遇到了麻煩,當我使用第一個函數返回的if value:作爲我的主python函數的參數它不會接受這些值並且python返回None。我在這裏錯過什麼?如何在新函數中使用布爾值函數返回值python

def spelling_corrector(s1,s2): 
    out_list=[] 

def single_insert_or_delete(s1,s2): 
    a=s1.lower() 
    b=s2.lower() 
    if (len(a)==len(b))and (a==b): 
     return 0 
    elif len(a)>len(b): 
     if b in a: 
      if len(a)-len(b)==1: 
       return 1 
     else: 
      return 2 
    elif len(a)< len(b): 
     if a in b: 
      if len(b)-len(a)==1: 
       return 1 
     else: 
      count =0 
      for x in a: 
       if x in b: 
        count+=1 
      if len(b)-count==1: 
       return 1 
      else: 
       return 2 

    else: 
     return 2 

這是主程序

s1= s1.split() #This will return list 
for x in s1: 
    single_insert_or_delete(x,s2) 
    if 0: 
     out_list.append(x) 
    elif 1: 
     out_list.append(x) 
    elif 2: 
     out_list.append(x) 
    else:  
     out_list.append(x) 
    out_str=" ".join(out_list) 
return out_str 

測試輸出

a="That is the Firs cas" 
b=['that','first','case','car'] 
x=spelling_corrector(a,b) 
print(x) 
+3

你的代碼格式出錯了。請參閱[Markdown幫助 - 代碼和預格式化文本](http://stackoverflow.com/editing-help#code)並重試。 – Kevin

+0

在'single_insert_or_delete'中檢查你的邏輯,有許多分支不返回一個值(並因此落在最後,返回None),例如, 'single_insert_or_delete('abba','bb')' – thebjorn

回答

0

在Python也沒有神奇的返回值的使用,你必須明確地使用它:

s1= s1.split() #This will return list 
for x in s1: 
    insert_or_delete = single_insert_or_delete(x,s2) 
    if insert_or_delete == 0: 
     out_list.append(x) 
    elif insert_or_delete == 1: 
     out_list.append(x) 
    elif insert_or_delete == 2: 
     out_list.append(x) 
    else:  
     out_list.append(x) 
out_str=" ".join(out_list) 
return out_str