检查python中的回文词

时间:2017-08-22 18:21:11

标签: python string python-3.x

我有一个代码来检查一个单词是否是回文:

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")

如果输入一个单词,例如:转子,我希望程序检查这个单词是否是回文并输出为&#34;给定的单词是回文&#34;。

但我面临的问题是,程序首先检查r和r并打印&#34;给定的单词是回文&#34;然后检查o和o并打印&#34;给定的单词是回文&#34;。它会在检查单词时多次打印结果。

我希望结果只传递一次。如何更改代码?

9 个答案:

答案 0 :(得分:4)

只需反转字符串并将其与原始

进行比较即可
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")

答案 1 :(得分:2)

我必须在您的代码中进行一些更改,以复制您所看到的输出。

最终,您想要的是仅在所有比较结束时显示消息。在你的情况下,你把它放在循环中,所以每次循环运行并且它达到if条件时,就会打印状态消息。相反,我更改了它,只有当两个指针indexp位于单词的中间时才打印。

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

答案 2 :(得分: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)  

答案 3 :(得分:0)

[::-1]

此代码是反转字符串的最简单方法。无论你从哪个方面阅读它,回文都是相同的。因此,检查单词/字符串是否递归的最简单函数是:

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

现在您可以查看此代码。例如:

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

答案 4 :(得分:0)

将您的实现更改为以下一种:

dt[, I := .I]  # Add a dummy id if one doesn't already exist
distance_by_I <- melt(dt, id.vars = "I")[, .(distance = sum(reference != value)), keyby = "I"]
dt[distance_by_I, on = "I"]

答案 5 :(得分:0)

最简单的方法是

{{parseFloat(post.meta.price).toFixed(0)}}

同一登录名也可以应用于回文数

答案 6 :(得分: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")

答案 7 :(得分:0)

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

答案 8 :(得分:0)

您也可以通过在 python 中使用三元运算符来实现。

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