Ez ad egy jó kiindulási pont:
def leading(start, end):
leading = []
hundreds = start // 100
while (end - hundreds * 100) > 100:
i = hundreds * 100
leading.append(range(i,i+100))
hundreds += 1
c = hundreds * 100
tens = 1
while (end - c - tens * 10) > 10:
i = c + tens * 10
leading.append(range(i, i + 10))
tens += 1
c += tens * 10
ones = 1
while (end - c - ones) > 0:
i = c + ones
leading.append(i)
ones += 1
leading.append(end)
return leading
Ok, az egész lehetne egy loop-szinttel mélyebben. De azt gondoltam, hogy talán világosabb ilyen módon. Remélem, ez segít ...
Frissítés:
Most már látom, hogy mit akar. Továbbá maria kód nem úgy tűnik, hogy nekem dolgozik. (Bocs ...) Ezért kérjük, fontolja meg a következő kódot:
def leading(start, end):
depth = 2
while 10 ** depth > end : depth -=1
leading = []
const = 0
coeff = start // 10 ** depth
while depth >= 0:
while (end - const - coeff * 10 ** depth) >= 10 ** depth:
leading.append(str(const / 10 ** depth + coeff) + "X" * depth)
coeff += 1
const += coeff * 10 ** depth
coeff = 0
depth -= 1
leading.append(end)
return leading
print leading(199,411)
print leading(2169800, 2171194)
print leading(1000, 1453)
print leading(1,12)
Most hadd próbálja megmagyarázni a megközelítés itt. Az algoritmus megpróbálja megtalálni a „vége”, kezdve értéket „start” és ellenőrizze, hogy „vége” van a következő 10 ^ 2 (ami 100 ebben az esetben). Ha ez nem sikerül, akkor, hogy egy ugrás a 10 ^ 2, amíg sikerül. Ha sikerül akkor megy egy mélységi szintet. Azaz, ez teszi ugrások egy nagyságrenddel kisebb. És a hurok, hogy így, amíg a mélység egyenlő nullával (= ugrások 10 ^ 0 = 1). Az algoritmus megáll, amikor eléri a „vége” értéket.
Az is megfigyelhető, hogy már a végrehajtotta a csomagolás hurok már említettem, így most már lehetséges, hogy meghatározza a kezdő mélységet (vagy ugrás méret) egy változóban.
Az első while biztosítja az első lépést nem túllépnek a „vége” értéket.
Ha bármilyen kérdése van, csak nyugodtan kérdezz.