所以我必须构建一个函数来检查某些东西是否是回文,但它必须是递归的,它必须是线性的,它必须忽略标点符号。我不能使用任何导入,我的老师告诉我,使用翻译功能不够有效。我试图重新设计它,但我非常难过。
def isPalindrome(word):
newWrd = word.translate(None, "., ").lower()
if len(newWrd) <= 1:
return True
elif newWrd[0] != newWrd [-1]:
return False
else:
return isPalindrome(newWrd[1:-1])
答案 0 :(得分:1)
概念和动机很简单:
False
。这就是我想出的。下面假设一个统一的案例,并且所有标点符号都被删除了,但是如果你想在这个方法中做到这一点,我把它留作读者的练习。
def palindrome(word):
if not word:
return False
if len(word) == 1:
return True
else:
if word[0] == word[-1]:
return palindrome(word[1:-1])
else:
return False
答案 1 :(得分:0)
通常情况下,您应导入string
并使用string.punctuation
,但由于您不想导入任何内容,因此您只需将其硬拷贝到您的代码中即可。
由于你已经拥有isPalindrome()
递归函数,你可以编写一个wrapper
函数isPalindromeWrapper()
,它将获取输入,处理它(删除标点符号),然后调用isPalindrome()
功能。
punctuations = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
def removePunctuations(word):
return ''.join( [ c for c in word if c not in punctuations ] )
def isPalindrome(word):
print('isPalindrome({}) called.'.format(word))
if len(word) < 2:
return True
if word[0] == word[-1]:
return isPalindrome(word[1:-1])
return False
def isPalindromeWrapper(word):
word = removePunctuations(word)
return isPalindrome(word)
print isPalindromeWrapper('ab,c!b?a')
isPalindrome(abcba) called.
isPalindrome(bcb) called.
isPalindrome(c) called.
True