2013-07-07 165 views
1

這是我遇到,而不是返回new_word並打印出來,它只是打印「無」當我嘗試打印出方法返回的字符串時,爲什麼我的python方法會輸出'None'?

text = "hey hey hey,hey" 
    word = 'hey' 

    def censor(text,word): 
     new_word = "" 
     count = 0 
     if word in text: 
      latter_count = ((text.index(word))+len(word)) 
      while count < text.index(word): 
       new_word+= text[count] 
       count += 1 
      for i in range(len(word)): 
       new_word += '*' 
      while latter_count < len(text) : 
       new_word += text[latter_count] 
       latter_count += 1 

      if word in new_word : 
       censor(new_word,word) 
      else : 
       return new_word 
    print censor(text,word) 

回答

4

如果沒有返回語句,函數返回None

可能在遞歸的時候,if word in text:是False,所以沒有什麼可以返回的。您也沒有返回遞歸步驟。您必須返回censor(new_word,word)

2

你不是在if朝着結束的第一個分支返回的問題。改變,要

if word in new_word: 
    return censor(new_word,word) 

你的功能也將返回None如果word in text是假的,所以你可能要在最後添加一個else返回一個空字符串或在這種情況下,一些其他的默認值。

0

如果函數碰到沒有碰到一個「回報」的聲明,這是一樣的「返回None」:

def censor(text,word): 
    new_word = "" 
    count = 0 
    if word in text: 
     latter_count = ((text.index(word))+len(word)) 
     while count < text.index(word): 
      new_word+= text[count] 
      count += 1 
     for i in range(len(word)): 
      new_word += '*' 
     while latter_count < len(text) : 
      new_word += text[latter_count] 
      latter_count += 1 

     if word in new_word : 
      censor(new_word,word) # probably want to return here 
     else :      # don't need this else if you return in the if branch 
      return new_word 

    # what do you want to return in this case? 
    return None 
相關問題