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



我写了一个函数来检查一个数字是否在步进:每个连续的数字与最后一个数字正好相差 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.出于某种原因,当它到达第二个数字时,它会返回False,认为 2-1 不等于 1。(请参阅其他中的打印语句(。

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

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

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))

最新更新