1

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

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

    else:
        return "False"

str(0)个位,str(2)是百位。我得到的都是假的?谢谢!

4

11 回答 11

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
于 2012-07-31T13:40:31.100 回答
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'。这是因为扩展切片符号而起作用。

于 2012-07-31T13:44:45.450 回答
3

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

您应该返回Trueand False,而不是 "True" 和 "False" 字符串...

这就是您考虑到上述情况的目标......(适用于任何长度)

def pal(num):
    forward = str(num)
    backward = ''.join(reversed(forward))
    return forward == backward
于 2012-07-31T13:42:37.897 回答
1

str()将值转换为 a 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
于 2012-07-31T13:44:56.520 回答
1

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

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

如果数字不大于 999(OP 所述的 3 位数字),则它简化为

def isPal(x):
    return x/100 == x%10
于 2012-07-31T13:48:53.030 回答
0

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

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

输出:

> isPal(101)
true
> isPal (203)
false
于 2012-07-31T13:40:43.107 回答
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
于 2012-07-31T13:41:07.003 回答
0

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

x = 1000
def isPal(x):
    return str(x[-1]) == str(x[-3]):
于 2012-07-31T13:41:29.387 回答
0

看来你还需要学习Python 语法

这是实现您需要的一种方法:

>>> 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
于 2012-07-31T13:43:45.640 回答
0

一个较小的解决方案是:

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

这适用于单词和整数值。

于 2016-06-06T11:28:50.263 回答
-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()

于 2014-07-30T12:00:56.113 回答