在 Python 中测试回文
Testing for a Palindrome in Python
我现在知道有更好的解决方案,但我很困惑为什么我会得到这样的结果。
import sys
def isPalindrome(test):
if len(test) == 1:
return("Is a palindrome")
else:
if test[0] == test[-1]:
isPalindrome(test[1:-1])
else:
return("Not a palindrome")
print(isPalindrome(sys.argv[1]))
在真正的回文中,我得到 'None'。当结果不是回文时,我得到的期望值是'Not a palindrome'.
更改为以下行:
return isPalindrome(test[1:-1])
您必须 return 一个值,否则 return 的值是 None
。
你的问题:第 7 行应该是:
return isPalindrome(test[1:-1])
没有return,调用函数,return None.
此外,如其他帖子所述,偶数字符串存在问题,因此添加 len(test)==0 的条件。
if --> True 的情况下没有return路径。当你 return 退出递归时,你只会 return "Is a palindrome" 到它的级别,但除此之外你是 return 将 Null 字符串传递给 main 函数。
你没有考虑到递归何时变成空字符串。所以条件 test[0] == test[-1]
给出 *** IndexError: string index out of range
这个有效:
def isPalindrome(test):
if (len(test) == 1 or len(test)==0):
return("Is a palindrome")
else:
print test[0] == test[-1]
if test[0] == test[-1]:
return isPalindrome(test[1:-1])
else:
print('Not')
return("Not a palindrome")
print(isPalindrome("aa"))
另一个建议
def isPalindrome (test):
if test[0] != test[-1]: return ("It is NOT a Palindrome")
if len(test) == 1: return ("It is a Palindrome")
else:return test[0] == test[-1] and isPalindrome(test[1:-1])
我现在知道有更好的解决方案,但我很困惑为什么我会得到这样的结果。
import sys
def isPalindrome(test):
if len(test) == 1:
return("Is a palindrome")
else:
if test[0] == test[-1]:
isPalindrome(test[1:-1])
else:
return("Not a palindrome")
print(isPalindrome(sys.argv[1]))
在真正的回文中,我得到 'None'。当结果不是回文时,我得到的期望值是'Not a palindrome'.
更改为以下行:
return isPalindrome(test[1:-1])
您必须 return 一个值,否则 return 的值是 None
。
你的问题:第 7 行应该是:
return isPalindrome(test[1:-1])
没有return,调用函数,return None.
此外,如其他帖子所述,偶数字符串存在问题,因此添加 len(test)==0 的条件。
if --> True 的情况下没有return路径。当你 return 退出递归时,你只会 return "Is a palindrome" 到它的级别,但除此之外你是 return 将 Null 字符串传递给 main 函数。
你没有考虑到递归何时变成空字符串。所以条件
test[0] == test[-1]
给出*** IndexError: string index out of range
这个有效:
def isPalindrome(test):
if (len(test) == 1 or len(test)==0):
return("Is a palindrome")
else:
print test[0] == test[-1]
if test[0] == test[-1]:
return isPalindrome(test[1:-1])
else:
print('Not')
return("Not a palindrome")
print(isPalindrome("aa"))
另一个建议
def isPalindrome (test):
if test[0] != test[-1]: return ("It is NOT a Palindrome")
if len(test) == 1: return ("It is a Palindrome")
else:return test[0] == test[-1] and isPalindrome(test[1:-1])