2017-12-26 6 views
0
def ispalindrome(s): 
    """Assumes s is a str 
    returns true if s is a ispalindrome 
    punctuation marks, blanks, and capitals are igored """ 
#s=raw_input("Please enter a word to check if it is a palindrome") 
    def tochars(s): 
    s=s.lower() 
    letters='' 
    for c in s : 
    if c in 'abcdefghijklmnopqrstuvwxyz': 
     letters=letters+c 
    return letters 

    def ispal(s): 
    print ' ispalindrome called with' , s 
    if len(s)<=1 : 
    print "about to return to from base case" 
    return True 
    else : 
     answer = s[0] == s[-1 ] and ispal (s[1:-1]) 
     print "about to return ",answer,"for" ,s 
     return answer 
    return ispal(tochars(s)) 



def testpal(): 
    print 'try doggod' 
    print ispalindrome('doggod') 

上記のコードを実行すると、seanlesslyコンパイルされますが、何も返されません。エラーメッセージは表示されませんが、プログラムは何も表示しません。いくつかの賛辞をください。なぜ私はそれを実行すると、再帰的プログラムは何も表示されません。

+2

を...これがある場合*コード全体を*なぜあなたは何が起こることを期待していますか?あなたは単純にいくつかの関数を定義しますが、それらの関数を呼び出すことはありません... –

答えて

3

ライン

return ispal(tochars(s)) 

すぎてインデントされます。

これはispal(s)関数の一部となり、決して呼び出されません。

あなたのインデントは一般的に非常に矛盾しています(時には1つ、場合によっては2つ、場合によっては3つのスペース)。これを修正しないと、このようなエラーが発生し続けるでしょう。

また、testpal()機能を呼び出すことは決してありません。あなたはこれらすべての問題を修正した場合

は、それが正常に動作します:

def ispalindrome(s): 
    def tochars(s): 
    s = s.lower() 
    letters = '' 
    for c in s: 
     if c in 'abcdefghijklmnopqrstuvwxyz': 
     letters = letters + c 
    return letters 

    def ispal(s): 
    print 'ispalindrome called with', s 

    if len(s) <= 1: 
     print "about to return to from base case" 
     return True 
    else: 
     answer = s[0] == s[-1 ] and ispal (s[1:-1]) 
     print "about to return ", answer, "for", s 
     return answer 

    return ispal(tochars(s)) 

def testpal(): 
    print 'try doggod' 
    print ispalindrome('doggod') 

testpal() 
関連する問題