P.S:我是python(和一般的编程)的新手,但是,我有关于检查单词是否是回文的问题。这是我的代码:
def checkPal(word):
newWord = ""
for j in range(len(word)-1, 0):
newWord = newWord + word[j]
print(newWord) #this doesn't print anything
if(newWord==word):
print("Palandrome!!")
else:
print("sorry")
所以这不会引发任何错误,但是,它也不起作用!我知道还有其他方法可以做到这一点,例如:
str(n) == str(n)[::-1]
这就像一个魅力。但我想知道我的代码有什么问题。我似乎无法找到解决方案。我也分别尝试了项目分配:
Word = ""
toAdd = "LetsTryThis"
Word = Word + toAdd[0]
print(Word)
输出:
L
输出是预期的,但这似乎不适用于我的checkPal函数的for循环。见评论。
感谢您的帮助!
答案 0 :(得分:2)
如果您想要一个反向顺序的范围(初始值大于最终值),您需要指定一个负步(在您的情况下为-1)
range(5,0) # doesn't work
[]
range(5,0,-1) # works
[5, 4, 3, 2, 1]
但这是一种反转字符串的低效方法,改为使用word[::-1]
(会更有效率)
if word == word[::-1]:
print('Palindrome')
else:
print('Not a palindrome')
但是如果word
很长,则需要花费很多精力来反转它,然后将整个单词与原始单词进行比较。
相反,您只需从0
迭代一次到len(word)/2
并将第一个元素与最后一个元素进行比较,第二个元素与倒数第二个元素进行比较等等......直到其中一个元素失败,否则它是一个回文。
def is_palindrome(word):
is_palindrome = True
for i in range(len(word)/2):
if word[i] != word[-i-1]:
is_palindrome = False
break
# you can print if it's a palindrome:
if is_palindrome:
print('Palindrome')
else:
print('Not a palindrome')
# or just return a boolean answer
return is_palindrome
# test cases
is_palindrome('adda') # even palindrome
is_palindrome('adfda') # odd palindrome
is_palindrome('asda') # even non-palindrome
is_palindrome('adfsa') # odd non-palindrome