2

所以我最近实现了一个代码来检查一个单词是否是回文。

def isPalindrome():
    string = input('Enter a string: ')
    string1 = string[::-1]
    if string[0] == string[(len(string)-1)] and string[1:(len(string)-2)] == string1[1:(len(string)-2)]:
            print('It is a palindrome')
    else:
        print('It is not a palindrome')
isPalindrome()

我想知道是否有人可以给我关于简化代码的提示。

编辑 - 如果我要使用 statements 使函数成为迭代函数string == string1,我将如何停止无休止的 while 循环?我需要计数来停止while循环吗?

4

10 回答 10

6

不需要这么复杂的条件。您已经有一个反转字符串 ( string[::-1])。

您需要做的就是:

def isPalindrome():
    string1 = input('Enter a string: ')
    string2 = string1[::-1]
    if string1 == string2:
        return 'It is a palindrome'
    return 'It is not a palindrome'

isPalindrome()

(顺便说一下,不要string用作变量名。那是内置模块的名称)

最好返回字符串而不是打印它们。这样你的功能就不会return None(防止以后可能发生的一些事情)

于 2013-10-14T20:16:09.113 回答
4

你可以在一个班轮中做到这一点:

return "Is a palindrome" if string == string[::-1] else "Not a palindrome"

示例脚本:

>>> string = "stanleyyelnats"
>>> print "Is a Palindrome" if string == string[::-1] else "Not a palindrome"
>>> Is a Palindrome

您也可以这样做(虽然速度较慢):

print "Is a Palindrome" if string == ''.join(reversed(string)) else "Not a palindrome"

另外,使用raw_input和不使用input. 因为input会被评价。让我给你看一个例子:

脚本

inp = input("Evaluate ")

print inp

Evaluate "cheese" + "cake"
cheesecake
于 2013-10-14T20:23:31.920 回答
1

这是一个简单的解决方案,只需 1 行。

plandrom = lambda string: True if string == string[::-1] else False

于 2019-02-04T01:41:05.573 回答
0

所以,我刚开始学习 python,我一直在尝试这些练习,#8。虽然我看到很多这些答案都在创建一个新的反向字符串(这会增加内存开销)并比较两个字符串,但我认为我可以通过这样做来利用更少的内存:

def is_palindrome(s):
    l=len(s)
    list_s=list(s)
    for i in range(0,l):                                            
        if(list_s[i] !=list_s[l-i-1]):
            return False
    else:
        return True

您可以使用打印语句进行验证。我所做的只是将第一个索引与最后一个索引进行比较,将第二个索引与倒数第二个进行比较,依此类推。希望有帮助。

于 2014-08-11T01:17:02.067 回答
0

请检查此算法,

def is_palindrome(n):
   m = len(n)/2
   for i in range(m):
      j = i + 1
      if n[i] != n[-j]:
         return False
   return True

print is_palindrome('malayayalam')
于 2013-12-03T16:36:49.193 回答
0

从集合中检查计数器

from collections import Counter

def is_palindrome(letters):
    return len([v for v in Counter(letters).values() if v % 2]) <= 1
于 2015-05-11T04:36:30.657 回答
0

写回文的简单方法

a=raw_input("Enter the string : ")    # Ask user input

b= list(a)                            # convert the input into a list

print list(a)

b.reverse()                           # reverse function to reverse the 
                                      # elements of a list

print b

if list(a) == b:                      # comparing the list of input with b

   print("It is a palindrome")

else:

   print("It is not a palindrome")
于 2017-10-23T21:52:56.980 回答
0

你也可以试试这个

def palindrome(str1):
    return str1==str1[::-1]
print(palindrome(str1)

上面的答案根据给出的字符串返回一个布尔值,如果它是回文打印 true else false

于 2018-02-01T06:51:17.183 回答
0

我们可以使用反向字符串函数来验证回文:

def palindrome(s):
    str=s[::-1]
    if s==str:
        return True
    else:
        return False

palindrome('madam')
于 2018-08-06T17:31:41.180 回答
0

这是我想出的另一个解决方案:

###Piece of code to find the palindrome####
def palindrome():
    Palindromee = input("Enter the palindrome \t:")
    index = 0
    length = len(Palindromee)
    while index < length:
         if Palindromee[0] == Palindromee[-1] :
               index +=1
    print ("Palindrome worked as expected")       

palindrome()
于 2016-01-02T21:12:40.960 回答