
Στο σημερινό μας άρθρο θα ασχοληθούμε με μερικά ειδικά θέματα που αφορούν τον έλεγχο της ροής των προγραμμάτων σε Python. Επειδή πρόκειται για ένα θέμα που βασανίζει τους αρχάριους προγραμματιστές δε θα σας κουράσω με κάποιο άλλο θέμα σε αυτό το μέρος. Θα σας κουράσω όμως με ένα προαιρετικό διαγωνισμό, τον οποίο θα βρείτε στο τέλος του άρθρου.
Μετά το ευχάριστο διάλειμμα της προηγούμενης εβδομάδας, ήρθε η στιγμή να συνεχίσουμε το οδοιπορικό μας στην γλώσσα Python.
Στο τέλος του σημερινού οδηγού θα μπορούμε:
- Να επεμβαίνουμε στην εκτέλεση των βρόγχων for, while, κλπ. χρησιμοποιώντας τα break, continue, else, pass.
Προαπαιτούμενα
Μαθαίνοντας Python: Μέρος Ι, Μέρος ΙΙ, Μέρος ΙΙΙ, Μερος IV
Πριν ξεκινήσουμε…
… θα ήθελα να επισημάνω ένα – δύο πρακτικά ζητήματα.
Στη συνέχεια παρουσιάζεται ο τρόπος για να επιτευχθούν οι στόχοι που περιγράψαμε στην εισαγωγή. Θα παρατηρήσετε ότι το άρθρο ακολουθεί τη δομή:
Μικρή περιγραφή του τι θέλουμε να επιτύχουμε (+ επιπλέον σχόλια)
Παράδειγμα κώδικα
Στο τέλος του αρχείου θα βρείτε συνημμένο ένα python script που περιέχει συγκεντρωμένα όλα τα παραδείγματα.
Για να τα χρησιμοποιήσετε, αντιγράφετε το εκάστοτε παράδειγμα σε ένα νέο αρχείο python και το εκτελείτε (βλ. Μαθαίνοντας Python – Μέρος 1ο ). Τα παραδείγματα είναι φτιαγμένα με τέτοιον τρόπο ώστε να τυπώνουν τα αποτελέσματα στην οθόνη ώστε να μπορείτε να πιστοποιήσετε εύκολα τη λειτουργικότητά τους. Για διευκόλυνσή σας έχουμε χωρίσει τα παραδείγματα με σχόλια που δίνουν μια μικρή περιγραφή του τι επιχειρούμε κάθε φορά.
Βεβαιωθείτε ότι δεν ξεχάσατε το μάτι της κουζίνας ανοικτό, ετοιμάστε μία κούπα καφέ ή τσάι, βάλτε απαλή μουσική και ξεκινάμε…
Η δήλωση break
Για όσους από εσάς γνωρίζουν C / C++ η λειτουργία της δήλωση break πρέπει να είναι προφανής (λειτουργεί με τον ίδιο ακριβώς τρόπο και στην Python). Τοποθετώντας μια δήλωση break σε κάποιο σημείο ενός βρόγχου (for ή while) επιβάλλεται στον Διερμηνευτή της Python να διακόψει την λειτουργία του πλησιέστερου βρόγχου και να εξέλθει από αυτόν.
for i in range(10):
if i == 5:
break
print(i)
Όπως παρατηρείτε στην οθόνη των αποτελεσμάτων σας έχετε νούμερα μέχρι κι το 4. Αυτό συμβαίνει διότι μόλις ο Διερμηνευτής της Python συνάντησε τον αριθμό 5, η εντολή break διέκοψε το βρόγχο.
H δήλωση continue
Αντίθετα με την break, η δήλωση continue, περνάει στο επόμενο βήμα του βρόγχου, αγνοώντας τις εντολές για το τρέχον βήμα.
for i in range(10):
if i == 5:
continue
print(i)
Τρέχοντας το παραπάνω παράδειγμα θα διαπιστώσετε ότι στην οθόνη των αποτελεσμάτων σας εμφανίζονται όλοι οι αριθμοί εκτός του 5. Αυτό συμβαίνει διότι όταν ο βρόγχος φθάσει στον αριθμό 5 (έκτο βήμα του βρόγχου), αγνοεί, λόγω της continue την εντολή print(i) με αποτέλεσμα ο αριθμός 5 να μην τυπώνεται ποτέ.
Η δήλωση else (για έναν βρόγχο for)
Η εμφάνιση μιας δήλωσης else σε βρόγχους είναι κάτι καινούριο. Ενεργοποιείται σε έναν βρόγχο τύπου for όταν η λίστα αντικειμένων τελειώσει ή, αντίστοιχα, σε έναν βρόγχο τύπου while, όταν η συνθήκη γίνει ψευδής.
myCellar = ['apples', 'pork', 'cranberries', 'oil', 'wine', 'retsina']
productsInDemand = ['retsina', 'ouzo']
for demand in productsInDemand:
for supply in myCellar:
if demand == supply:
print("we do have ", demand)
break
else:
print("we ran out of ", demand)
Ας δούμε ένα παράδειγμα που συνδυάζει τη χρήση break και else σε βρόγχους τύπου for. Στο παραπάνω παράδειγμα υποθέτουμε ότι έχουμε ένα κελάρι με προϊόντα. Το απεικονίζουμε με μια λίστα myCellar στην οποία είναι παρόντα μόνον όσα προϊόντα υπάρχουν (ανεξαρτήτου ποσότητας) στο κελάρι. Μια δεύτερη λίστα (productsInDemand) περιλαμβάνει προϊόντα που μας ζητά κάποιος και εμείς πρέπει να ψάξουμε αν είναι διαθέσιμα στο κελάρι.
Το εξωτερικό for loop διατρέχει τα προϊόντα που ζητήθηκαν και, για κάθε ένα ζητούμενο, το εσωτερικό for τσεκάρει αν το ζητούμενο προϊόν υπάρχει στο κελάρι. Αν βρεθεί, τυπώνεται μήνυμα επιτυχίας της αναζήτησης και ο εσωτερικός βρόγχος σταματά να εκτελείται. Στην περίπτωση που τα στοιχεία της λίστας που διατρέχει ο εσωτερικός βρόγχος (myCellar) εξαντληθούν, εκτελούνται οι εντολές του else, δηλαδή τυπώνεται μήνυμα αποτυχίας.
H δήλωση pass
Η δήλωση pass, είναι μια εξαιρετικά ενδιαφέρουσα δήλωση, ίσως η πιο χρήσιμη για έναν προγραμματιστή. Όταν ο Διερμηνευτής τη συναντήσει, δεν κάνει απολύτως τίποτε.
while True:
pass
Ο συγκεκριμένος κώδικας (υπάρχει και στο παράδειγμα του σημερινού οδηγού) θα προκαλέσει έναν ατέρμονα βρόγχο (δηλ έναν βρόγχο που θα απασχολεί αιώνια τον διερμηνευτή σας). Μην αγχωθείτε, ανά πάσα στιγμή τον διακόπτετε πατώντας την ακολουθία πλήκτρων ctrl + c
Γιατί είναι κάτι τέτοιο χρήσιμο; Θα αναρωτηθείτε εύλογα. Σκεφτείτε ότι έχετε να κατασκευάσετε ένα μεγάλο πρόγραμμα κάνοντας χρήση αντικειμενοστρεφούς σχεδίασης. Ο αντικειμενοστρέφής προγραμματισμός, όπως ίσως να ξέρετε, κάνει χρήση αντικειμένων (θα δούμε αναλυτικά το θέμα των αντικειμένων σε μεταγενέστερους οδηγούς). Ας υποθέσουμε λοιπόν ότι σχεδιάζεται ένα σκελετό του προγράμματός σας που αποτελείτε από τα αντικείμενα vehicle, car, human.
Κάνοντας αυτό:
class Vehicle:
pass
class Car:
pass
class Human:
pass
μπορείτε να έχετε τις κλάσεις που αποφασίσατε να δημιουργήσετε, κενές, ώστε σιγά – σιγά να υλοποιείτε το σύστημά σας, γνωρίζοντας πάντα όλα όσα έχετε να κάνετε.
Σκεφτείτε το και θα δείτε ότι θα κάνει τη ζωή σας ευκολότερη…
Mini Διαγωνισμός
Κατασκευάστε ένα πρόγραμμα σε Python το οποίο, δεδομένου ενός ονόματος (δωσμένο με λατινικούς χαρακτήρες), να εμφανίζει μόνον τα σύμφωνα.
- Υποθέστε ότι έχουμε να κάνουμε με ονόματα στα λατινικά (John, Mary, Aristides, Isocrates, κλπ.), όχι Greeklish (Kwstas, Evgenia)
- Το όνομα μπορεί να περιέχει κεφαλαίους και πεζούς χαρακτήρες (Christine, Apostolos)
- Τα φωνήεντα στο αγγλικό αλφάβητο είναι τα a, o, e, i, u, y
- Να γίνει χρήση break και else δηλώσεων
Μπορείτε να στείλετε τις απαντήσεις σας στο προσωπικό μου email (akritiko@gmail.com) με θέμα «GreekTuts: Διαγωνισμός Python». Οι 3 καλύτερες λύσεις (που δουλεύουν) μέχρι τέλος Δεκεμβρίου κερδίζουν από μια Basic συνδρομή ενός μηνός για την ιστοσελίδα μας.
Περιμένω τις σκέψεις σας… Μέχρι την επόμενη φορά,
να είστε καλά και να φροντίζεται τον εαυτό σας.
Μπορείτε να κατεβάσετε τα αρχεία του βοηθήματος εδώ






































































Κανένα Σχόλιο