我正在研究一個問題,該問題確定數字中的數字是否按遞增順序排列。現在,我用來解決問題的方法是,例如,考慮數字 5678。要檢查是否是5678的遞增序列,我把第一位和下一位和最后一位數字是5,6,8在范圍內的功能替代 range(first,last,(diff of first digit and the next to first digit))即range(5,8+1,abs(5-6))。結果是數字的升序排列對于這個問題,有一個約束說For incrementing sequences, 0 should come after 9, and not before 1, as in 7890.現在我的程序在輸入 7890 處中斷。我不知道如何編碼這個邏輯。有人能幫助我嗎?。增加序列的代碼是 len(set(['5','6','7','8']) - set(map(str,range(5,8+1,abs(5-6))))) == 0
3 回答

楊__羊羊
TA貢獻1943條經驗 獲得超7個贊
你可以用一個移位的 self 壓縮數字的字符串表示,并一起迭代連續的數字。使用all
檢查號碼跟隨,使用模10來處理0的情況。
num = 7890 result = all((int(y)-int(x))%10 == 1 for x,y in zip(str(num),str(num)[1:]))

陪伴而非守候
TA貢獻1757條經驗 獲得超8個贊
我會創建一個循環生成器并切片:
from itertools import cycle, islice
num = 5678901234
num = tuple(str(num))
print(num == tuple(islice(cycle(map(str, range(10))), int(num[0]), int(num[0]) + len(num))))
這比檢查單個數字之間差異的解決方案更快。當然,你可以犧牲長度來讓它更快:
def digits(num):
while num:
yield num % 10
num //= 10
def check(num):
num = list(digits(num))
num.reverse()
for i, j in zip(islice(cycle(range(10)), num[0], num[0] + len(num)), num):
if i != j:
return False
return True
添加回答
舉報
0/150
提交
取消