Αυτό θα σας δώσει ένα καλό σημείο εκκίνησης:
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
Εντάξει, το σύνολο θα μπορούσε να είναι ένας βρόχος επίπεδο βαθύτερα. Αλλά σκέφτηκα ότι θα μπορούσε να είναι πιο σαφής αυτός ο τρόπος. Ελπίζω, ότι αυτό σας βοηθά ...
Ενημέρωση:
Τώρα βλέπω τι θέλετε. Επιπλέον, ο κωδικός της Μαρίας δεν φαίνεται να λειτουργεί για μένα. (Συγγνώμη ...) Επομένως, σας παρακαλώ να εξετάσει τον ακόλουθο κώδικα:
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)
Τώρα, επιτρέψτε μου να προσπαθήσω να εξηγήσω την προσέγγιση εδώ. Ο αλγόριθμος θα προσπαθήσει να βρει «τέλος», αρχής γενομένης από την αξία «έναρξη» και ελέγξτε αν «τέλος» είναι το επόμενο 10 ^ 2 (η οποία είναι 100 σε αυτή την περίπτωση). Αν αποτύχει, θα κάνει ένα άλμα 10 ^ 2 μέχρι να πετύχει. Όταν καταφέρνει θα πάει ένα επίπεδο βάθους κάτω. Δηλαδή, θα κάνει άλματα μία τάξη μεγέθους μικρότερες. Και θηλιά με αυτόν τον τρόπο μέχρι το βάθος είναι ίσο με μηδέν (= πηδήματα από 10 ^ 0 = 1). Ο αλγόριθμος σταματά όταν φτάσει στο «τέλος» αξία.
Μπορεί επίσης να παρατηρήσετε ότι έχω το υλοποιηθεί το βρόχο περιτύλιγμα ανέφερα έτσι είναι τώρα δυνατό να καθορίσουν το βάθος εκκίνησης (ή το μέγεθος άλμα) σε μια μεταβλητή.
Το πρώτο βρόχο while κάνει ότι το πρώτο άλμα δεν υπερβεί την τιμή «τέλος».
Αν έχετε οποιεσδήποτε απορίες, απλά διστάσετε να ρωτήσετε.