2012-09-21 180 views
0

可能重複:
Why does 'return self' return None?Python函數沒有返回bool值

我一直在試圖解決問題55項目歐拉(http://projecteuler.net/problem=55) 而現在我覺得我有答案,我遇到一個問題。我不想要問題55的解決方案,僅僅是我做錯了什麼。

這裏是我的代碼:(我不認爲你需要的所有的話)

t=0 
lychrel=0 
called=0 

def iteratepal(n): 
    global t 
    global called 
    called+=1 
    b = int(''.join(reversed(str(n)))) 
    #print ("n =",n,"\nb =",b,"\nb+n =",b+n,"\n") 

    if ispal(b+n) or ispal(n): 
     t=0 
     return False 

    if t<50: 
     t+=1 
     iteratepal(b+n) 
    else:       # Here's the prob 
     t=0      # this block is executed (because it prints "yea") 
     print("yea")    # but it doesn't return True! 
     return True    # you can try it yourself (even in the interpreter) 

def ispal(n): 
    if n == int(''.join(reversed(str(n)))): 
     return True 
    return False 

print(iteratepal(196)) 

for i in range(0,200): 
    if iteratepal(i)==True: 
     lychrel+=1 
     print(i,"is Lychrel!") 
    else: 
     print(i,"is not a Lychrel!") 
print(lychrel) 

感謝您的幫助,我這個真糊塗。

+0

你永遠需要在'if'語句來測試'== TRUE'。 –

+0

@Martijn彼得是的,忘了那個。它之前是假的,經過一段時間我改變了它 –

+0

在這種情況下,測試'False'的普通python方法是使用'if not something:'。 –

回答

4

您遞歸調用函數時t < 50,但不返回值做任何事情:永遠不會再執行

if t<50: 
    t+=1 
    iteratepal(b+n) 
else:       
    t=0       
    print("yea")    
    return True 

else:分支,所以None而是返回。你可能想返回遞歸調用的結果:

if t<50: 
    t+=1 
    return iteratepal(b+n) 
else:       
    t=0       
    print("yea")    
    return True 

一些進一步的提示:

  • 沒有必要在if語句來測試==True,下面的工作就好了:

    if iteratepal(i): 
    
  • 可以在def ispal(n)返回測試本身是一個布爾結果,剛剛返回,如果沒有測試:

    def ispal(n): 
        return n == int(''.join(reversed(str(n)))) 
    
+0

謝謝你的工作,雖然我不真正瞭解遞歸的要點。我的意思是,你只需用新數據調用一個函數,爲什麼你需要返回? –

+0

感謝您的進一步提示呢! –

+0

@MakisRenieris,如果你沒有返回它,那麼它不是遞歸的,它會被調用一次,永遠不會返回到原來的調用函數。不僅如此,遞歸的每次迭代都不會返回到上面的級別,這意味着沒有結果返回。 – Ben

0

不必返回遞歸的結果。改變這種

if t<50: 
    t+=1 
    iteratepal(b+n) 

這個

if t<50: 
    t+=1 
    return iteratepal(b+n) 
+0

Phew,那@Martijn Pieters是*快*! –

+0

有一個原因,他[本月初...:]](http://stackoverflow.com/users?tab=reputation&filter=month) – Ben

+0

你的意思是:你*沒有回來。感謝您的回答 –