我写了一个函数来检查一个数字是否在步进:每个连续的数字与最后一个数字正好相差 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)==1
、abs(3-2)==1
和abs(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))