嗨,我正在研究一个isPalindrome(x)
用于三位整数的 python 函数,如果百位等于个位,则返回 True,否则返回 false。我知道我必须在这里使用字符串,这就是我所拥有的:
def isPal(x):
if str(1) == str(3):
return "True"
else:
return "False"
是str(0)
个位,str(2)
是百位。我得到的都是假的?谢谢!
嗨,我正在研究一个isPalindrome(x)
用于三位整数的 python 函数,如果百位等于个位,则返回 True,否则返回 false。我知道我必须在这里使用字符串,这就是我所拥有的:
def isPal(x):
if str(1) == str(3):
return "True"
else:
return "False"
是str(0)
个位,str(2)
是百位。我得到的都是假的?谢谢!
数组访问是用 完成的[]
,而不是()
。此外,如果您正在寻找数百和单位,请记住数组是 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
你的问题是str(1) == '1'
和str(3) == '3'
。您还将返回读取的字符串值'True'
,而'False'
不是使用实际值True
和False
值。
让我为您提出一个更简单的功能:
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'
。这是因为扩展切片符号而起作用。
str(1)
将创建一个整数值 1 的字符串。它不等于整数值 3 的字符串值 - 所以它总是 False。
您应该返回True
and False
,而不是 "True" 和 "False" 字符串...
这就是您考虑到上述情况的目标......(适用于任何长度)
def pal(num):
forward = str(num)
backward = ''.join(reversed(forward))
return forward == backward
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
不知道为什么人们在除法和模数会做的时候坚持字符串的想法:
def isPal(x):
return (x/100)%10 == x%10
如果数字不大于 999(OP 所述的 3 位数字),则它简化为
def isPal(x):
return x/100 == x%10
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
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
您比较数字 1 和 3,但您需要比较输入变量的索引。
x = 1000
def isPal(x):
return str(x[-1]) == str(x[-3]):
看来你还需要学习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
一个较小的解决方案是:
def isPalindrome(x):
return str(x) == str(x)[::-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()