Βρόγχοι For

Ξεκινάμε το κεφάλαιο όπως πάντα με μια άσκηση πληκτρολόγησης:
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 item
The 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 αποτελούν έναν εύκολο τρόπο για να ``διατρέξουμε'' τα στοιχεία ενος καταλογου ή να κάνουμε κάτι για έναν συγκεκριμένο αριθμό επαναλήψεων.