检查数字是否步进的函数返回false

时间:2019-02-10 09:54:32

标签: python

我编写了一个函数来检查数字是否为步进:每个连续数字与最后一个数字相差1。

def isStep(num):
    num = str(num)
    prevDigit = int(num[0])-1

    for i in str(num):
        if (int(i)-1 == prevDigit or int(i)+1 == prevDigit):
            prevDigit = i
            continue
        else:
            print(int(i)-1, prevDigit)
            return False

    return True

我尝试使用数字1234。由于某种原因,当到达2-1位时,它返回False,认为2-1不等于1。(请参见else中的打印语句)。

这是为什么?我的代码中是否有导致此问题的错误?

1 个答案:

答案 0 :(得分:0)

另一种计算方法是从向右移一位的相同数字中减去数字(而忽略第一位和最后一位数字)

1232     (a)
 1232    (b)
-----
_111_    (abs(a-b) per digit)

通过减去我在这里是指绝对差abs(2-1)==1abs(3-2)==1abs(2-3)==1(即,相差1,向上或向下)。

在Python中,它看起来像:

def isStep(n):
    a = map(int, str(n)[1:])   # convert to a list of integer digits
    b = map(int, str(n)[:-1])
    return all(abs(a_digit - b_digit) == 1 for a_digit, b_digit in zip(a, b))