To by mělo dát dobrý výchozí bod:
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, celé by mohlo být jedním loop-level hlouběji. Ale myslel jsem, že by mohlo být jasnější tímto způsobem. Doufat, že to pomůže vám ...
Aktualizace:
Teď vidím, co chcete. Kromě toho, Mariin kód nezdá být práce pro mě. (Sorry ...) Takže prosím, na následující kód:
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)
Nyní mi dovolte, abych se snaží vysvětlit přístup zde. Algoritmus se pokusí najít „konec“, počínaje hodnotou „start“ a zkontrolujte, zda je „konec“ je v příštích 10 ^ 2 (což je 100 v tomto případě). Pokud selže, bude to dělat skok 10 ^ 2, dokud neproběhne úspěšně. Když se to podaří, že půjde o jeden stupeň nižší hloubky. To znamená, že to bude dělat skoky o řád menší. A smyčka, že způsob, jak do hloubky se rovná nule (= skoky 10 ^ 0 = 1). Algoritmus se zastaví, když se dosáhne hodnoty „End“.
Také si můžete všimnout, že jsem zavedený obtékání smyčku jsem se zmínil, takže je nyní možné definovat počáteční hloubku (nebo velikost skok) v proměnné.
První while zajišťuje, že první skok není překročení hodnoty „End“.
Máte-li jakékoli dotazy, jen neváhejte se zeptat.