onetoten = range(1,11) for count in onetoten: print countκαι το πάντα επίκαιρο αποτέλεσμα:
1 2 3 4 5 6 7 8 9 10Το αποτέλεσμα φαίνεται τρομαχτικά οικείο αλλά ο κώδικας είναι διαφορετικός. Η πρώτη γραμμή έχει την συνάρτηση range. Η συνάρτηση range χρησιμοποιεί δυο παραμέτρους, μια για την αρχή και μια για το τέλος range(start,finish). Η παράμετρος start είναι ο πρώτος αριθμός που δημιουργείται. Η παράμετρος finish είναι ένας αριθμός μεγαλύτερος από τον τελευταίο. Προσέξτε ότι το πρόγραμμα θα μπορούσε να γραφτεί με ακόμη πιο σύντομο τρόπο:
for count in range(1,11): print countΑκολουθούν κάποια παραδείγματα που δείχνουν τι συμβαίνει με την εντολή range:
>>> range(1,10) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(-32, -20) [-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21] >>> range(5,21) [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] >>> range(21,5) []Η γραμμή
for count in onetoten:
χρησιμοποιεί την δομή ελέγχου for. Μια δομή ελέγχου όπως η for μοιάζει με την for variable in list:. Η εντολή list διατρέχει τον κατάλογο από το πρώτο στοιχείο και φτάνει μέχρι το τελευταίο. Καθώς η for ``περνάει'' από το κάθε στοιχείο το ``κρατάει'' στην μεταβλητή variable. Αυτό επιτρέπει στην variable να χρησιμοποιείται κάθε φορά που τρέχει ο βρόγχος for. Να άλλο ένα παράδειγμα (δεν είναι ανάγκη να το πληκτρολογήσετε):
demolist = ['life',42, 'the universe', 6,'and',7,'everything'] for item in demolist: print "The Current item is:", print itemThe output is:
The Current item is: life The Current item is: 42 The Current item is: the universe The Current item is: 6 The Current item is: and The Current item is: 7 The Current item is: everythingΠροσέξτε πώς ο βρόγχος for διατρέχει τον κατάλογο και ορίζει στοιχεία σ' αυτόν. (Σημειώστε πως αν δεν θέλετε την εντολή print να ``κατεβαίνει'' στην επόμενη γραμμή μπορείτε να βάλετε ένα κόμμα στο τέλος κάθε εντολής (π.χ. αν θέλετε να εμφανίσετε και κάτι άλλο στην ίδια γραμμή)). Τελικά, σε τι μας χρησιμεύει ο βρόγχος for; Μια πρώτη χρήση είναι να διατρέχει έναν κατάλογο και να κάνει ...κάτι σε κάθε στοιχείο που συναντά. Να ένας γρήγορος τρόπος να προσθέσουμε όλα τα στοιχεία μεταξύ τους:
list = [2,4,6,8] sum = 0 for num in list: sum = sum + num print "The sum is: ",sumμε το απλό αποτέλεσμα:
The sum is: 20Θα μπορούσαμε να γράψουμε ένα πρόγραμμα που θα εντοπίζει αν υπάρχουν όμοια μεταξύ τους στοιχεία μέσα στον καταλογο, όπως το παρακάτω:
list = [4, 5, 7, 8, 9, 1,0,7,10] list.sort() prev = list[0] del list[0] for item in list: if prev == item: print "Duplicate of ",prev," Found" prev = itemκαι επιβεβαιωνόμαστε με το αποτέλεσμα:
Duplicate of 7 FoundΩραία, αλλά πως δουλεύει; Να μια ``ειδική έκδοση'' που θα σας βοηθήσει να καταλάβετε (δεν είναι απαραίτητο να το πληκτρολογήσετε):
l = [4, 5, 7, 8, 9, 1,0,7,10] print "l = [4, 5, 7, 8, 9, 1,0,7,10]","\tl:",l l.sort() print "l.sort()","\tl:",l prev = l[0] print "prev = l[0]","\tprev:",prev del l[0] print "del l[0]","\tl:",l for item in l: if prev == item: print "Duplicate of ",prev," Found" print "if prev == item:","\tprev:",prev,"\titem:",item prev = item print "prev = item","\t\tprev:",prev,"\titem:",itemμε αποτέλεσμα:
l = [4, 5, 7, 8, 9, 1,0,7,10] l: [4, 5, 7, 8, 9, 1, 0, 7, 10] l.sort() l: [0, 1, 4, 5, 7, 7, 8, 9, 10] prev = l[0] prev: 0 del l[0] l: [1, 4, 5, 7, 7, 8, 9, 10] if prev == item: prev: 0 item: 1 prev = item prev: 1 item: 1 if prev == item: prev: 1 item: 4 prev = item prev: 4 item: 4 if prev == item: prev: 4 item: 5 prev = item prev: 5 item: 5 if prev == item: prev: 5 item: 7 prev = item prev: 7 item: 7 Duplicate of 7 Found if prev == item: prev: 7 item: 7 prev = item prev: 7 item: 7 if prev == item: prev: 7 item: 8 prev = item prev: 8 item: 8 if prev == item: prev: 8 item: 9 prev = item prev: 9 item: 9 if prev == item: prev: 9 item: 10 prev = item prev: 10 item: 10Ο λόγος για τον οποίο έβαλα τόσες εντολές print ήταν για να μπορείτε να βλέπετε τι συμβαίνει σε κάθε γραμμή. (Παρεπιπτώντως αν δεν μπορείτε να βρείτε τι δεν πάει καλά με ένα πρόγραμμα, βάλτε όπου μπορείτε δηλώσεις print για να δείτε τι συμβαίνει). Αρχικά το πρόγραμμα ξεκινάει με εναν καταλογο (που τόσο καλά ξέρουμε, ε;). Μετά την ταξινομεί, έτσι αν υπάρχουν όμοια μεταξύ τους στοιχεία είναι δίπλα - δίπλα. Μετά ξεκινάει μια μεταβλητή με όνομα prev. Ύστερα το πρώτο στοιχείο του καταλογου διαγράφεται έτσι ώστε να είμαστε σίγουροι ότι το πρώτο στοιχείο δεν είναι κάποιο διπλό. Έπειτα εκκινείται ο βρόγχος for. Κάθε στοιχείο ελέγχεται για να διαπιστωθεί αν είναι όμοιο με το προηγούμενο. Αν είναι διπλό θα έχει βρεθεί. Η τιμή της μεταβλητής prev αλλάζει και έτσι την επόμενη φορά που ο βρόγχος εκτελείται η τιμή της prev είναι η τιμή του προηγούμενου στοιχείου στο τρέχον. Εϊμαστε βέβαιοι πως το 7 βρέθηκε να είναι διπλό. (Σημειώστε εδώ πως το
\t
χρησιμοποιείται για να δημιουργήσει ένα στηλοθέτη όπως το tab.)
Η άλλη χρήση των βρόγχων είναι το να κάνουν κάτι για ένα αριθμό επαναλήψεων. Παρακάτω έχουμε ένα παράδειγμα που θα μας εμφανίσει τους πρώτους έντεκα αριθμούς της ακολουθίας Fibonacci:
a = 1 b = 1 for c in range(1,10): print a, n = a + b a = b b = nκαι το εκπληκτικό αποτέλεσμα:
1 1 2 3 5 8 13 21 34Ό,τι γίνεται με τους βρόγχους for μπορεί να γίνει και με τους βρόγχους while αλλά οι βρόγχοι for αποτελούν έναν εύκολο τρόπο για να ``διατρέξουμε'' τα στοιχεία ενος καταλογου ή να κάνουμε κάτι για έναν συγκεκριμένο αριθμό επαναλήψεων.