2017-10-14 2 views
1

Ich habe eine Funktion zu testen, ob ein String Palindrom ist oder nicht:Funktion None zurückgibt, auch wenn ich zurückkehren Befehl

def palindrome(raw_text): 
    # first to convert raw_text to a string of lower case letters and remove the space 
    text = raw_text.lower() 
    text = text.replace(' ', '') 

    print('text is now', text) 
    print('length of text is', len(text)) 
    if len(text) == 1 or len(text) == 0: 
     return True 
    else: 
     if text[0] == text[-1]: 
      print('so far so good') 
      palindrome(text[1:-1]) 
     else: 
      return False 

Um es für Debug deutlich zu machen, habe ich ein paar Druckbefehl, mir zu helfen . wenn ich versuche:

raw_text = 'abcba' 
print(palindrome(raw_text)) 

ich bekommen:

text is now abcba 
length of text is 5 
so far so good 
text is now bcb 
length of text is 3 
so far so good 
text is now c 
length of text is 1 
None 

Warum bin ich am Ende eine None bekommen? Ich habe den Befehl return True haben für len(text) == 1 or 0

Wenn ich nur raw_text = 'a' geben, wird es mir geben:

text is now a 
length of text is 1 
True 
+0

BTW, können Sie dies ohne Rekursion leicht tun ... es sei denn, dies ist eine Übung über Rekursion beim Lernen. –

+1

@ PM2Ring ist dies in der Tat, Rekursion zu üben. Ansonsten werde ich einfach [:: - 1] zum Vergleichen verwenden. Danke –

Antwort

3

Sie haben vergessen, richtig zu Rekursion.

+0

GOt es !!! Vielen Dank!!! Das ist also mehr über die Rekursion. Ich muss dieses Keyword zu der Frage hinzufügen –

0

Danke, wie @Ignacio Vazquez-Abrams erwähnt, ich nicht ordnungsgemäß recurse. Eigentlich muss der Code nicht so kompliziert sein. ich überarbeitet habe es:

def palindrome(raw_text): 
    # first to convert raw_text to a string of lower case letters and remove the space 
    text = raw_text.lower() 
    text = text.replace(' ', '') 

    print('text is now', text) 
    print('length of text is', len(text)) 

    if len(text) <= 3: 
     return text[0] == text[-1] 
    else: 
     return text[0] == text[-1] and palindrome(text[1:-1]) 
Verwandte Themen