如何在Python中检查回文?

时间:2012-07-31 13:38:17

标签: python

嗨我正在处理一个python函数isPalindrome(x),用于三位数的整数,如果百位数等于一位数,则返回True,否则返回false。我知道我必须在这里使用字符串,这就是我所拥有的:

def isPal(x):
    if str(1) == str(3):
        return "True"

    else:
        return "False"

str(0)是单位,str(2)是数百位。我得到的只是假的?谢谢!

11 个答案:

答案 0 :(得分:6)

使用[]进行数组访问,而非()。此外,如果您正在寻找数百个和单位,请记住数组是0索引,这是代码的缩短版本。

def is_pal(num):
    return num[0] == num[2]

>>> is_pal('123')
False
>>> is_pal('323')
True

您可能希望将数字作为参数接收,然后将其转换为字符串:

def is_pal(num):
    x = str(num)
    return x[0] == x[2]

请注意,您只需检查字符串是否等于它的反向,它适用于任意数量的数字:

>>> x = '12321'
>>> x == x[::-1]
True

答案 1 :(得分:3)

str(1)将创建一个整数值为1的字符串。它不等于整数值3的字符串值 - 所以它总是为假。

您应该返回TrueFalse,而不是“True”和“False”的字符串......

这是你的目标,考虑到上述......(适用于任何长度)

def pal(num):
    forward = str(num)
    backward = ''.join(reversed(forward))
    return forward == backward

答案 2 :(得分:3)

您的问题是str(1) == '1'str(3) == '3'。您还会返回读取'True''False'的字符串值,而不是使用实际的TrueFalse值。

让我为您提出一个更简单的功能:

def isPal(x):
    s = str(x)          # convert int to str
    return s == s[::-1] # return True if s is equal to its reverse

s[::-1]创建字符串的反转;例如'foo'[::-1] == 'oof'。这是因为扩展切片表示法。

答案 3 :(得分:1)

str()将值转换为str。您想要访问每个角色。您可能希望对几种不同的技术进行基准测试。

>>> t1 = timeit.Timer(stmt="""\
... def isPal(x):
...     return x//100 == x%10
... isPal(434)
... isPal(438)
... """)
>>> t2 = timeit.Timer(stmt="""\
... def isPal(x):
...     return str(x)[0] == str(x)[2]
... isPal(434)
... isPal(438)
... """)
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000)
0.97 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000)
2.04 usec/pass

所以,看起来mod技术有效:

def isPal(x):
    return x//100 == x%10

答案 4 :(得分:1)

不知道为什么人们在划分和模数时会坚持字符串的想法:

def isPal(x):
    return (x/100)%10 == x%10

如果数字不大于999(OP表示的3位数),则将其简化为

def isPal(x):
    return x/100 == x%10

答案 5 :(得分:0)

str(x)提供传递给它的任何字符串值,因此在您的情况下,字符串"1"或字符串"3"。但你真正想要的是访问给定数字的第1和第3位数。因此,首先要将该数字转换为字符串(例如使用str(num)),然后必须考虑字符串中的索引以0开头,而不是1。 所以工作代码如culd看起来像这样:

def isPal(x):
  if str(x)[0] == str(x)[2]:
    return 'true'
  else:
    return 'false'

输出:

> isPal(101)
true
> isPal (203)
false

答案 6 :(得分:0)

str(1)只是为您提供了数字1的字符串表示形式:

>>> x = 357
>>> str(1)
'1'

你想要的是x的字符串表示的第一个索引

>>> x = 357
>>> str(x)    #string representation of x
'357'
>>> str(x)[0] #first index of that
'3'
>>> str(x)[2] #third index of that
'7'
>>> str(x)[0]==str(x)[2] #compare 1st and last
False
>>> x = 525
>>> str(x)[0]==str(x)[2] #compare 1st and last
True

答案 7 :(得分:0)

您比较数字1和3,但您需要比较输入变量的索引。

x = 1000
def isPal(x):
    return str(x[-1]) == str(x[-3]):

答案 8 :(得分:0)

您似乎还需要学习Python syntax

以下是实现所需目标的方法:

>>> def isPal(x):
...     x_as_str = str(x)
...     if len(x_as_str) != 3:
...         raise Exception("{} is not of length 3".format(x))
...     return x_as_str[0] == x_as_str[2]
...
>>> isPal(42)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 4, in isPal
Exception: 42 is not of length 3
>>> isPal(420)
False
>>> isPal(424)
True

答案 9 :(得分:0)

较小的解决方案是:

def isPalindrome(x):    
    return str(x) == str(x)[::-1]

这适用于单词和整数值。

答案 10 :(得分:-1)

def is_palindrome() :
a=(raw_input("enter the name : "))
b=a[::-1]
    if b == a:
    print " it is palindarome"
    else:
    print "  it is not palindarome"

is_palindrome()