我编写了一个函数来检查数字是否为步进:每个连续数字与最后一个数字相差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中的打印语句)。
这是为什么?我的代码中是否有导致此问题的错误?
答案 0 :(得分:0)
另一种计算方法是从向右移一位的相同数字中减去数字(而忽略第一位和最后一位数字)
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))