如何检查一个字符串是否是回文?

6

我有一段代码用于检查单词是否回文:

str = input("Enter the string")
l = len(str)
p = l-1
index = 0
while index < p:
    if str[index] == str[p]:
        index = index + 1
        p = p-1
        print("String is a palindrome")
        break
    else:
        print("string is not a palindrome")

如果输入一个单词,例如:rotor,我希望程序可以检查该单词是否回文,并输出“给定的单词是回文”。但我遇到了问题,程序首先检查 r 和 r 并打印“给定的单词是回文”,然后再检查 o 和 o 并打印“给定的单词是回文”。它会打印与检查单词次数相同的结果。我想结果只被输出一次。如何修改代码?

这是一个需要使用while完成的练习吗?还是可以使用更简单的if word == word[::-1]?(其中word为你的输入) - Jon Clements
1
可能是如何使用Python逻辑检查回文的重复问题。 - user3657941
9个回答

7

只需将字符串反转并与原始字符串进行比较即可。

string_to_check = input("Enter a string")

if string_to_check == string_to_check[::-1]:
    print("This is a palindrome")
else:
    print("This is not a palindrome")

2
我不得不对您的代码进行了一些更改,以复制您所说的输出结果。
最终,您想要的是仅在所有比较结束后显示消息。在您的情况下,它在循环内部,因此每次循环运行并且达到if条件时,状态消息都会被打印。相反,我已经更改了它,使其仅在两个指针index和p处于单词中间时才打印。
str = input("Enter the string: ")
l = len(str)
p = l-1
index = 0
while index < p:
    if str[index] == str[p]:
        index = index + 1
        p = p-1
        if index == p or index + 1 == p:
            print("String is a palindrome")
    else:
        print("string is not a palindrome")
        break

谢谢兄弟。但我有一个疑问,为什么在 if index == p or index + 1 == p: 中使用了 "index + 1 == p" 而不是 "index == p"? - Kawin M
2
可能有两种回文。像“rotor”这样的单词,它们的字母数是奇数,所以indexp会汇聚到中间的字母。但对于其他单词,如“maam”,indexp会停留在中间的两个'a'上。因此,为了找到那个结束点,我们使用index + 1 == p - Antimony
这就是为什么你应该使用raw_input而不是input的原因。 - Antimony
1
但是 raw_input 已经被移除了,现在在 Python 3 中与 input 是一样的,对吗? - Kawin M
1
哦哈哈,抱歉,我没有注意到你使用的是Python 3。我会编辑代码的。 - Antimony

1

我看到互联网上大多数的解决方案都是将字符串作为输入或仅对字符串进行反转并进行测试。下面是一个解决方案,考虑以下两个要点: 1)输入是非常大的字符串,因此不能仅从用户那里获取。 2)输入字符串将具有大写字母和特殊字符。 3)我尚未研究复杂性并希望进一步改进。欢迎提出建议。

    def isPalimdromeStr(self, strInput):
        strLen = len(strInput)
        endCounter = strLen - 1
        startCounter = 0
        while True:
#             print(startCounter, endCounter)
#             print(strInput[startCounter].lower(), strInput[endCounter].lower())

            while not blnValidCh(self, strInput[startCounter].lower()):
                startCounter = startCounter + 1

            while not blnValidCh(self, strInput[endCounter].lower()): 
                endCounter = endCounter - 1

#             print(startCounter, endCounter)
#             print(strInput[startCounter].lower() , strInput[endCounter].lower())
            if (strInput[startCounter].lower() != strInput[endCounter].lower()):
                return False
            else:
                startCounter = startCounter + 1
                endCounter = endCounter - 1

            if (startCounter == strLen - 1):
                return True

#             print("---")


    def blnValidCh(self, ch):
        if rePattern.match(ch):
            return True

        return False

global rePattern
rePattern = re.compile('[a-z]')

blnValidPalindrome = classInstance.isPalimdromeStr("Ma##!laYal!! #am")
print("***")
print(blnValidPalindrome)  

0

你也可以使用 Python 中的三元运算符来实现。

string = "Madam"
print("palindrome") if string == string[::-1] else print("not a palindrome")

0

请将您的实现更改为以下内容:

string_to_be_checked = input("enter your string ")
if string_to_be_checked == string_to_be_checked[::-1] :
    print("palindrome")
else:
    print("not palindrome")

0
[::-1]

这段代码是反转字符串的最简单方法。回文是指无论从哪一侧读取,都能读出相同的内容。因此,检查单词/字符串是否为递归的最简单函数如下:

def checkPalindrome(s):
    r = s[::-1]
    if s == r:
        return True
    else:
        return False

现在你可以检查这段代码。例如:

checkPalindrome("madam")
>>> True
checkPalindrome("sentence")
>>> False

0

最简单的方法是

str = input('Enter the string: ')

if str == str[::-1]:
   print('Palindrome')
else
   print('Not')

相同的登录也可以应用于数字回文


0
string = 'ASDBDSA'
if string[:]==string[::-1]:
     print("palindrome")
else:
     print("not palindrome")

0
def palindrome(s):
    if len(s)<1:
       return True
    else:
        if s[0]==s[-1]:
           return palindrome(s[1:-1])
        else:
           return False
a=str(input("enter data")
if palindrome(a) is True:
    print("string is palindrome")
else:
    print("string is not palindrome")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接