如果前4位数向前等于最后4位数,则检查数字

时间:2016-04-23 16:04:48

标签: python string

如果前进的最后4个元素等于后退的4个元素,则打印该数字。我输入了一个数字,其中最后4个元素显然是回文。为什么不打印这个号码?

def checkNum(i):
    num = str(i)
    if num[len(num)-5:len(num)-1:1] == num[len(num)-5:len(num)-1:-1]:
        print(num)
checkNum(777777)

4 个答案:

答案 0 :(得分:6)

你的切片错了。字符串的左侧部分应按照以下方式切片:num[:4],右侧部分应按照以下方式切片:num[:-5:-1]
修改评论
您始终可以打印您尝试在该功能中使用的切片。要解决此问题,请使用比777777更可视化的内容。例如:123456789。然后,如果在函数中打印切片,您将看到要比较的字符串:

def checkNum(i):
    num = str(i)
    print(num[-4:])
    print(num[-4::-1])
    print(num[-5:-1])
checkNum(123456789)

您将获得的输出是:

6789
654321
9876

这显示了切片的工作方式。当您使用负数索引时,您将从最后开始执行肯定步骤,因此num[-4:]将返回原始顺序中的最后4个字符。否定步骤将返回第一个字符。考虑一些手动测试,它确实节省了大量时间。

答案 1 :(得分:1)

在平等的后半部分,你将从len(num)-1向后退到len(num)-5

这是正确的版本:

def checkNum(i):
num = str(i)
if num[len(num)-5:len(num)-1:1] == num[len(num)-1:len(num)-5:-1]:
    print(num)
checkNum(777777)

答案 2 :(得分:1)

>>> num = str(777777)
>>> print num[len(num)-5:len(num)-1:1]
7777
>>> print num[len(num)-5:len(num)-1:-1]
***None***

要从最后一个位置访问最后四个,您需要

>>> print num[len(num)-1:len(num)-5:-1]
7777

def checkNum(i):
    num = str(i)
    if num[len(num)-5:len(num)-1:1] == num[len(num)-1:len(num)-5:-1]:
        print(num)

>>> checkNum(777777)
777777

答案 3 :(得分:1)

你可以前4个字符前进([:4]),反转字符串([::-1])并再次取4个字符(现在最后4个字符反转):

def checkNum(i):
    num = str(i)
    if num[:4] == num[::-1][:4]:
        print(num)
>>> checkNum("11118354367451111")
11118354367451111
>>> checkNum("1111835436745111")
>>> 
>>> checkNum("otto")
otto
>>>