[英]Why doesn't my python algorithm for checking palindromes work?
因此,我正在執行Think Python第7章中的練習6,令我感到奇怪的是,我作為解決方案編寫的這段代碼不起作用:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
is_palindrome(middle(word))
else:
return False
它不輸入任何遞歸,我也不知道為什么。 對於長度超過1個字符的單詞,它返回None。 為什么是這樣? 當單詞的長度達到1或更短時,它應該返回True! 為什么不起作用?
PS:以下是第一個,最后一個和中間的定義:
def first(word):
return word[0]
def last(word):
return word[-1]
def middle(word):
return word[1:-1]
您缺少return
:
def is_palindrome(word):
if len(word) <= 1:
return True
elif first(word) == last(word):
return is_palindrome(middle(word)) # <--
else:
return False
因此,一旦輸入了elif
塊,您當前的代碼段將返回None
,因為那里沒有顯式的return語句。 換句話說,您確實要計算is_palindrome(middle(word))
,但對結果不執行任何操作。
也許通過一個簡單的例子會有所幫助。 考慮使用參數'aba'
調用原始函數:
word
現在是'aba'
if
未輸入-body, if
len(word) <= 1
為False
。 first(word) == last(word)
為True
, elif
-body輸入:
word
現在是'b'
len(word) <= 1
為True
, if
輸入-body:
True
返回 elif
沒有return
) None
退貨 添加return
return is_palindrome(middle(word))
我認為您不希望在函數的第5行中返回該方法。
return is_palindrome(middle(word))
應該在那里而不是
is_palindrome(middle(word))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.