python中的回文程序
Palindrome program in python
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 循环中似乎不起作用。见评论。
感谢您的帮助!
如果您想要一个倒序的范围(初始值大于最终值),您需要指定负步长(在您的情况下为 -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
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 循环中似乎不起作用。见评论。
感谢您的帮助!
如果您想要一个倒序的范围(初始值大于最终值),您需要指定负步长(在您的情况下为 -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