【问题标题】:How to check if a string is a palindrome?如何检查字符串是否为回文?
【发布时间】:2017-08-22 18:21:10
【问题描述】:

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

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

如果输入了一个单词,例如:转子,我希望程序检查这个单词是否是回文并给出“给定的单词是回文”的输出。

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

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

【问题讨论】:

标签: python string python-3.x


【解决方案1】:

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

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 条件时,都会打印状态消息。相反,我对其进行了更改,使其仅在 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
    

    【讨论】:

    • 谢谢兄弟。但我有一个疑问,为什么在 if index == p 或 index + 1 == p 中使用 - "index + 1 == p" 而不是 "index == p":
    • 回文可以有 2 种类型。像“转子”这样的字母有奇数个,所以indexp 会集中在中间的字母上。但是对于像“maam”这样的其他词,indexp 最终会出现在中间的两个 'a' 上。因此,为了找到那个端点,我们使用index + 1 == p
    • This 是您应该使用raw_input 而不是input 的原因。
    • 但是 raw_input 被删除了,它与 python 3 中的输入相同吗?
    • 哦哈哈,抱歉,没注意到你用的是 Python 3。我会编辑代码。
    【解决方案3】:

    我看到互联网上的大多数解决方案都是将字符串作为输入,或者只是将字符串反转然后进行测试。下面是一个考虑两点的解决方案: 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)  
    

    【讨论】:

      【解决方案4】:
      [::-1]
      

      此代码是反转字符串的最简单方法。回文是一种读法相同的东西,无论你从哪一边读它。所以检查单词/字符串是否递归的最简单的函数是:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          最简单的方法是

          str = input('Enter the string: ')
          
          if str == str[::-1]:
             print('Palindrome')
          else
             print('Not')
          

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

          【讨论】:

            【解决方案7】:
            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")
            

            【讨论】:

              【解决方案8】:
              string = 'ASDBDSA'
              if string[:]==string[::-1]:
                   print("palindrome")
              else:
                   print("not palindrome")
              

              【讨论】:

                【解决方案9】:

                你也可以在 python 中使用三元运算符。

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

                【讨论】:

                  猜你喜欢
                  • 2012-04-05
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多