簡體   English   中英

為什么我的用於檢查回文的python算法不起作用?

[英]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) <= 1False
  • first(word) == last(word)Trueelif -body輸入:
    • 遞歸調用的函數:
    • word現在是'b'
    • len(word) <= 1Trueif輸入-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM