嗨我正在处理一个python函数isPalindrome(x)
,用于三位数的整数,如果百位数等于一位数,则返回True,否则返回false。我知道我必须在这里使用字符串,这就是我所拥有的:
def isPal(x):
if str(1) == str(3):
return "True"
else:
return "False"
str(0)
是单位,str(2)
是数百位。我得到的只是假的?谢谢!
答案 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的字符串值 - 所以它总是为假。
您应该返回True
和False
,而不是“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'
的字符串值,而不是使用实际的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'
。这是因为扩展切片表示法。
答案 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()