2017-09-08 73 views
0

我目前正在學習關於Python的課程,目前我正在努力完成作業的一部分。創建在Python中返回布爾值的迴文函數

問題是要求我們構造一個函數來檢查字符串以查看它是否是迴文。我遇到的問題是,我的教練提供的測試之一是迴文「包含空格的從不奇數或偶數」。空格導致我的功能失敗,因爲它不會使用短語中的字母。

我當前的代碼是:

def is_palindrome(phrase): 

    return phrase == phrase[::-1] 

她與代碼測試:

assert is_palindrome("Never odd or even") 

任何幫助,將不勝感激!謝謝。

+0

原來,您的代碼並不關心大小寫或空格。你怎麼試着考慮這些? – Blender

+1

刪除所有空格並將所有內容轉換爲相同的大小寫,然後執行測試。 – Barmar

+0

我不知道如何編輯我的代碼來解決這個問題。我需要將字符串轉換爲列表嗎? – JDF

回答

1

我想這是你想要的東西: -
is_palindrome("Never odd or even".replace(" ", "").lower())

或者

如果你想改變你的函數,那麼你的函數看起來像:

def is_palindrome(phrase): 
    phrase=phrase.replace(" ","").lower() 
    return phrase == phrase[::-1] 

和你可以使用is_palindrome("Never odd or even")

0

首先刪除空格,然後使用遞歸,只檢查第一個和最後一個字符是否相同,在內部部分遞歸。

def is_palindrome(x): 
    x = "".join(x.split()).lower() 
    if (len(x) <= 1): return True 
    if x[0] != x[-1]: return False 
    return is_palindrome(x[1:-1]) 
+0

與簡單地反轉完整字符串相比,這不太可能更有效,因爲您在每次遞歸調用時都有效地複製(創建新字符串對象)('x [1:-1]'是一個具有其內存的新字符串) 。 –

+0

哦有趣。好點子 –