26
ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

#3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Embed Size (px)

DESCRIPTION

WEFEWG

Citation preview

Page 1: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Page 2: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

1

Page 3: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Σκοπός της Διδακτικής Ενότητας

Ο σκοπός της διδακτικής ενότητας είναι η εξοικείωση των εκπαιδευόμενων με τις βασικές αρχές και τη χρήση

λεξικών και δομών ελέγχου ροής. Επίσης, η εξοικείωσή τους με τη συγγραφή απλών προγραμμάτων και

σεναρίων σε αυτά τα αντικείμενα. Για το λόγο αυτό παρουσιάζονται αναλυτικά τα βασικά στοιχεία με απλά

παραδείγματα προς εκτέλεση από τους εκπαιδευόμενους.

Προσδοκώμενα Αποτελέσματα

Μετά την ολοκλήρωση της συγκεκριμένης διδακτικής ενότητας οι εκπαιδευόμενοι θα είναι σε θέση:

να γνωρίζουν τα βασικά στοιχεία των λεξικών στην Python και να είναι σε θέση να γνωρίζουν πώς να

γράφουν και να εκτελούν απλά σενάρια και προγράμματα,

να γνωρίζουν τα βασικά στοιχεία ελέγχου ροής στην Python και να είναι σε θέση να γνωρίζουν πώς να

γράφουν και να εκτελούν απλά σενάρια και προγράμματα, και

να γνωρίζουν τα βασικά στοιχεία δομών ελέγχου ροής στην Python και να είναι σε θέση να γνωρίζουν

πώς να γράφουν και να εκτελούν απλά σενάρια και προγράμματα σε Python.

Έννοιες - Κλειδιά

Λεξικά

While loop

For loop

If-elif-else

Εσοχές και blocks

Εισαγωγικές Παρατηρήσεις

Σε αυτή την ενότητα οι εκπαιδευόμενοι έρχονται σε επαφή με τα λεξικά και τον έλεγχο ροής της γλώσσας, τα

οποία αποτελούν βασική γνώση για την δημιουργία ολοκληρωμένων σεναρίων και προγραμμάτων. Είναι

θεμελιώδη τόσο για την συγγραφή όσο και για την κατανόηση ολοκληρωμένων προγραμμάτων.

Στην πρώτη υποενότητα παρουσιάζονται οι βασικές αρχές που ισχύουν για τα λεξικά και παρέχονται

παραδείγματα. Στη δεύτερη υποενότητα παρουσιάζονται αναλυτικά τα βασικά στοιχεία και οι δομές ελέγχου

ροής με παραδείγματα για κατανόηση και εκτέλεση από τους εκπαιδευόμενους.

2

Page 4: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

1. ΛΕΞΙΚΑ

 

Στα πλαίσια αυτής της υποενότητας θα παρουσιαστούν και αναλυθούν τα βασικά στοιχεία των λεξικών

της Python και θα παρουσιαστούν αρκετά παραδείγματα για εκτέλεση από τους εκπαιδευόμενους.

1.1 Τα βασικά στοιχεία

Τα λεξικά είναι ένας τύπος δεδομένων της Python, ο οποίος μπορεί να θεωρηθεί κατά ένα τρόπο ως

γενίκευση του τύπου δεδομένων λίστας. Τα λεξικά, όπως και οι λίστες, είναι δομές δεδομένων που μπορούν

να αποθηκεύσουν αντικείμενα κάθε τύπου. Πολύ γενικά μπορούμε να πούμε ότι, ενώ σε μια λίστα μπορούμε

να δεικτοδοτήσουμε ένα στοιχείο της με έναν ακέραιο αριθμό, σε ένα λεξικό μπορούμε να το

δεικτοδοτήσουμε με οποιοδήποτε αντικείμενο. Η δομή του λεξικού δεδομένων δεν είναι, ενδεχομένως, πολύ

οικεία σε προγραμματιστές που δεν έχουν επαφή με την Python. Οπότε μια καλή αφετηρία για την

κατανόηση της χρήσης τους είναι η σύγκρισή τους με τις λίστες.

Σε μια λίστα οι τιμές αποθηκεύονται ταξινομημένες ανάλογα με τη θέση τους στη λίστα. Οι τιμές στις λίστες

είναι προσπελάσιμες με τη χρήση ακεραίων αριθμών που καλούνται δείκτες ή ευρετήρια, οι οποίοι

υποδηλώνουν σε ποια θέση βρίσκεται η τιμή σε μια λίστα. Οι δείκτες που χρησιμοποιούνται για την

πρόσβαση στις τιμές είναι συνεχόμενοι ακέραιοι.

Τα λεξικά δεν έχουν ενσωματωμένη διάταξη. Σε ένα λεξικό οι τιμές που αποθηκεύονται δεν ταξινομούνται με

κάποιο αυτονόητο αυτόματο τρόπο, αλλά μπορείτε να ορίσετε εσείς μια ειδική διάταξη των στοιχείων του με

την χρήση μιας διαφορετικής δομής δεδομένων (συχνά μια λίστα) ώστε να αποθηκεύσετε μια τέτοια διάταξη

με ρητό και σαφή τρόπο. Οι τιμές στα λεξικά είναι προσπελάσιμες με τη χρήση κλειδιών που υποδεικνύουν

σε ποιο σημείο του λεξικού βρίσκεται μια τιμή. Τα κλειδιά του λεξικού δεν είναι αποκλειστικά αριθμοί αλλά

επιτρέπεται να είναι ακέραιοι, συμβολοσειρές ή άλλα αντικείμενα της Python.

Με άλλα λόγια, τόσο τα λεξικά όσο και οι λίστες παρέχουν προσπέλαση σε διάφορες τιμές με τη χρήση

ευρετηρίου, αλλά το σύνολο των τιμών που μπορεί να χρησιμοποιηθεί ως δείκτης σε ένα λεξικό είναι πολύ

ευρύτερο. Επιπλέον, ο μηχανισμός που χρησιμοποιεί ένα λεξικό για την ευρετηρίαση είναι αρκετά

διαφορετικός από αυτόν μιας λίστας.

Ένα κενό λεξικό δημιουργείται παρόμοια με μια κενή λίστα, με τη διαφορά ότι χρησιμοποιούνται άγκιστρα

αντί για τετράγωνες αγκύλες.

Για παράδειγμα αν θέλουμε να δημιουργήσουμε μια κενή λίστα θα δώσουμε την παρακάτω εντολή, όπου η

κενή λίστα ανατίθεται στη μεταβλητή list1.

Για να δημιουργήσουμε ένα κενό λεξικό θα δώσουμε την παρακάτω εντολή, όπου το λεξικό ανατίθεται στη

μεταβλητή dict1.

3

Page 5: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Όταν δημιουργηθεί ένα λεξικό, μπορούμε να αποθηκεύσουμε τιμές σε αυτό, όπως και σε μια λίστα. Για

παράδειγμα:

Εδώ βλέπουμε ότι η εκτύπωση των στοιχείων του λεξικού μας επιστρέφει ζεύγη τιμών της μορφής

κλειδί:τιμή, ενώ σε μια λίστα το κλειδί είναι, όπως είπαμε, αυτονόητα οι συνεχόμενοι ακέραιοι αριθμοί. Στο

παραπάνω τα κλειδιά είναι οι ακέραιοι 0,1,2 κλπ, καθώς δεν ορίσαμε κάποιες ειδικές τιμές.

Ωστόσο, υπάρχει διαφορά μεταξύ της λίστας και του λεξικού ως προς τον τρόπο ανάθεσης τιμών. Η ίδια

εργασία ανάθεσης τιμών σε μια λίστα θα επέστρεφε σφάλμα, επειδή στην Python είναι παράτυπο να

ανατεθεί μια τιμή σε θέση σε μια λίστα που δεν υπάρχει ήδη, οπότε θα λάβουμε σφάλμα. Στα λεξικά αυτό δεν

είναι πρόβλημα, καθώς νέες θέσεις δημιουργούνται όταν πρέπει. Για παράδειγμα:

Στη λίστα, αντίθετα, οι τιμές ορίζονται ως εξής.

4

Page 6: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Όταν ορίσουμε τιμές σε ένα λεξικό, μπορούμε να τις προσπελάσουμε με τρόπο παρόμοιο με τις τιμές σε μια

λίστα, δίνοντας τη θέση του στοιχείου στο λεξικό με βάση την αύξουσα αρίθμηση των στοιχείων. Αυτό κάνει

ένα λεξικό να μοιάζει γενικά με μια λίστα. Για παράδειγμα:

Ωστόσο, στο λεξικό υπάρχει η επιπλέον δυνατότητα που δεν είναι εφικτή σε μια λίστα. Μπορούμε να

αποθηκεύσουμε τις τιμές σε κλειδιά που δεν είναι ακέραιοι αύξουσας αρίθμησης. Αυτό μας δίνει πολύ

περισσότερες δυνατότητες εργασίας από τις λίστες. Αν δεν ορίσουμε κλειδιά, τότε αυτά είναι οι τιμές των

ακεραίων δεικτών. Για παράδειγμα:

Αυτό δεν είναι εφικτό με λίστα. Οι λίστες απαιτούν οι δείκτες να είναι ακέραιοι αριθμοί, ενώ τα κλειδιά ενός

λεξικού είναι λιγότερο περιορισμένα, καθώς μπορεί να είναι αριθμοί, συμβολοσειρές ή ακόμη και ένα

5

Page 7: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

αντικείμενο της Python. Αυτό κάνει τα λεξικά κλασσική επιλογή για εργασίες όπου οι λίστες δεν είναι

επαρκείς.

1.2 Βασικές λειτουργίες

Εκτός από τις λειτουργίες της ανάθεσης τιμών, ορισμού κλειδιών και πρόσβασης στοιχείων σε ένα λεξικό,

όπως παρουσιάστηκαν προηγουμένως, τα λεξικά υποστηρίζουν και επιπλέον λειτουργίες μέσα από μια

σειρά ενσωματωμένων συναρτήσεων του αντικειμένου τύπου λεξικού. Ορισμένες από τις σημαντικότερες

είναι οι παρακάτω, ενώ πλήρης αναφορά μπορεί να αναζητηθεί στην τεκμηρίωση της γλώσσας.

Σε ένα λεξικό οι τιμές μπορούν να ανακτηθούν όπως προηγουμένως ή μπορεί να χρησιμοποιηθεί η

συνάρτηση value. Επίσης, τα κλειδιά μπορούν να ανακτηθούν με τη χρήση της συνάρτησης keys. Εδώ θα

παρατηρήσουμε ότι τα κλειδιά δεν εμφανίζονται ταξινομημένα, ούτε με βάση τη σειρά που δημιουργήθηκαν.

Για να γίνει αυτό θα πρέπει να αποθηκεύσουμε τα κλειδιά σε μια λίστα και στη συνέχεια να ταξινομήσουμε τη

λίστα. Για παράδειγμα:

Για να ανακτήσουμε όλα τα κλειδιά και τις συσχετισμένες τιμές του, χρησιμοποιούμε τη μέθοδο items.

Η προσθήκη μιας εγγραφής σε ένα λεξικό γίνεται χωρίς κάποιο πρόβλημα.

Η διαγραφή μιας εγγραφής πραγματοποιείται με την εντολή del:

6

Page 8: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Ο αριθμός των εγγραφών σε ένα λεξικό μπορεί να ληφθεί με τη μέθοδο len.

Όταν επιχειρήσουμε να προσπελάσουμε ένα κλειδί το οποίο δεν υπάρχει σε ένα λεξικό, προκύπτει σφάλμα.

Αν θέλουμε, μπορούμε να ελέγξουμε προκαταβολικά την ύπαρξή του με τη χρήση της λέξης κλειδιού in, η

οποία επιστρέφει True εάν το λεξικό περιέχει την τιμή, ή False διαφορετικά. Η συνάρτηση get επιστρέφει την

τιμή που είναι συσχετισμένη με ένα κλειδί, εάν το λεξικό περιέχει το κλειδί. Για παράδειγμα:

Σε αρκετές περιπτώσεις χρειάζεται να δημιουργήσουμε ένα αντίγραφο του λεξικού. Αυτό μπορεί να παραχθεί

με τη μέθοδο copy.

7

Page 9: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Τέλος, αν θέλουμε να εκτελέσουμε ενημέρωση ενός λεξικού με βάση ένα άλλο λεξικό, χρησιμοποιούμε τη

μέθοδο update. Αυτή ενημερώνει ένα λεξικό με όλα τα ζεύγη κλειδί/ τιμή από το δεύτερο λεξικό. Για τα κλειδιά

τα οποία είναι κοινά και στα δύο λεξικά οι τιμές από το δεύτερο λεξικό προέχουν έναντι αυτών του πρώτου.

1.3 Κλειδιά

Στα προηγούμενα παραδείγματα χρησιμοποιήσαμε συμβολοσειρές και αριθμούς ως κλειδιά ενός λεξικού.

Όμως στην Python επιτρέπεται να χρησιμοποιήσουμε και διαφορετικά αντικείμενα. Υπάρχει όμως ο βασικός

περιορισμός ότι μπορούμε να χρησιμοποιήσουμε ως κλειδί μόνο αντικείμενα τα οποία είναι αμετάτρεπτα και

μπορούν να τμηματοποιηθούν. Αμετάτρεπτο καλείται ένα αντικείμενο το οποίο δεν μπορεί να μεταβληθεί. Η

λίστα και το λεξικό, για παράδειγμα, είναι μετατρεπτά αντικείμενα, καθώς τα στοιχεία τους μπορούν να

προστεθούν να μεταβληθούν ή να διαγραφούν.

Οι κυριολεκτικές σταθερές, αριθμοί, συμβολοσειρές είναι αμετάτρεπτοι. Μπορούμε, δηλαδή, να

μεταβάλλουμε την τιμή που έχει ανατεθεί σε μια μεταβλητή, αλλά δεν μεταβάλλουμε τον ίδιο τον αριθμό ή τη

συμβολοσειρά ως αντικείμενο.

Αυτό είναι δεσμευτικό, καθώς οι λίστες δεν μπορούν να χρησιμοποιηθούν ως κλειδιά λεξικών, αν και σε

πολλές περιπτώσεις είναι ανάγκη να έχουμε κλειδιά τύπου λίστας.

8

Page 10: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Ο περιορισμός αυτός επιλύεται με την χρήση ενός άλλου τύπου δεδομένων, που είναι αμετάτρεπτος και έχει

τα χαρακτηριστικά μιας λίστας. Αυτός ο τύπος είναι η πλειάδα και έχει το χαρακτηριστικό ότι δεν μπορεί

μεταβληθεί εφόσον δημιουργηθεί. Για παράδειγμα:

1.4 Εφαρμογές των λεξικών

Οι εφαρμογές των λεξικών είναι αρκετές και πολύ αποτελεσματικές, καθώς η υλοποίησή τους στην Python

είναι βελτιστοποιημένη για ταχύτητα και απόδοση. Η απόδοσή τους δεν συγκρίνεται με τους πίνακες και τις

λειτουργίες τους σε άλλες γλώσσες, καθώς πολλές από τις εσωτερικές λειτουργίες της γλώσσας είναι

βασισμένες στα λεξικά. Επίσης, τα λεξικά είναι γενικά προτιμότερο να χρησιμοποιούνται έναντι των λιστών

καθώς υπερέχουν σε μεγάλο βαθμό από αυτές.

Πολύ συνηθισμένες είναι οι εφαρμογές των λεξικών σε προγράμματα επεξεργασίας δεδομένων. Για

παράδειγμα, ας υποθέσουμε ότι θέλουμε να υπολογίσουμε πόσες φορές εμφανίζεται ένας αριθμός σε μια

λίστα αριθμών σε ένα αρχείο ή μια βάση δεδομένων ή αλλού. Αν χρησιμοποιήσουμε ένα λεξικό μπορούμε να

το υλοποιήσουμε με εύκολο τρόπο. Αρχικά δημιουργούμε μια συμβολοσειρά με τα δεδομένα, όπου οι

αριθμοί διαχωρίζονται με κάποιο χαρακτήρα. Στη συνέχεια δημιουργούμε μια λίστα διαχωρίζοντας τις τιμές

με τη μέθοδο split.

9

Page 11: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Η λίστα που παράγουμε αποτελείται από τις τιμές των αριθμών και επίσης παρατηρούμε ότι υπάρχουν και

ορισμένοι χαρακτήρες που οφείλονται στο γεγονός ότι έχουμε χαρακτήρες νέας γραμμής. Τα δεδομένα μας

γενικά ενδέχεται να έχουν διάφορα άχρηστα στοιχεία, τα οποία θα πρέπει να καθαρίσουμε με κατάλληλες

εργασίες. Στην περίπτωσή μας θα κάνουμε αντικατάσταση των χαρακτήρων \n με το κενό.

10

Page 12: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Τώρα η λίστα μας είναι καθαρή. Οι τιμές των αριθμών μπορούν να οριστούν ως κλειδιά σε ένα λεξικό και η

τιμή του κάθε κλειδιού θα καταγράφει την εμφάνιση κάθε αριθμού. Αυτό θα γίνει με ένα βρόχο επανάληψης

όπου σε κάθε επανάληψη θα αυξάνεται κατά 1 η τιμή για κάθε κλειδί που υπάρχει στο λεξικό, αν αυτό

υπάρχει στη λίστα.

Το αποτέλεσμα είναι αρκετά ικανοποιητικό, καθώς με πολύ σύντομη προσέγγιση μπορούμε να

αξιοποιήσουμε την ισχύ των λεξικών για ένα πρόβλημα ανάλυσης δεδομένων, το οποίο μπορεί να έχει

αρκετές χιλιάδες ή εκατομμύρια εγγραφές.

11

Page 13: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

2. ΕΛΕΓΧΟΣ ΡΟΗΣ

Στα πλαίσια της υποενότητας αυτής θα παρουσιαστούν οι βασικές δομές ελέγχου ροής στην Python.

Ειδικότερα θα παρουσιαστούν:

ο βρόχος while,

η δομή If-elif-else,

ο βρόχος for, και

βασικά παραδείγματα για εξοικείωση.

2.1 Ο βρόχος while

Ο βρόχος while γενικά αποτελείται από ένα σύνολο εντολών, οι οποίες εκτελούνται σε επανάληψη για όσο

διάστημα ικανοποιείται μια δεδομένη συνθήκη. Η συνθήκη υπολογίζεται κατά την εκκίνηση του βρόχου και σε

κάθε επανάληψη. Η συνθήκη υπολογίζεται σε μια τιμή που είναι είτε True ή False. Αν η τιμή είναι True,

εκτελείται το σώμα εντολών εντός του βρόχου. Αν η τιμή είναι False, ο βρόχος δεν επαναλαμβάνεται και το

πρόγραμμα συνεχίζει την εκτέλεσή του.

Στην Python ένας βρόχος while της Python έχει την παρακάτω γενική δομή. Όπως έχει αναφερθεί, δεν

απαιτούνται άλλου τύπου διαχωριστικά για τον καθορισμό του βρόχου, όπως άγκιστρα ή αγκύλες. Ο

διερμηνευτής της Python αναγνωρίζει το σώμα της while από το επίπεδο εσοχής. Αν υπάρχει κάποιο λάθος

στις εσοχές θα λάβουμε σφάλμα, ή λάθος κατά την εκτέλεση.

Για παράδειγμα, ο παρακάτω βρόχος while ανατρέχει το περιεχόμενο μιας λίστας μέχρι να συναντήσει την

τιμή 32. Η συνθήκη συνεπώς ορίζεται ως !=32 και είναι True μέχρι να συναντήσουμε την τιμή 32 οπότε

γίνεται False και η εκτέλεση του βρόχου διακόπτεται. Στο σημείο αυτό εκτελείται η επόμενη γραμμή του

προγράμματός μας εκτός του βρόχου.

Στην Python μπορεί να εκτελεστεί το τμήμα else προαιρετικά, αν και δεν χρησιμοποιείται συχνά.

12

Page 14: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Για παράδειγμα, μπορούμε να έχουμε το ίδιο αποτέλεσμα με προηγουμένως.

Αν για κάποιο λόγο θέλουμε να διακόψουμε την εκτέλεση του βρόχου σε κάποιο σημείο, μπορούμε να

χρησιμοποιήσουμε την εντολή Break. Σε αυτή την περίπτωση διακόπτεται άμεσα ο βρόχος while και δεν

εκτελείται ούτε το τμήμα post-code (αν υπάρχει). Για παράδειγμα:

Αν θέλουμε για κάποιο λόγο να παραλείψουμε την εκτέλεση του υπόλοιπου σώματος του βρόχου και να

ξεκινήσουμε την επανάληψη από την αρχή, χρησιμοποιούμε την εντολή continue. Αυτή επανεκκινά την

εκτέλεση του βρόχου υπολογίζοντας την condition πάλι, και εάν είναι True ο βρόχος, εκτελείται κανονικά. Για

παράδειγμα, αν δεν χρησιμοποιήσουμε την continue, το παρακάτω θα μας εκτυπώνει σε κάθε επανάληψη

ένα μήνυμα.

13

Page 15: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Αν όμως θέσουμε την continue, τότε το τμήμα της εσωτερικής εκτύπωσης θα παραλείπεται συνεχώς.

2.2 Η πρόταση if-elif-else

Όταν θέλουμε να ελέγξουμε την ροή εκτέλεσης ενός προγράμματος με βάση την τιμή μιας συνθήκης, τότε

γενικά χρησιμοποιούμε την δομή ελέγχου if-then-else. Στην Python η δομή αυτή έχει την εξής γενική μορφή

(if-elif-else).

14

Page 16: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Εάν η συνθήκη 1 (condition1) είναι True, τότε εκτελείται το τμήμα body1. Εάν η συνθήκη 2 (condition2) είναι

True, τότε εκτελείται το body2. Διαφορετικά συνεχίζει το ίδιο σενάριο ελέγχων έως ότου βρεθεί μια συνθήκη

που να είναι True. Αν δεν βρεθεί κάποια, τότε εκτελείται το τμήμα else και το τμήμα body(n).

Το body έπειτα από την εντολή if απαιτείται, ενώ τα τμήματα elif ή το else ή και τα δύο μπορεί να

παραληφθούν. Εάν μια συνθήκη δεν μπορεί να βρει το αντίστοιχο σώμα για να εκτελέσει, τότε δεν εκτελεί

τίποτα.

Για παράδειγμα, εμπλουτίσαμε τον προηγούμενο βρόχο με ορισμένες εντολές ελέγχου, οι οποίες είτε

διακόπτουν την εκτέλεση του βρόχου ή όχι.

15

Page 17: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Γενικότερα, όπως ο βρόχος while, έτσι και τα τμήματα body της δομής if-elif-else αποτελούν εντολές της

Python, οι οποίες είναι χωρισμένες με νέα γραμμή και βρίσκονται στο ίδιο επίπεδο εσοχής. Αν δεν

προσέξουμε την δομή, θα λάβουμε σφάλμα σύνταξης ή σφάλμα κατά την εκτέλεση.

2.3 Ο βρόχος for

Εκτός του βρόχου while, υπάρχει και ο βρόχος επανάληψης for. Ο βρόχος τύπου for γενικά βασίζεται στον

έλεγχο και αύξηση της τιμής μιας μεταβλητής σε κάθε επανάληψη του βρόχου. Αν η τιμή της μεταβλητής

λάβει την τιμή ελέγχου, ο βρόχος δεν επαναλαμβάνεται. Η γενική του μορφή στην Python είναι η εξής:

Εδώ παρατηρούμε ότι υπάρχει μια διαφορά της Python από άλλες γλώσσες. Η μεταβλητή ελέγχου είναι η

variable και ελέγχεται με βάση μια ακολουθία τιμών που είναι η values. Η αρχική τιμή της variable θα είναι η

αρχική τιμή της ακολουθίας και το σώμα (body) θα εκτελεστεί επαναλαμβανόμενα μια φορά για κάθε στοιχείο

της ακολουθίας.

Για παράδειγμα, αν στο προηγούμενο παράδειγμα ορίσουμε ένα βρόχο for με μεταβλητή ελέγχου που

ελέγχεται από την ακολουθία τιμών της λίστας list0, τότε ο βρόχος θα εκτελεστεί για 5 επαναλήψεις χωρίς να

εκτυπωθεί κάποιο αποτέλεσμα.

16

Page 18: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

Το τμήμα else είναι προαιρετικό. Όπως και με το βρόχο while, έτσι και στο βρόχο for το τμήμα else

χρησιμοποιείται σπάνια. Οι break και continue έχουν το ίδιο αποτέλεσμα εδώ όπως και στο βρόχο while.

Έτσι, αν εκτελεστεί η break, διακόπτεται η εκτέλεση του βρόχου και δεν εκτελείται το τμήμα post-code εάν

υπάρχει εντολή else. Εάν εκτελεστεί η continue, προκαλεί την διακοπή εκτέλεσης του υπόλοιπου της

επανάληψης του βρόχου και ο βρόχος ξεκινά από την αρχή με το επόμενο στοιχείο της ακολουθίας.

Πρέπει να σημειωθεί εδώ ότι ο βρόχος for είναι λίγο διαφορετικός στην Python από ό,τι σε άλλες γλώσσες,

καθώς στην Python ο βρόχος for επαναλαμβάνεται για τις τιμές που επιστρέφονται από ένα αντικείμενο που

είναι επαναλήψιμο, δηλαδή ένα αντικείμενο το οποίο μπορεί να έχει μια ακολουθία τιμών. Για παράδειγμα,

ένας βρόχος for μπορεί να επαναλαμβάνεται επάνω σε κάθε στοιχείο μιας λίστας, μιας πλειάδας ή μιας

συμβολοσειράς.

Μια ειδική συνάρτηση που είναι αρκετά χρήσιμη είναι η range. Η range δέχεται ως όρισμα έναν αριθμό n και

επιστρέφει μια ακολουθία 0,1,2,3,4,…,n-2,n-1. Οπότε, δίνοντάς της ως όρισμα σε ένα βρόχο for έχουμε το

ίδιο αποτέλεσμα με ένα κλασσικό βρόχο for. Αυτό είναι χρήσιμο όταν χρησιμοποιούνται βρόχοι σε πολύ

μεγάλες λίστες. Αντί για τη δημιουργία μιας λίστας με 1 εκατομμύριο στοιχεία, για παράδειγμα, κάτι που θα

απαιτεί αρκετή μνήμη, μπορεί να χρησιμοποιηθεί η range (1000000), η οποία απαιτεί σχετικά μικρή

ποσότητα μνήμης και δημιουργεί μια ακολουθία ακεραίων από το 0 ως το 1000000, όταν απαιτηθεί από το

βρόχο. Για παράδειγμα, στο προηγούμενο έχουμε:

17

Page 19: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

2.4 Ειδικά σημεία

Στους βρόχους και τις δομές if-elif-else χρησιμοποιούνται έλεγχοι σε τιμές που καθορίζουν την εκτέλεση ενός

βρόχου ή όχι. Οι έλεγχοι πραγματοποιούνται με τη χρήση τελεστών και λέξεων κλειδιών της Python.

Η σύγκριση αντικειμένων μπορεί να γίνει με τη βοήθεια τελεστών όπως οι <, > , =. Ο == είναι ο τελεστής

ελέγχου ισότητας και ή ο != ή ο <> μπορούν να χρησιμοποιηθούν ως τελεστές μη ισότητας. Υπάρχει επίσης

ο in και ο not in που ελέγχουν τη συμμετοχή σε ακολουθίες και οι is και is not για τον έλεγχο κατά πόσο δύο

αντικείμενα είναι ίδια. Εκφράσεις που επιστρέφουν μια δυαδική τιμή μπορούν να συνδυαστούν σε

πολύπλοκες εκφράσεις χρησιμοποιώντας τους τελεστές and, or και not. Σε πολύπλοκες εκφράσεις, καλό

είναι να χρησιμοποιούνται παρενθέσεις για την αποφυγή σφαλμάτων.

Οι βρόχοι χρησιμοποιούνται πολύ συχνά για την εκτέλεση εργασιών σε λίστες, λεξικά και πλειάδες

Σύνοψη

Με την ολοκλήρωση της ενότητας αυτής γνωρίζετε:

τα βασικά στοιχεία των λεξικών στην Python και είσαστε σε θέση να γράφετε απλά σενάρια και

προγράμματα,

τα βασικά στοιχεία του ελέγχου ροής στην Python, και

τα βασικά στοιχεία των δομών ελέγχου ροής στην Python και είσαστε σε θέση να γράφετε απλά σενάρια

και προγράμματα σε Python.

Βιβλιογραφία

Hetland, Μ., (2005), Beginning Python: From Novice to Professional, Apress, United States of America.

Lutz, Μ., (2013), Learning Python, Fifth Edition, O’Reilly Media, Inc., Sebastopol, United States of America.

Lutz, Μ., (2011), Programming Python, Fourth Edition, O’Reilly Media, Sebastopol, United States of

America.

Shaw, Z., (2014), Learn Python the hard way : a very simple introduction to the terrifyingly beautiful world

of computers and code, Third edition, .Addison Wesley, United States of America.

Αβούρης, Ν., Κουκιάς, Μ., Παλιούρας, Β., Σγάρμπας Κ., (2013), Εισαγωγή στους υπολογιστές με τη

γλώσσα Python, Εκδόσεις Πανεπιστημίου Πατρών.

Δικτυογραφία

https://www.python.org/ :

Η κεντρική σελίδα της Python.

https://www.python.org/community/ :

Η κοινότητα της Python.

http://docs.python.org/reference/ :

Το επίσημο σημείο αναφοράς της γλώσσας.

18

Page 20: #3 ΛΕΞΙΚΑ - ΕΛΕΓΧΟΣ ΡΟΗΣ

http://docs.python.org/tutorial/ :

Το επίσημο εγχειρίδιο.

http://python.org.gr/ :

Η ελληνική κοινότητα προγραμματιστών της Python.

http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/index.html :

Αρκετά κατατοπιστικός οδηγός για τη γλώσσα.

http://stackoverflow.com/questions/tagged/python?sort=newest :

Πολύ κατατοπιστικός ιστότοπος για προβλήματα προγραμματισμού.

https://www.linkedin.com/groups/Python-Community-25827/about :

Κοινότητα επαγγελματιών προγραμματιστών Python.

19