我正在尝试制作一个程序,使用递归函数测试单词是否为回文。我几乎已经有了它的工作但是如果第一个和最后一个是相同的话,我只是让它继续下一个字母。
word = input("enterword")
word = word.lower()
def palindrom(word):
if len(word) == 1 or len(word) == 0:
return 0;
if word[0] == word[-1]:
print(word[0], word[-1])
palindrom(word);
else:
return 1;
test = palindrom(word)
if test == 0:
print("Yes")
elif test == 1:
print("No")
所以现在它测试第一个和最后一个字母是否相同,如果是,应该再次运行该函数。我只需要检查单词[1]和单词[-2]但我遇到了一些麻烦。我尝试拆分单词并弹出字母,但它一直在查看列表的长度为1.因此,如果有办法让它获得整个拆分列表的长度,那也可以。
答案 0 :(得分:3)
当您以递归方式调用方法并正确切片时,您只是错过了return语句:
def palindrom(word):
if len(word) == 1 or len(word) == 0:
return 0
if word[0] == word[-1]:
print(word[0], word[-1])
return palindrom(word[1:-1])
else:
return 1
答案 1 :(得分:0)
您缺少return语句,还需要在每次递归时传递简化字palindrom(word[1:-1])
。
word = "viooiv"
word = word.lower()
def palindrom(word):
if len(word) == 1 or len(word) == 0:
return 0
if word[0] == word[-1]:
print(word[0], word[-1])
return palindrom(word[1:-1])
else:
return 1
test = palindrom(word)
if test == 0:
print("Yes")
elif test == 1:
print("No"
输出:
('v', 'v')
('i', 'i')
('o', 'o')
Yes
答案 2 :(得分:0)
尝试使用此功能调用单词上的回文:
def palindrome(word, i = 0):
if i == len(word):
return word[0] == word[-1]
if word[i] == word[-i - 1]:
return palindrome(word, i + 1)
else:
return False
答案 3 :(得分:0)
更短的代码:
def checkpalindrome(value):
valuelen = len(value)
if valuelen < 2:
print("palindrome")
else:
checkpalindrome(value[1:valuelen-1]) if value[0] == value[-1] else print('Not palindrome')