Python Programming. Αντωνία Τερηίδου ΑΕΜ 358 Επιβλζπων κακθγθτισ : Dr Μθνάσ Δαςυγζνθσ. Κοηάνθ, Ιοφνιοσ

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Python Programming. Αντωνία Τερηίδου ΑΕΜ 358 Επιβλζπων κακθγθτισ : Dr Μθνάσ Δαςυγζνθσ. Κοηάνθ, Ιοφνιοσ 2013. http://arch.icte.uowm.gr."

Transcript

1 Python Programming Αντωνία Τερηίδου ΑΕΜ 358 Επιβλζπων κακθγθτισ : Dr Μθνάσ Δαςυγζνθσ Κοηάνθ, Ιοφνιοσ 2013 Page 1 of 253

2 Περιεχόμενα 1. Δηζαγσγή.4 2. Ιζηνξηθά ζηνηρεία Υαξαθηεξηζηηθά ηεο Python Πσο εγθαζηζηώ ηελ Python ζηνλ ππνινγηζηή κνπ Σν πεξηβάιινλ ηεο Python Βαζηθέο εηζαγσγηθέο έλλνηεο ηεο Python Σειεζηέο θαη εθθξάζεηο Έιεγρνο ξνήο Υξήζε ιεμηθνύ πλαξηήζεηο Αξζξώκαηα Αιθαξηζκεηηθά Γνκέο δεδνκέλσλ Αληηθείκελα θαη θιάζεηο Αξρεία Δίζνδνο- έμνδνο Δγγξαθή αληηθεηκέλσλ ζε αξρεία-ζεηξηνπνίεζε Φάθεινη Δμαηξέζεηο Γελλήηνξεο Καλνληθέο εθθξάζεηο GUI κε tkinter Python Tkinter Relief Styles Python Tkinter Bitmaps Python Tkinter Cursors «Υηίζηκν» κηαο βαζηθήο GUI εθαξκνγήο (GUI application) Drawing in tkinter Multithreading Μέηξεζε ρξόλνπ εθηέιεζεο Profilers Απνζθαικάησζε GCI Programming Biopython Βηβιηνγξαθία.253 Page 2 of 253

3 Υπάρχουν δύο τρόποι για να καταςκευάςετε το ςχεδιαςμό ενόσ λογιςμικού: ο ένασ είναι να το κάνετε τόςο απλό ώςτε προφανώσ να μην υπάρχουν ελαττώματα, και ο άλλοσ είναι να το κάνετε τόςο πολύπλοκο ώςτε να μην είναι προφανή τα ελαττώματα. C. A. R. Hoare Η επιτυχία ςτη ζωή δεν είναι τόςο θέμα ταλέντου και ευκαιριών όςο ςυγκέντρωςησ και ςυνέπειασ. C. W. Wendte Μία από τισ αρχζσ κακοδιγθςθσ τθσ Python είναι ότι Οι ρητές εντολές είναι καλφτερες από αυτές που εξυπακοφονται (Explicit is better than Implicit). Page 3 of 253

4 Δηζαγσγή Η Python είλαη πηζαλφηαηα κηα απφ ηηο ειάρηζηεο γιψζζεο πξνγξακκαηηζκνχ πνπ είλαη ηφζν εχθνιεο θαη ηαπηφρξνλα ηφζν ηζρπξέο. Καηά ηελ δηάξθεηα ηεο ελαζρνιεζήο κνπ κε ην παξφλ project,δηαπίζησζα φηη είλαη δηαζθεδαζηηθό λα πξνγξακκαηίδεηο κε ηελ Python. Γιψζζεο πξνγξακκαηηζκνχ φπσο ε Java, ε VB, ε C++, θιπ. απνηεινχλ ην βαξχ ππξνβνιηθφ ζηνλ θφζκν ηνπ πξνγξακκαηηζκνχ. πρλά φκσο, νη πξνγξακκαηηζηέο ζέινπκε λα γξάςνπκε κηα κηθξή εθαξκνγή, πνπ λα καο θαιχπηεη θάπνηα ζπγθεθξηκέλε αλάγθε, ζηα γξήγνξα. Η Python είλαη κηα απιή αιιά παξάιιεια «δπλαηή» γιψζζα πξνγξακκαηηζκνχ, πνπ ζα καο επηηξέςεη λα αλαπηχζζνπκε ηηο κηθξνεθαξκνγέο καο εχθνια θαη γξήγνξα. Η Python είναι μια δςναμική γλώζζα ππογπαμμαηιζμού, πολύ ςτηλού επιπέδος. Κχξηνο ζηφρνο ηεο είλαη ε απμεκέλε παξαγσγηθφηεηα ηνπ πξνγξακκαηηζηή θαη ε αλαγλσζηκφηεηα ηνπ θψδηθα. Έρεη ελζσκαησκέλεο δνκέο δεδνκέλσλ φπσο ιίζηεο θαη πίλαθεο θαηαθεξκαηηζκνχ (πνπ απνθαιεί dictionaries) θαη κηα αξθεηά κεγάιε βηβιηνζήθε, αθνινπζψληαο ηε θηινζνθία batteries included. Γαλείδεηαη ζηνηρεία απφ ηνλ πξνζηαθηηθφ, αληηθεηκελνζηξεθή αιιά θαη ζπλαξηεζηαθφ πξνγξακκαηηζκφ, ρσξίο λα επηβάιιεη θάπνην ζπγθεθξηκέλν ηξφπν πξνγξακκαηηζκνχ (ζε αληίζεζε π.ρ. κε ηε Java). Σα ραξαθηεξηζηηθά ηεο ηελ θαζηζηνχλ θαιή επηινγή γηα prototyping, αιιά θαη γηα πιεζψξα εθαξκνγψλ ζηηο νπνίεο ε απφδνζε δελ είλαη ηφζν ζεκαληηθφο παξάγνληαο. Page 4 of 253

5 Η Python είλαη εχθνιε ζηελ εθκάζεζε θαη ηαπηφρξνλα ηζρπξή γιψζζα πξνγξακκαηηζκνχ. Έρεη απνδνηηθέο δνκέο δεδνκέλσλ πςεινχ επηπέδνπ θαη κηα απιή αιιά απνηειεζκαηηθή πξνζέγγηζε ζηνλ αληηθεηκελνζηξεθή πξνγξακκαηηζκφ. Η θνκςή ζχληαμε ηεο Python θαη νη δπλακηθνί ηχπνη ηεο, καδί κε ηε ιεηηνπξγία ηεο σο δηεξκελεπφκελεο (αληί κεηαγισηηηδφκελεο) γιψζζαο, ηελ θαζηζηνχλ ηελ ηδαληθή γιψζζα γηα δεκηνπξγία ζελαξίσλ εληνιψλ θαη γηα ηαρεία αλάπηπμε εθαξκνγψλ ζε πνιινχο ηνκείο θαη ζηηο πεξηζζφηεξεο πιαηθφξκεο. H Python είλαη κηα πνιχ φκνξθε, ηδηαίηεξα εθθξαζηηθή, αληηθεηκελνζηξαθήο, πςεινχ επηπέδνπ γιψζζα πξνγξακκαηηζκνχ. Σν ζχζηεκα ηχπσλ ηεο είλαη πιήξσο δπλακηθφ θαη ε δηαρείξηζε κλήκεο απηφκαηε, ε standard πινπνίεζή ηεο (CPython) είλαη έλαο bytecode compiler θαη interpreter θαη ε βηβιηνζήθε ηεο πνιχ πινχζηα. Βαζική απσή ηηρ Python είναι όηι ο σπόνορ ηος ππογπαμμαηιζηή είναι πολύ ζημανηικόηεπορ από ηοςρ κύκλοςρ μησανήρ και ηον απαλλάζζει από ηιρ σαμηλού επιπέδος λεπηομέπειερ πος ππέπει να θπονηίζει ζηη C/C++ ή, υρ ένα βαθμό, ζηη Java. Ιζηνξηθά ζηνηρεία Η Python είλαη κηα δηεξκελεπφκελε (interpreted), αιιειεπηδξαζηηθή (interactive) θαη πξνζαλαηνιηζκέλε ζε αληηθείκελα (object-oriented) γιψζζα πξνγξακκαηηζκνχ, πνπ αλαπηχρζεθε απφ ηνλ Οιιαλδφ Guido van Rossum, ην Σν φλνκά ηεο πξνέξρεηαη απφ έλα απφ ηα αγαπεκέλα ηειενπηηθά ζεάκαηα ηνπ van Rossum, ην ηπηάκελν ηζίξθν ησλ Monty Python's. Page 5 of 253

6 Η Python είλαη κηα γιψζζα πνπ ζπλδπάδεη ζεκαληηθή ηζρχ κε πνιχ ζαθή ζχληαμε. Υξεζηκνπνηεί ελφηεηεο (modules), ηάμεηο (classes), εμαηξέζεηο (exceptions) θαζψο θαη πνιχ πςεινχ επηπέδνπ δπλακηθνχο ηχπνπο δεδνκέλσλ. Οη δηεξκελεπηέο (interpreters) ηεο Python είλαη δηαζέζηκνη γηα ηα πεξηζζφηεξα ιεηηνπξγηθά ζπζηήκαηα θαη ν πεγαίνο θψδηθαο (source code) ηεο Python δηαηίζεηαη δσξεάλ. Η επίζεκε ηζηνζειίδα ηεο γιψζζαο είλαη ε Η αλάπηπμε ηεο Python μεθίλεζε ην 1990 ζην CWI ηνπ Άκζηεξληακ θαη ζπλερίδεηαη ζην CNRI ηνπ Reston. Η γιψζζα δηαζέηεη κηα θνκςή αλ θαη φρη πνιχ απινπνηεκέλε ζχληαμε θαη έλαλ κηθξφ αξηζκφ απφ ηζρπξνχο θαη πςεινχ επηπέδνπ ηχπνπο δεδνκέλσλ. Η Python κπνξεί λα επεθηαζεί πξνζζέηνληάο ηεο θαηλνχξγηα modules πνπ λα είλαη γξακκέλα ζε κηα γιψζζα πνπ κεηαγισηηίδεηαη, φπσο είλαη ε C ή ε C++. Απηά ηα modules επέθηαζεο κπνξνχλ λα νξίζνπλ λέεο ζπλαξηήζεηο (functions) θαη κεηαβιεηέο (variables) θαζψο επίζεο θαη θαηλνχξγηνπο ηχπνπο δεδνκέλσλ (object types). Η Python ζπγθξίλεηαη ζπρλά κ άιιεο δηεξκελεπφκελεο γιψζζεο πξνγξακκαηηζκνχ, φπσο είλαη νη Java, JavaScript, Perl, Tcl θαη ε Smalltalk, αιιά ζπγθξίζεηο κπνξνχλ λα γίλνπλ θαη κε ηηο C++, Common Lisp θαη Scheme. Ο θχξηνο ζηφρνο ηεο είλαη ε αλαγλσζηκφηεηα ηνπ θψδηθά ηεο θαη ε επθνιία ρξήζεο ηεο. Γηαθξίλεηαη ιφγσ ηνπ φηη έρεη πνιιέο βηβιηνζήθεο πνπ δηεπθνιχλνπλ ηδηαίηεξα αξθεηέο ζπλεζηζκέλεο εξγαζίεο θαη γηα ηελ ηαρχηεηα εθκάζεζεο ηεο. Η Python αλαπηχζζεηαη σο αλνηρηφ ινγηζκηθφ (open source) θαη ε δηαρείξηζή ηεο γίλεηαη απφ ηνλ κε θεξδνζθνπηθφ νξγαληζκφ Python Software Foundation. Ο θψδηθαο δηαλέκεηαη κε ηελ άδεηα Python Software Foundation License ε νπνία είλαη ζπκβαηή κε ηελ GPL. Σν φλνκα ηεο γιψζζαο πξνέξρεηαη απφ ηελ νκάδα άγγισλ θσκηθψλ Μφληπ Πάηζνλ. Αξρηθά, ε Python ήηαλ γιψζζα ζελαξίσλ πνπ ρξεζηκνπνηνχληαλ ζην ιεηηνπξγηθφ ζχζηεκα Amoeba, ηθαλή θαη γηα θιήζεηο ζπζηήκαηνο. Page 6 of 253

7 Η Python 2.0 θπθινθφξεζε ζηηο 16 Οθησβξίνπ ηνπ ηηο 3 Γεθεκβξίνπ 2008 θπθινθφξεζε ε έθδνζε 3.0 (γλσζηή θαη σο py3k ή python 3000). Πνιιά απφ ηα θαηλνχξγηα ραξαθηεξηζηηθά απηήο ηεο έθδνζεο έρνπλ κεηαθεξζεί ζηηο εθδφζεηο 2.6 θαη 2.7 πνπ είλαη πξνο ηα πίζσ ζπκβαηέο. Η python 3 είλαη ηζηνξηθά ε πξψηε γιψζζα πξνγξακκαηηζκνχ πνπ ζπάεη ηελ πξνο ηα πίζσ ζπκβαηφηεηα κε πξνεγνχκελεο εθδφζεηο ψζηε λα δηνξζσζνχλ θάπνηα ιάζε πνπ ππήξραλ ζε πξνγελέζηεξεο εθδφζεηο θαη λα θαηαζηεί αθφκα πην ζαθήο ν απιφο ηξφπνο κε ηνλ νπνίν κπνξνχλ λα γίλνπλ θάπνηα πξάγκαηα. Γηαηί Python; Γηφηη απνηειεί scripting γιψζζα θαη γιψζζα πξνγξακκαηηζκνχ. Απηφ ζεκαίλεη φηη αλ θαη είλαη κία δηεξκελεπφκελε γιψζζα (δελ ρξεηάδεηαη λα κεηαγισηηίζεηε ηνλ θψδηθά ζαο, απιά ζψδεηαη θαη «ηξέρεηε» ηελ εθαξκνγή ζαο), δηαηεξεί ηα πεξηζζφηεξα πιενλεθηήκαηα κηαο θιαζηθήο γιψζζαο πξνγξακκαηηζκνχ (π.ρ. Java, VB, θιπ.). Δίλαη κηα «απιή γιψζζα πξνγξακκαηηζκνχ» ελψ ζπρλά ηελ θαηεγνξηνπνηνχλ ζηηο very high level languages. Οη δχν απηνί ραξαθηεξηζκνί νθείινληαη θπξίσο ζηελ απιή ζχληαμε θαη ηνπο «γεληθνχο» ηχπνπο δεδνκέλσλ (πνπ ηεο επηηξέπνπλ κεγάιν πεδίν εθαξκνγήο). Δπηηξέπεη ηε δεκηνπξγία modules πνπ κπνξνχλ λα ρξεζηκνπνηεζνχλ εχθνια απφ άιιεο εθαξκνγέο γξακκέλεο ζε Python. Δίλαη πξνζαλαηνιηζκέλε ζηελ ζπγγξαθή κηθξφηεξσλ θαη ζπκππθλσκέλσλ εθαξκνγψλ. Έηζη ηα πξνγξάκκαηα ζε Python είλαη αηζζεηά κηθξφηεξα απφ ηα αληίζηνηρά ηνπο ζε γιψζζεο φπσο νη C/C++ ή Java. Σν φλνκά ηεο ζρεηίδεηαη κε ηελ show ηνπ BBC Monty Python s Flying Circus θαη φρη κε ην γλσζηφ εξπεηφ. Page 7 of 253

8 Ο θψδηθαο ζε γιψζζα πξνγξακκαηηζκνχ Python κπνξεί: Να ρξεζηκνπνηεζεί ζε δηάθνξα Λεηηνπξγηθά πζηήκαηα. Να δηαβαζηεί εχθνια θαη λα ηξνπνπνηεζεί/αλαπηπρζεί απφ άιια άηνκα, θάλνληαο ηελ νκαδηθή πξνζπάζεηα πνιχ πην δπλαηή θαη εθηθηή. Να αλαγλσξηζηνχλ εχθνια ηπρφλ ιάζε ζηνλ θψδηθα θαη λα δηνξζσζνχλ. Να δηεπξπλζνχλ εχθνια νη δπλαηφηεηεο ηνπ πξνγξάκκαηνο κε ηα ιεγφκελα modules (αξζξψκαηα) ζηελ Python. ην δηάγξακκα κε ηηο πην δεκνθηιείο γιώζζεο πξνγξακκαηηζκνύ ην 2013, πνπ αθνινπζεί ε Python βξίζθεηαη ζηελ πξώηε ζέζε. Υαξαθηεξηζηηθά ηεο Python Απιή Η Python είλαη κηα απιή θαη κηληκαιηζηηθή γιψζζα. Σν δηάβαζκα ελφο θαινχ πξνγξάκκαηνο ζε Python είλαη ζαλ ην δηάβαζκα ησλ Αγγιηθψλ, αιιά πνιχ απζηεξψλ Αγγιηθψλ! Απηή ε νκνηφηεηα ηεο Python κε ςεπδνθψδηθα είλαη έλα απφ ηα πην ηζρπξά ζεκεία ηεο. αο επηηξέπεη λα ζπγθεληξψλεζηε ζηε ιχζε ηνπ πξνβιήκαηνο αληί ζηελ ίδηα ηε γιψζζα. Δύθνιε ζηελ εθκάζεζε Δίλαη εμαηξεηηθά απιφ λα μεθηλήζεηε κε ηελ Python. Η Python έρεη κηα αζπλήζηζηα απιή ζχληαμε, φπσο έρεη ήδε αλαθεξζεί παξαπάλσ. Page 8 of 253

9 Διεύζεξε θαη Αλνηθηνύ Κώδηθα Η Python είλαη έλα παξάδεηγκα ΔΛΛΑΚ (Διεχζεξν Λνγηζκηθφ θαη Λνγηζκηθφ Αλνηθηνχ Κψδηθα). Με απιά ιφγηα, κπνξείηε λα δηαλείκεηε αληίγξαθα απηνχ ηνπ ινγηζκηθνχ, λα δηαβάζεηε ηνλ πεγαίν θψδηθά ηνπ, λα θάλεηε αιιαγέο ζ' απηφ θαη λα ρξεζηκνπνηήζεηε θνκκάηηα ηνπ ζε λέα ειεχζεξα πξνγξάκκαηα. Σν ΔΛΛΑΚ βαζίδεηαη ζηελ ηδέα κηαο θνηλφηεηαο πνπ κνηξάδεηαη ηε γλψζε. Απηφο είλαη έλαο απφ ηνπο ιφγνπο γηα ηνπο νπνίνπο ε Python είλαη ηφζν θαιή -δεκηνπξγήζεθε θαη βειηηψλεηαη ζπλερψο απφ κηα θνηλφηεηα πνπ ην κφλν πνπ ζέιεη είλαη κηα θαιχηεξε Python. Φνξεηή Λφγσ ηνπ αλνηθηνχ ηεο θψδηθα, ε Python έρεη πινπνηεζεί (δειαδή αιιάρζεθε γηα λα ιεηηνπξγεί) ζε πνιιέο πιαηθφξκεο. ια ηα Python πξνγξάκκαηά ζαο κπνξνχλ λα δνπιέςνπλ ζε νπνηαδήπνηε απφ απηέο ηηο πιαηθφξκεο ρσξίο λα ρξεηάδνληαη θαζφινπ αιιαγέο αλ είζηε αξθεηά πξνζεθηηθνί ψζηε λα απνθχγεηε λα ρξεζηκνπνηήζεηε ραξαθηεξηζηηθά πνπ εμαξηνχληαη απφ θάζε ζχζηεκα. Μπνξείηε λα ρξεζηκνπνηήζεηε ηελ Python ζην Linux, ζηα Windows, ζην FreeBSD, ζε Macintosh, ζην Solaris, ζην OS/2, ζηελ Amiga, ζην AROS, ζην AS/400, ζην BeOS, ζην OS/390, ζην z/os, ζην Palm OS, ζην QNX, ζην VMS, ζην Psion, ζην Acorn RISC OS, ζην VxWorks, ζε PlayStation, ζην Sharp Zaurus, ζηα Windows CE αθφκα θαη ζε PocketPC! Γιώζζα πςεινύ επηπέδνπ ηαλ γξάθεηε πξνγξάκκαηα ζηελ Python, δε ρξεηάδεηαη πνηέ λα λνηάδεζηε γηα ηηο ρακεινχ επηπέδνπ ιεπηνκέξεηεο φπσο ε δηαρείξηζε ηεο κλήκεο πνπ ρξεζηκνπνηείηαη απφ ηα πξνγξάκκαηά ζαο, θ.ιπ. Γηεξκελεπόκελε Δδψ ρξεηάδεηαη κηα δηεμνδηθή αλάιπζε. Έλα πξφγξακκα πνπ γξάθεηαη ζε κηα κεηαγισηηηδφκελε γιψζζα φπσο ε C ή ε C++ κεηαηξέπεηαη απφ ηελ πεγαία γιψζζα, γηα παξάδεηγκα ηε C ή ηε C++ ζε κηα γιψζζα πνπ κηιάεη ν ππνινγηζηήο ζαο (δπαδηθφο θψδηθαο δειαδή 0 θαη 1) ρξεζηκνπνηψληαο έλα κεηαγισηηηζηή κε δηάθνξεο ζεκαίεο θαη επηινγέο. ηαλ ηξέρεηε ην πξφγξακκα, ν ζπλδέηεο αληηγξάθεη ην πξφγξακκα ζηε κλήκε θαη αξρίδεη λα ην ηξέρεη. Η Python, απφ ηελ άιιε, δε ρξεηάδεηαη κεηαγιψηηηζε ζε δπαδηθφ αξρείν. Απιά ηξέρεηε ην πξφγξακκα απ' επζείαο απφ ηνλ πεγαίν θψδηθα. Δζσηεξηθά, ε Python Page 9 of 253

10 κεηαηξέπεη ηνλ πεγαίν θψδηθα ζε κηα ελδηάκεζε κνξθή πνπ νλνκάδεηαη bytecode θαη κεηά ην κεηαθξάδεη ζηε γιψζζα ηνπ ππνινγηζηή θαη κεηά ην ηξέρεη. ιν απηφ, ζηελ πξαγκαηηθφηεηα θάλεη ηε ρξήζε ηεο Python πνιχ πην εχθνιε αθνχ δε ρξεηάδεηαη λα αλεζπρείηε γηα ηε κεηαγιψηηηζε ηνπ πξνγξάκκαηνο, ηε ζχλδεζε κε ηηο θαηάιιειεο βηβιηνζήθεο, θ.ιπ, θ.ιπ. Απηφ επίζεο θάλεη ηα πξνγξάκκαηα ηεο Python εμαηξεηηθά θνξεηά, αθνχ κπνξείηε απιά λα αληηγξάςεηε ην πξφγξακκα Python πνπ θηηάμαηε ζε έλαλ άιιν ππνινγηζηή θαη λα δνπιέςεη έηζη απιά! Δπεθηάζηκε Αλ ρξεηάδεζηε έλα θξίζηκν θνκκάηη θψδηθα λα ηξέρεη πνιχ γξήγνξα ή αλ πξέπεη λα έρεηε έλα θνκκάηη ελφο αιγφξηζκνπ πνπ λα κελ είλαη αλνηθηφ, ηφηε κπνξείηε λα πξνγξακκαηίζεηε εθείλν ην θνκκάηη ζε C ή C++ θαη κεηά λα ην ρξεζηκνπνηείηε απφ ην Python πξφγξακκά ζαο. Αληηθεηκελνζηξεθήο Η Python ππνζηεξίδεη ηφζν ην δηαδηθαζηνζηξεθή πξνγξακκαηηζκφ (procedureoriented) φζν θαη ηνλ αληηθεηκελνζηξεθή πξνγξακκαηηζκφ (object-oriented). ην δηαδηθαζηνζηξεθή πξνγξακκαηηζκφ, ην πξφγξακκα δνκείηαη πάλσ ζε δηαδηθαζίεο ή ζπλαξηήζεηο νη νπνίεο δελ είλαη ηίπνηε άιιν απφ επαλαρξεζηκνπνηήζηκα θνκκάηηα απφ πξνγξάκκαηα. ηηο αληηθεηκελνζηξεθείο γιψζζεο, ην πξνγξάκκαηα δνκνχληαη πάλσ ζε αληηθείκελα ηα νπνία ζπλδπάδνπλ δεδνκέλα θαη ιεηηνπξγηθφηεηα. Η Python έρεη έλαλ πνιχ ηζρπξφ αιιά πνιχ απιφ ηξφπν γηα αληηθεηκελνζηξεθή πξνγξακκαηηζκφ, εηδηθά φηαλ ζπγθξίλεηαη κε κεγάιεο γιψζζεο φπσο ε C++ ή ε Java. Δλζσκαηώζηκε Μπνξείηε λα ελζσκαηψζεηε ηελ Python κέζα ζηα πξνγξάκκαηα ζε C/C++ γηα λα ηνπο δψζεηε δπλαηφηεηεο 'scripting' γηα ηνπο ρξήζηεο ζαο. Δθηεηακέλεο βηβιηνζήθεο Η Πξφηππε βηβιηνζήθε ηεο Python είλαη πξαγκαηηθά ηεξάζηηα. Μπνξεί λα ζαο βνεζήζεη λα θάλεηε δηάθνξα πξάγκαηα ζρεηηθά κε θαλνληθέο εθθξάζεηο, δεκηνπξγία ηεθκεξίσζεο, δνθηκέο κνλάδσλ, λεκάησζε, βάζεηο δεδνκέλσλ, πεξηεγεηέο ηζηνχ, CGI, FTP, , XML, XML-RPC, HTML, αξρεία WAV, θξππηνγξάθεζε, γξαθηθέο δηεπαθέο ρξήζηε (GUI -graphical user interfaces), Tk, θαη άιια πξάγκαηα πνπ εμαξηνχληαη απφ ην ζχζηεκα. Θπκεζείηε φηη φια απηά είλαη δηαζέζηκα φπνηε είλαη εγθαηεζηεκέλε ε Python. Απηφ νλνκάδεηαη θηινζνθία 'Batteries Included' ηεο Python. Page 10 of 253

11 Δπηπιεφλ απφ ηελ πξφηππε βηβιηνζήθε, ππάξρνπλ δηάθνξεο άιιεο βηβιηνζήθεο πςειήο πνηφηεηαο φπσο ε wxpython, ε Twisted, ε Python Imaging Library θαη πνιιέο άιιεο. Η Python είλαη πξαγκαηηθά κηα ζπλαξπαζηηθή θαη ηζρπξφηαηε γιψζζα. Έρεη ην ζσζηφ ζπλδπαζκφ απφδνζεο θαη ραξαθηεξηζηηθψλ πνπ θάλνπλ ηε δεκηνπξγία πξνγξακκάησλ ζε Python δηαζθεδαζηηθή θαη εχθνιε. Γηαηί Pyhton θαη όρη Perl; Η Perl είλαη κηα αθφκα εμαηξεηηθά ηζρπξή, δεκνθηιήο, αλνηθηνχ θψδηθα, δηεξκελεχζηκε γιψζζα πξνγξακκαηηζκνχ. Σα πξνγξάκκαηα ζε Perl είλαη πνιχ εχθνια φηαλ είλαη κηθξά, θαη ε γιψζζα δηαπξέπεη ζε κηθξά hacks θαη ζελάξηα εληνιψλ πνπ "θάλνπλ ηε δνπιεηά ηνπο". Χζηφζν, γξήγνξα γίλεηαη αλππφθνξε φηαλ αξρίζεηε λα γξάθεηε κεγαιχηεξα πξνγξάκκαηα. πγθξηλφκελα κε ηελ Perl, ηα πξνγξάκκαηα ζε Python είλαη ζίγνπξα πην απιά, πην θαζαξά, πην εχθνια ζηε ζπγγξαθή θαη άξα πην θαηαλνεηά θαη εχθνια ζηε ζπληήξεζε. Πξαγκαηηθά ζαπκάδσ ηελ Perl θαη ηε ρξεζηκνπνηψ θαζεκεξηλά γηα δηάθνξα πξάγκαηα αιιά φηαλ γξάθσ έλα πξφγξακκα πάληα αξρίδσ λα ην ζθέθηνκαη κε ηνπο φξνπο ηεο Python επεηδή έρεη γίλεη ηφζν θπζηθή γηα κέλα. Η Perl έρεη ππνζηεί ηφζα πνιιά hacks θαη αιιαγέο, πνπ κνηάδεη ζαλ λα είλαη ε ίδηα έλα ηεξάζηην (αιιά πνιχ ηεξάζηην) hack. Γπζηπρψο, ε επεξρφκελε Perl 6 δε θαίλεηαη λα θέξλεη θαζφινπ βειηηψζεηο ζ' απηφ ηνλ ηνκέα. Σν κνλαδηθφ θαη πνιχ ζεκαληηθφ πιενλέθηεκα πνπ λνκίδσ φηη έρεη ε Perl, είλαη ε ηεξάζηηα βηβιηνζήθε CPAN -ε Comprehensive Perl Archive Network. πσο ππαηλίζζεηαη θαη ην φλνκα, απηή είλαη κηα γηγαληηαία ζπιινγή απφ αξζξψκαηα ηεο Page 11 of 253

12 Perl θαη είλαη πξαγκαηηθά δχζθνιν λα θαηαλνήζεη θαλείο ην κέγεζνο θαη ην βάζνο ηεο -κπνξείηε λα θάλεηε νηηδήπνηε ζ' έλαλ ππνινγηζηή ρξεζηκνπνηψληαο απηά ηα αξζξψκαηα. Έλαο απφ ηνπο ιφγνπο γηα ηνπο νπνίνπο ε Perl έρεη πεξηζζφηεξεο βηβιηνζήθεο απφ ηελ Python είλαη γηαηί ππάξρεη εδψ θαη πνιχ πεξηζζφηεξν θαηξφ απφ φηη ε Python. Δληνχηνηο απηφ θαίλεηαη λα αιιάδεη κε ην νινέλα απμαλφκελν Δπξεηήξην παθέησλ ηεο Python. Γηαηί Python θαη όρη Ruby; Η Ruby είλαη κηα αθφκα δεκνθηιήο, αλνηθηνχ θψδηθα, δηεξκελεχζηκε γιψζζα πξνγξακκαηηζκνχ. Python ή Ruby?? Πξνηείλεηαη ε Python, θαζαξά απφ ηελ άπνςε ηεο επθνιίαο εθκάζεζεο. Αξθεηνί πξνγξακκαηηζηέο ζεσξνχλ δχζθνιε ζηελ θαηαλφεζε ηε γιψζζα Ruby, αιιά φζνη ηελ θαηαιαβαίλνπλ εμπκλνχλ ηελ νκνξθηά ηεο γιψζζαο. Page 12 of 253

13 Απόςεηο ζπνπδαίσλ πξνγξακκαξηζηώλ γηα ηελ Python Ο Eric S. Raymond είλαη ν ζπγγξαθέαο ηνπ "Ο θαζεδξηθφο θαη ην παδάξη" θαη είλαη επίζεο εθείλνο πνπ πξφηεηλε ηνλ φξν Αλνηθηφο θψδηθαο. Λέεη φηη ε Python έγηλε ε αγαπεκέλε ηνπ γιψζζα πξνγξακκαηηζκνχ. Ο Bruce Eckel είλαη ν ζπγγξαθέαο ησλ δηάζεκσλ βηβιίσλ Thinking in Java θαη Thinking in C++. Λέεη φηη θακηά γιψζζα δελ ηνλ έθαλε λα ληψζεη πην παξαγσγηθφο απφ ηελ Python. Λέεη φηη ε Python είλαη ίζσο ε κφλε γιψζζα ε νπνία εζηηάδεη ζην λα θάλεη ηα πξάγκαηα πην εχθνια γηα ηνλ πξνγξακκαηηζηή. Ο Peter Norvig είλαη έλαο γλσζηφο ζπγγξαθέαο ηεο Lisp θαη Γηεπζπληήο πνηφηεηαο αλαδεηήζεσλ ζην Google.Λέεη φηη ε Python πάληα ήηαλ έλα εζσηεξηθφ θνκκάηη ηνπ Google. Μπνξείηε λα ην επηβεβαηψζεηε απηφ θνηηψληαο ηηο αγγειίεο Google Jobs ζηηο νπνίεο αλαγξάθεηαη ε γλψζε ηεο Python σο απαηηνχκελε γηα κεραληθνχο ινγηζκηθνχ. Python θαη ηαρχηαηε αλάπηπμε εθαξκνγψλ Απφ ηελ αξρή ηεο αλάπηπμεο ηεο γιψζζαο απηήο ελζαξξχλεηαη ε αλάπηπμε ησλ εθαξκνγψλ κέζσ ηεο Python λα είλαη φζν πην απιή γίλεηαη. Απηφ γίλεηαη θαη φζνλ αθνξά ηελ εθκάζεζε ηεο ίδηαο ηεο γιψζζαο, φπνπ πξνζπαζείηαη λα ππάξρεη κηα νκαιή θακπχιε εθκάζεζεο θαη φζνλ αθνξά ηελ αλαγλσζηκφηεηα ηνπ παξαγφκελνπ θψδηθα. πσο ραξαθηεξηζηηθά έρεη γξαθηεί, γηα λα θάλνπκε απνζθαικάησζε ζε έλα θνκκάηη θψδηθα ρξεηαδφκαζηε δηπιάζηα εθπΐα απφ φηαλ ηνλ γξάςακε. πλεπψο, αλ γξάθεηο φζν πην έμππλν -δχζθνιν θψδηθα κπνξείο, εθ ησλ πξαγκάησλ δελ κπνξείο λα ηνλ απνζθαικαηψζεηο. ια ηα παξαπάλσ ζπλεγνξνχλ ζηελ δπλαηφηεηα ηεο Python λα επηηξέπεη ηελ ηαρχηαηε αλάπηπμε εθαξκνγψλ εηδηθά ζε ζρέζε κε άιιεο γψζζεο ρακειφηεξνπ επηπέδνπ (πρ C, C++),ελψ ιέγεηαη φηη ζπλήζσο ηα πξνγξάκκαηα ζε Python είλαη 3-5 θνξέο κηθξφηεξα ζε ζρέζε κε ηα αληίζηνηρα ζε Java. ζν πην πςεινχ επηπέδνπ είλαη κηα γιψζζα πξνγξακκαηηζκνχ, ηφζν πην θνληά ζηελ ζθέςε ηνπ αλζξψπνπ Page 13 of 253

14 βξίζθεηαη. Απηφ ζεκαίλεη φηη είλαη πην εχθνιν λα γξαθηνχλ πξνγξάκκαηα ζε πςεινχ επηπέδνπ γιψζζεο (πςειφ επίπεδν αθαίξεζεο) θαη ζπλήζσο ιεηηνπξγνχλ ζε πεξηζζφηεξεο πιαηθφξκεο. Απηφ φκσο γίλεηαη ζπζηάδνληαο κέξνο ηεο ηαρχηεηαο ησλ πξνο εθηέιεζε πξνγξακκάησλ. ηηο κέξεο καο παξαηεξείηαη κηα ζηαδηαθή ζηξνθή απφ γιψζζεο πνπ επηθεληξσλφληνπζαλ ζηελ απφδνζε ησλ πξνγξακκάησλ (efficiency), λα επηθεληξψλνπλ ζηελ απφδνζε ηνπ πξνγξακκαηηζηή (productivity). Python θαη segmentation faults ηελ Python μεράζηε ηα segmentation faults. ε αληίζηνηρεο πεξηπηψζεηο, ν δηεξεκελεπηήο ηεο Python καο ελεκεξψλεη κε κηα εμαίξεζε πνπ πεηάεη (γίλεηαη throw) θαη πιεφλ γλσξίδνπκε ζε πνηα γξακκή ππάξρεη ην πξφβιεκα ψζηε λα ην αληηκεησπίζνπκε. Η απηφκαηε δηαρείξηζε κλήκεο ζεκαίλεη πσο δελ ρξεηάδεηαη λα αλεζπρνχκε πιένλ γηα ην πφηε ζα ειεπζεξψζνπκε ηελ κλήκε πνπ δεζκεχνπκε φηαλ θηηάρλνπκε αληηθείκελα. Δπίζεο, ε Python αληηιακβάλεηαη πφηε ην ίδην αληηθείκελν αλαθέξεηαη πάλσ απφ κηα θνξέο θη έηζη δελ ην απνζεθεχεη ζηε κλήκε αλ δελ ρξεηάδεηαη. Η ηερληθή απηή νλνκάδεηαη κέηξεζε αλαθνξψλ ( reference counting). Python θαη αληηθείκελα ηελ Python, ηα πάληα είλαη αληηθείκελα. Αθφκα θαη νη ζπλαξηήζεηο,νη γελλήηνξε (generators), νη εμαηξέζεηο θαη φ,ηη άιιν κπνξείηε λα ζθεθηείηε. Έηζη, πξνζθέξεηαη έλαο δηαηζζεηηθφο ηξφπνο ζπγγξαθήο ησλ πξνγξακκάησλ καο κε ζπλέπεηα ζηελ αληηθεηκελνζηξάθεηα, παξφιν πνπ ππνζηεξίδνληαη θαη άιινη ηξφπνη πξνγξακκαηηζκνχ (φπσο ζπλαξηεζηαθφο, δηαδηθαζηηθφο θ.α). ηα βαζηθά ραξαθηεξηζηηθά ηεο γιψζζαο ζα ζπλαληήζνπκε ηνλ ρεηξηζκφ εμαηξέζεσλ, παθέηα, θιάζεηο,ζπλαξηήζεηο, γελλήηνξεο (εηδηθή πεξίπησζε ζπλαξηήζεσλ) κε έλα ηξφπν φπνπ θάπε έλα ζα ζπκπιεξψλεη αξκνληθά ην άιιν γηα ηελ δηεπθφιπλζε ηνπ πξνγξακκαηηζηή. Απηφ ην δέζηκν θαζνδεγείηαη πάληα απφ ηελ ζπλέπεηα ζηελ αξρή ηεο Python φηη ζα έπξεπε λα ππάξρεη έλαο θαη κφλν έλαο πξνθαλήο ηξφπνο λα γίλεη θάηη, νδεγψληαο έηζη ζηελ απινπνίεζε ησλ πξνβιεκάησλ πνπ κπνξεί λα αληηκεησπίζεη ελαο πξνγξακκαηηζηήο. Δπηπξνζζέησο, έλα βαζηθφ ραξαθηεξηζηηθφ ηεο γιψζζαο, πνπ ίζσο μελίζεη θάπνηνπο, αιιά αλαβαζκίδεη ηελ αλαγλσξηζηκφηεηα ηνπ θψδηθα, είλαη φηη θάζε κπινθ θψδηθα θαζνξίδεηαη απφ ηελ ζηνίρηζή ηνπ. Καηά απηφ ηνλ ηξφπν, θάπνηνο είλαη ππνρξεσκέλνο λα ηεξήζεη ηνπο θαλφλεο «θαιήο ζπκπεξηθνξάο» φπσο απηνί επηβάιινληαη απφ ηηο ππφινηπεο γιψζζεο πξνγξακκαηηζκνχ θαζψο ζα πξέπεη λα Page 14 of 253

15 ελζσκαηψζεη ζηνλ ηξφπν πνπ γξάθεη ηνλ θψδηθά ηνπ κηα ζπλέπεηα ζηνλ θαζνξηζκφ ηεο ζηνίρηζήο ηνπ. Γηα θφκα θαιχηεξα απνηειέζκαηα έρνπλ γξαθηεί εηδηθέο πξνηάζεηο ( Python Enhancement Proposal (PEP)) ηα νπνία δηεπθξηλίδνπλ ηα ζπγθεθξηκέλα ζέκαηα θαη θαζνξίδνπλ έλαλ επίζεκν ηξφπν ζπγγξαθήο ηνπ θψδηθα (παξαπνκπή ζηα PEP 8 (http://www.python.org/dev/peps/pep-0008/ ) θαη PEP 257 (http://www.python.org/dev/peps/pep-0257/) ). Python 3 H Python φπσο αλαθέξζεθε θαη παξαπάλσ αλαπηχρζεθε ην Απηφ ζεκαίλεη πσο εθηφο απφ ηελ εκπεηξία θαη ηελ σξίκαλζε ζην θψδηθα πνπ είραλ απνθέξεη φια απηά ηα ρξφληα, ππήξραλ θαη βάξε απφ ην παξειζφλ πνπ ηελ εκπφδηδαλ λα πξνρσξήζεη κπξνζηά φπσο επηηάζζνπλ νη αξρέο πάλσ ζηηο νπνίεο είλαη δεκηνπξγεκέλε θαη ηαπηφρξνλα λα θαιχπηεη ηηο ζχγρξνλεο αλάγθεο.ηε ζπλέρεηα παξαζέησ θάπνηα παξαδείγκαηα πεξίεξγσλ ζπκπεξηθνξψλ: 7/4 = 1 επεξεαζκέλε απφ ηελ αξηζκεηηθή αθεξαίσλ ζηε C Range θαη γελλήηνξεο (άζθνπε ρξήζε κλήκεο) Δθηχπσζε print statement φπνπ αλ ρξεηαδφηαλ θάηη παξαπάλσ απφ ηελ ηππηθή ζπκπεξνθνξά γηλφηαλ ζρεηηθά πεξίπινθν. Οξγάλσζε θχξηαο βηβιηνζήθεο ε νπνία πιένλ μέθεπγε απφ ηνλ θχξην ηξφπν νλνκαηνινγίαο θαη πεξηείρε ζπλαξηήζεηο πνπ πξνηείλνληαη λα κελ ρξεζηκνπνηνχληαη πηα. Η ππνζηήξημε Unicode ήζειε θάπνηα (κηθξή έζησ) πξνζπάζεηα. Γηα λα μεπεξαζηνχλ ηα πξνβιήκαηα πνπ αλαθέξνληαη παξαπάλσ, έπξεπε λα παξζεί κηα ηνικεξή απφθαζε. Σν κεγάιν βήκα ινηπφλ γηα ηελ Python έγηλε κε ηελ έθδνζε 3 ( ή αιιηψο py3k ή 3000). Σν κεγαιχηεξ κέξνο ηεο γιψζζαο είλαη ζρεδφλ ην ίδην, αιιά πιένλ έκεηλαλ κηα θαη θαιή ζην παξειζφλ ηδηάδνπζεο ζπκπεξηθνξέο ελψ εηζήρζεθαλ θαιχηεξνη ηξφπνη επίιπζεο νξηζκέλσλ πξνβιεκάησλ.πην ζπγθεθξηκέλα νη αιιαγέο πνπ έγηλαλ πεξηιακβάλνπλ : 7/4=1,75 (θαη εηδηθφο ηειεζηήο // πιένλ αθνξά αξηζκεηηθή αθεξαίσλ) Δθηεηακέλε ρξήζε γελλεηφξσλ. Πξνηηκήζεθε ε επξεία ρξήζε γελλεηφξσλ ζηελ βαζηθή βηβιηνζήθε ψζηε γηα παξάδεηγκα ε range λα παξάγεη ηνπο αξηζκνχο πνπ ρξεηάδνληαη κφλν φηαλ ρξεηάδνληαη θαη λα κελ γεκίδεη άζθνπα ε κλήκε. Η print έγηλε ζπλάξηεζε Οη βηβιηνζήθεο αλαδηνξγαλψζεθαλ Δχθνιε ππνζηήξημε Unicode, ρσξίο λα απαηηείηαη ζρεδφλ θαζφινπ πξνζπάζεηα Page 15 of 253

16 Αρ ξεκινήζοςμε λοιπόν ένα ενδιαθέπον ηαξίδι Πσο εγθαζηζηώ ηελ Python ζηνλ ππνινγηζηή κνπ; Γηα ρξήζηεο Windows Δπηζθεπηφκαζηε ην επίζεκν site ηεο Python θαη θαηεβάδνπκε ην αξρείν εγθαηάζηαζεο πνπ ηαηξηάδεη ζην ιεηηνπξγηθφ καο ζχζηεκα θαη ηα ραξαθηεξηζηηθά ηνπ πξνζσπηθνχ καο ππνινγηζηή. (Θα εγθαηαζηήζνπκε ηελ Python ζε ζχζηεκα 64bit πνπ θηινμελεί Windows ιεηηνπξγηθφ ζχζηεκα, επνκέλσο θαηεβάδνπκε ην αξρείν εγθαηάζηαζεο python amd64.msi) Αθνινπζνχκε ηηο νδεγίεο ηνπ νδεγνχ εγθαηάζηαζεο ρσξίο λα αιιάμνπκε θακία απνιχησο ξχζκηζε. ε ιίγα ιεπηά ε εγθαηάζηαζε έρεη νινθιεξσζεί θαη είκαζηε έηνηκνη λα γξάςνπκε ην πξψην καο πξφγξακκα. Page 16 of 253

17 Σν πεξηβάιινλ ηεο Python ηνλ θάθειν Έλαξμε ια ηα πξνγξάκκαηα Python (πνπ απνηειεί ην βαζηθφ κελνχ εηθνληδίσλ ηεο Python) ζα βξνχκε ηηο εμήο επηινγέο: IDLE (Python GUI) Module Docs Python (command line) IDLE (Python GUI) Απνηειεί κηα δηεπαθή ρξήζηε πνπ, εθηφο απφ ην γεγνλφο φηη αλνίγεη ηνλ δηεξκελεπηή ηεο Python, πξνζθέξεη θάπνηεο επθνιίεο ζηνλ πξνγξακκαηηζηή φπσο λα αλνίγεη θαη λα επεμεξγάδεηαη εθαξκνγέο python, λα θάλεη debugging θαη πνιιέο απφ ηηο επθνιίεο πνπ παξέρεη έλαο κέζνο επεμεξγαζηήο θεηκέλνπ (εχξεζε / αληηθαηάζηαζε, ιεηηνπξγίεο αληηγξαθήο / απνθνπήο / επηθφιιεζεο, θιπ.). Απνηειεί ην εξγαιείν πνπ ζα ρξεζηκνπνηήζνπκε γηα λα δεκηνπξγνχκε, λα ηξέρνπκε, λα δνθηκάδνπκε θαη λα εθηεινχκε ιεηηνπξγίεο debugging ζηελ ηξέρνπζα ζεηξά ζεκηλαξίσλ. Φπζηθά, γηα ηελ ζπγγξαθή ησλ Python εθαξκνγψλ καο κπνξνχκε λα ρξεζηκνπνηήζνπκε ελαιιαθηηθά νπνηνλδήπνηε άιιν επεμεξγαζηή θεηκέλνπ καο βνιεχεη. Module Docs Πξφθεηηαη γηα έλα εξγαιείν πνπ επηηξέπεη ζηνλ πξνγξακκαηηζηή λα πεξηεγεζεί ζηα modules πνπ πεξηέρνληαη εγγελψο ζηελ Python θαζψο θαη λα εκθαλίζεη πιεξνθνξίεο γηα ηηο ιεηηνπξγίεο ηνπο. Σέινο δίλεη ηε δπλαηφηεηα ζηνλ ρξήζηε λα δεη ηα πάληα ζπγθεληξσκέλα κέζσ ηνπ αγαπεκέλνπ ηνπ web browser. Python (command line) Οπζηαζηηθά αλνίγεη ηνλ δηεξκελεπηεί ηεο Python ζε έλα πεξηβάιινλ DOS ψζηε λα κπνξνχκε λα «ηξέμνπκε» ηηο εθαξκνγέο καο. Χζηφζν δελ πξνζθέξεη θακία επηπιένλ δπλαηφηεηα. Υξεζηκνπνηείηε ζπλήζσο γηα λα ηξέρνπκε πξνγξάκκαηα ηα νπνία έρνπλ ήδε δνθηκαζηεί γηα ζθάικαηα. Page 17 of 253

18 DOS Prompt Αλ ζέιεηε λα κπνξείηε λα ρξεζηκνπνηήζεηε ηελ Python απφ ηε γξακκή εληνιψλ ησλ Windows π.ρ. ην DOS prompt, ηφηε ζα πξέπεη λα νξίζεηε ηε κεηαβιεηή ζπζηήκαηνο PATH θαηάιιεια.γηα ηα Windows 2000, XP, 2003, παηήζηε ζην Control Panel -> System -> Advanced ->Environment Variables. Δπηιέμηε ηε κεηαβιεηή πνπ νλνκάδεηαη PATH ζηελ ελφηεηα 'System Variables', κεηά επηιέμηε Edit θαη πξνζζέζηε ην ;C:\Python30 κεηά απφ φ,ηη είλαη ήδε γξακκέλν εθεί. Φπζηθά, ρξεζηκνπνηήζηε ην θαηάιιειν φλνκα θαθέινπ, εθεί φπνπ εγθαηαζηήζαηε ηελ Python. Γηα παιαηφηεξεο εθδφζεηο ησλ Windows, πξνζζέζηε ηελ αθφινπζε γξακκή ζην αξρείν C:\AUTOEXEC.BAT :'PATH=%PATH%;C:\Python30' (ρσξίο ηα εηζαγσγηθά) θαη επαλεθθηλήζηε ην ζχζηεκα. Γηα ηα Windows NT, ρξεζηκνπνηήζηε ην αξρείν AUTOEXEC.NT. Γηα ρξήζηεο Linux θαη BSD Αλ ρξεζηκνπνηείηε κηα δηαλνκή Linux φπσο ην Ubuntu, ην Fedora, ην OpenSUSE ή έλα ζχζηεκα BSD φπσο ην FreeBSD, ηφηε πηζαλφηαηα ζα έρεηε ήδε εγθαηεζηεκελε ηελ Python ζην ζχζηεκά ζαο. Γηα λα ειέγμεηε αλ έρεηε ήδε εγθαηεζηεκέλε ηελ Python ζην Linux ζαο, αλνίμηε έλα πξφγξακκα θειχθνπο (φπσο ην konsole ή ην gnome-terminal) θαη πιεθηξνινγήζηε ηελ εληνιή python -V φπσο θαίλεηαη παξαθάησ. $ python -V Python 3.0b1 εκαληηθή παξαηήξεζε! Σν $ είλαη ην prompt ηνπ θειχθνπο, δειαδή εθεί πνπ πιεθηξνινγείηε ηηο εληνιέο. Θα είλαη δηαθνξεηηθφ αλάινγα κε ηηο ξπζκίζεηο ηνπ ιεηηνπξγηθνχ ζαο ζπζηήκαηνο, νπφηε ζα ππνδεηθλχσ πάληα ην prompt απιά κε ην ζχκβνιν $. Αλ δείηε κεξηθέο πιεξνθνξίεο έθδνζεο φπσο απηέο πνπ θαίλνληαη πην πάλσ, ηφηε έρεηε ήδε ηελ Python εγθαηεζηεκέλε. Page 18 of 253

19 Χζηφζν, αλ πάξεηε έλα κήλπκα ζαλ θη αχην: $ python -V bash: Python: command not found Σόηε δελ έρεηε εγθαηεζηεκέλε ηελ Python. Απηφ είλαη εμαηξεηηθά απίζαλν αιιά φρη αδχλαην. εκείσζε : Αλ έρεηε ήδε εγθαηεζηεκέλε ηελ Python 2.x, ηφηε δνθηκάζηε python3 -V. ' απηή ηελ πεξίπησζε, ππάξρνπλ δχν ηξφπνη γηα λα εγθαηαζηήζεηε ηελ Python 3.x ζηνλ ππνινγηζηή ζαο. 1) Μπνξείηε λα κεηαγισηηίζεηε ηελ Python απφ ηνλ πεγαίν θψδηθα [1] θαη λα ηελ εγθαηαζηήζεηε. Οη νδεγίεο κεηαγιψηηηζεο παξέρνληαη ζηνλ ηζηφηνπν. 2) Μπνξείηε λα εγθαηαζηήζεηε ηα δπαδηθά παθέηα ρξεζηκνπνηψληαο ην δηαρεηξηζηή παθέησλ ινγηζκηθνχ πνπ ζπλνδεχεη ην ιεηηνπξγηθφ ζαο ζχζηεκα, φπσο ην apt-get ζην Ubuntu/Debian θαη ζηηο άιιεο δηαλνκέο Linux πνπ βαζίδνληαη ζην Debian, ην yum ζην Fedora Linux, ην pkg_add ζην FreeBSD, θ.ιπ. εκεηψζηε φηη ζα ρξεηαζηείηε κηα ζχλδεζε ζην δηαδίθηπν γηα λα ρξεζηκνπνηήζεηε απηή ηε κέζνδν. Δλαιιαθηηθά, κπνξείηε λα θαηεβάζεηε ηα δπαδηθά αξρεία απφ θάπνπ αιινχ, λα ηα αληηγξάςεηε κεηά ζηνλ ππνινγηζηή ζαο θαη λα ηα εγθαηαζηήζεηε. Γηα ρξήζηεο Mac OS X Οη πεξηζζφηεξνη ρξήζηεο Mac OS X ζα βξνπλ ηελ Python ήδε εγθαηεζηεκέλε ζηα ζπζηήκαηά ηνπο. Αλνίμηε ην Terminal.app θαη πιεθηξνινγήζηε python -V θαη αθνινπζήζηε ηηο νδεγίεο ζην πην πάλω ηκήκα γηα ην Linux. Γηα έλα ζχζηεκα Linux, πηζαλφηαηα έρνπκε ήδε ηελ Python εγθαηεζηεκέλε ζην ζχζηεκά καο. ε αληίζεηε πεξίπησζε, κπνξνχκε λα ηελ εγθαηαζηήζνπκε απφ ην δηαρεηξηζηή παθέησλ ινγηζκηθνχ πνπ ζπλνδεχεη ηε δηαλνκή καο. Γηα έλα ζχζηεκα Windows, ε 7 εγθαηάζηαζε ηεο Python είλαη ηφζν εχθνιε φζν ην θαηέβαζκα ηνπ αξρείνπ εγθαηάζηαζεο θαη ην δηπιφ θιηθ πάλσ ηνπ. ην εμήο, ζα ππνζέζνπκε φηη έρνπκε ηελ Python εγθαηεζηεκέλε ην ζχζηεκά καο. Page 19 of 253

20 Δπηινγή ελόο επεμεξγαζηή θώδηθα (Editor) Πξνηνχ πξνρσξήζνπκε ζηε ζπγγξαθή πξνγξακκάησλ Python ζε αξρεία πεγαίνπ θψδηθα, ρξεηαδφκαζηε έλαλ επεμεξγαζηή θώδηθα γηα λα γξάςνπκε ηνλ θψδηθά καο. Η επηινγή ελόο επεμεξγαζηή είλαη εμαηξεηηθά ζεκαληηθή. Πξέπεη λα επηιέμεηε ηνλ επεμεξγαζηή πνπ ζα ρξεζηκνπνηήζεηε φπσο ζα επηιέγαηε έλα ζπίηη πνπ ζα αγνξάδαηε. Έλαο θαιφο επεμεξγαζηήο ζα ζαο βνεζήζεη λα γξάςεηε πξνγξάκκαηα Python εχθνια, θάλνληαο ην ηαμίδη ζαο πην άλεην θαη ζαο βνεζά λα θζάζεηε ζηνλ πξννξηζκφ ζαο (ηελ επίηεπμε ηνπ ζηφρνπ ζαο) κε έλαλ πνιχ πην εχθνιν θαη αζθαιή ηξφπν. Μία απφ ηηο πνιχ βαζηθέο απαηηήζεηο είλαη ε ρξσκαηηθή επηζήκαλζε ζύληαμεο φπνπ φια ηα δηαθνξεηηθά ηκήκαηα ηνπ Python πξνγξάκκαηoο ρξσκαηίδνληαη θαηάιιεια έηζη ψζηε λα κπνξείηε λα δείηε ην πξφγξακκα θαη λα έρεηε κία εηθφλα ηεο εθηέιεζήο ηνπ. Δπίζεο, ε επηζήκαλζε καο βνεζά λα εληνπίδνπκε ηπρφλ ζπληαθηηθά ιάζε πνπ έρνπκε θάλεη ζηνλ θψδηθα επεηδή δελ ζα ρξσκαηίδεηαη ζσζηά φπσο ζα αλακελφηαλ κηα ιέμε ή κηα εληνιή. Γηα ρξήζηεο Windows, πξνηείλεηαη ην IDLE. Σν IDLE θάλεη ζπληαθηηθή επηζήκαλζε ηνπ θψδηθα θαη πνιιά πεξηζζφηεξα φπσο ην φηη ζαο επηηξέπεη λα ηξέρεηε ηα πξνγξάκκαηά ζαο κέζα απφ ην IDLE αλάκεζα ζε άιια πξάγκαηα. εκαληηθή ζεκείσζε: Με ρξεζηκνπνηήζεηε ην Notepad είλαη κία θαθή επηινγή επεηδή δελ θάλεη ζπληαθηηθή επηζήκαλζε θαη επίζεο δελ ππνζηεξίδεη ηε ζηνίρηζε ηνπ θεηκέλνπ, πνπ είλαη έλα πνιχ ζεκαληηθφ ραξαθηεξηζηηθφ ζηελ πεξίπησζή καο φπσο ζα δνχκε αξγφηεξα. Καινί επεμεξγαζηέο φπσο ην IDLE (θαη ν VIM επίζεο) ζα ζαο βνεζήζνπλ απηφκαηα ζε απηφ. Γηα ρξήζηεο Linux/FreeBSD, ππάξρεη πιήζνο επηινγψλ γηα ηνλ επεμεξγαζηή πνπ ζα ρξεζηκνπνηήζεηε. Δάλ μεθηλάηε κφιηο ηψξα ηνλ πξνγξακκαηηζκφ, πηζαλφλ ζα ζέιεηε λα ρξεζηκνπνηήζεηε ην Geany. Έρεη κία θηιηθή γξαθηθή δηεπαθή θαη θνπκπηά γηα ηελ εχθνιε κεηαγιψηηηζε θαη εθηέιεζε ησλ Python πξνγξακκάησλ ζαο. Χζηφζν, εάλ ζέιεηε, κπνξείηε λα αξθεζηείηε ζηνπο επεμεξγαζηέο θεηκέλνπ Gedit θαη Kate, νη νπνίνη ππάξρνπλ εγθαηεζηεκέλνη απφ πξνεπηινγή ζηηο πεξηζζφηεξεο δηαλνκέο Linux πνπ ρξεζηκνπνηνχλ ην GNOME ή ην KDE, αληίζηνηρα. εκεηψζηε φηη νη επεμεξγαζηέο απηνί ρξσκαηίδνπλ ηνλ θψδηθα γηα λα ηνλ θάλνπλ πην επαλάγλσζην, αιιά δελ παξέρνπλ εξγαιεία εθηέιεζήο ηνπ. Θα πξέπεη λα εθηειείηε ηα πξνγξάκκαηά ζαο έμσ απφ ηνλ επεμεξγαζηή θεηκέλνπ. Page 20 of 253

21 Οη έκπεηξνη πξνγξακκαηηζηέο, ρξεζηκνπνηνχλ ην Vim ή ηνλ Emacs. Πξφθεηηαη γηα δχν απφ ηνπο πην ηζρπξνχο επεμεξγαζηέο θψδηθα θαη ζα νθειεζείηε απφ ηε ρξήζε ηνπο γηα ηε ζπγγξαθή ησλ Python πξνγξακκάησλ ζαο. ε πεξίπησζε πνπ είζηε δηαηεζεηκέλνη λα αθηεξψζεηε ρξφλν ψζηε λα κάζεηε ην Vim ή ηνλemacs, ηφηε ζπληζηάηαη αλεπηθχιαθηα λα κάζεηε λα ρξεζηκνπνηείηε νπνηνλδήπνηε απφ ηνπο δχν θαζψο ζα ζαο θαλνχλ πνιχ ρξήζηκνη ζηελ πνξεία. ε απηή ηελ εξγαζία ζα ρξεζηκνπνηήζσ ην IDLE, ην IDE (Integrated Development Environment -Οινθιεξσκέλν Πεξηβάιινλ Αλάπηπμεο) θαη επεμεξγαζηή θψδηθα πνπ επέιεμα. Σν IDLE εγθαζίζηαηαη εμ νξηζκνχ απφ ην πξφγξακκα εγθαηάζηαζεο ηεο Python ζε Windows θαη OS X. Δίλαη επίζεο δηαζέζηκν γηα εγθαηάζηαζε ζε Linux θαη BSD ζηα αληίζηνηρα απνζεηήξηα (repositories). Αλ παξ' φια απηά ζέιεηε λα εμεξεπλήζεηε άιιεο επηινγέο φζνλ αθνξά ηνλ επεμεξγαζηή θψδηθα, δείηε ηε ιίζηα επεμεξγαζηψλ θψδηθα γηα Python θαη θάληε ηελ επηινγή ζαο. (http:/ / www. python. org/ cgi-bin/ moinmoin/ PythonEditors )Μπνξείηε επίζεο λα επηιέμεηε έλα IDE (Οινθιεξσκέλν Πεξηβάιινλ Αλάπηπμεο) γηα Python. Γείηε ηελ νινθιεξσκέλε ιίζηα IDE πνπ ππνζηεξίδνπλ ηελ Python γηα πεξηζζφηεξεο ιεπηνκέξεηεο ( / www. python. org/ cgi-bin/ moinmoin/ IntegratedDevelopmentEnvironments ). Αθνχ μεθηλήζεηε λα γξάθεηε κεγάια πξνγξάκκαηα ζε Python, ηα νινθιεξσκέλα πεξηβάιινληα αλάπηπμεο κπνξνχλ λα θαλνχλ εμαηξεηηθά ρξήζηκα. Ξαλαηνλίδσ φηη είλαη πνιχ ζεκαληηθή ε επηινγή ελφο θαηάιιεινπ επεμεξγαζηή γηα Python, δηφηη κπνξεί λα θάλεη ηε ζπγγξαθή πξνγξακκάησλ ζε Python πην δηαζθεδαζηηθή θαη εχθνιε. Γηα ηνπο ρξήζηεο ηνπ Vim Τπάξρεη κία θαιή εηζαγσγή ζην πψο λα κεηαηξέςεηε ην Vim ζε έλα ηζρπξφ Python IDE απφ ηνλ John M. Anderson. ( / blog. sontek. net/ 2008/ 05/ 11/ pythonwith-a-modular-ide-vim/ ) Γηα ηνπο ρξήζηεο ηνπ Emacs Τπάξρεη κία θαιή εηζαγσγή ζην πψο λα κεηαηξέςεηε ηνλ Emacs ζε έλα ηζρπξφ Python IDE απφ ηνλ Ryan McGuire. (http:/ / www. enigmacurry. com/ 2008/ 05/ 09/ emacs-as-a-powerful-python-ide/ ) Page 21 of 253

22 Υξεζηκνπνηώληαο έλα αξρείν πεγαίνπ θώδηθα Σν πξώην Python script Δίλαη παξάδνζε φπνηε καζαίλνπκε κία θαηλνχξγηα γιψζζα πξνγξακκαηηζκνχ, ην πξψην πξφγξακκα πνπ γξάθνπκε θαη ηξέρνπκε λα είλαη ην πξόγξακκα «Hello, World!» («Υαίξε, Κόζκε!») -ην κφλν πνπ θάλεη είλαη λα ιέεη «Υαίξε, Κφζκε!» φηαλ ην ηξέμνπκε. πσο έρεη πεη θαη ν Simon Cozens, είλαη «ην παξαδνζηαθφ μφξθη πξνο ηνπο ζενχο ηνπ πξνγξακκαηηζκνχ γηα λα καο βνεζήζνπλ λα κάζνπκε ηε γιψζζα θαιχηεξα». Πάξαπηα εδψ ζα ηξέμνπκε ην πξφγξακκα. Δδψ ζα πξσηνηππήζνπκε θαη ζα εκθαλίζνπκε ζην πξψην καο script ην κήλπκα «Welcome to Python world!» Αλνίγνπκε ην IDLE (Python GUI). Δπηιέμηε File New Window ή εθηεινχκε Ctrl + N θαη εηζάγεηε πξφγξακκα. print ('Welcome to Python world'). Έπεηηα επηιέμηε File Save ή Ctrl+S θαη απνζεθεχζηε ην σο welcometopython.py ηε ζπλέρεηα, κέλνληαο ζην παξάζπξν ηνπ θψδηθα, επηιέγνπκε Run module ή παηνχκε ην F5. Page 22 of 253

23 Μπνξνχκε επίζεο λα ηξέμνπκε απηφ ην πξφγξακκα αλνίγνληαο έλα θέιπθνο (ηεξκαηηθφ ζην Linux ή γξακκή εληνιψλ ζην DOS) θαη εηζάγνληαο ηελ εληνιή python3.3.2 welcometopython.py. εκεηψζηε φηη πξηλ δψζεηε ηελ εληνιή γηα ηελ εθηέιεζε ηνπ πξνγξάκκαηνο helloworld.py ζα πξέπεη λα έρεηε κεηαβεί ζην θάθειν φπνπ είλαη απνζεθεπκέλν ην αξρείν welocometopython.py. Παξαηεξήζεηο : Η Python ζαο δίλεη ηελ έμνδν (output) ηεο γξακκήο άκεζα! Απηφ πνπ κφιηο γξάςαηε είλαη κία εληνιή (statement) ζε Python. Υξεζηκνπνηνχκε ηελ print (ηχπσζε) γηα λα ηππψζνπκε νπνηαδήπνηε ηηκή ηεο παξέρνπκε. o Κιείζηκν ηεο θνλζφιαο ηνπ δηεξκελεπηή : Γηα λα θιείζεηε ηελ θνλζφια, πηέζηε ctrl-d (ζχκβνιν EOF - End Of File) αλ ρξεζηκνπνηείηε ην IDLE ή θάπνην θέιπθνο Linux/BSD. Αλ ρξεζηκνπνηείηε ηε γξακκή εληνιψλ ησλ Windows, πηέζηε ctrl-z θαη κεηά πηέζηε Enter. o ε πεξίπησζε πνπ πήξαηε θάπνην κήλπκα ιάζνπο, μαλαγξάςηε ην παξαπάλσ πξφγξακκα αθξηβψο φπσο ην βιέπεηε πην πάλσ θαη ηξέμηε ην μαλά. o εκεηψλνπκε νηη ε Python θάλεη δηάθξηζε πεδψλ-θεθαιαίσλ,γηα παξάδεηγκα ην print δελ είλαη ην ίδην κε ην Print. o Δπίζεο, βεβαησζείηε νηη δελ ππάξρνπλ θελά ή ζηεινζέηεο (tabs) πξηλ ηνλ πξψην ραξαθηήξα (γξάκκα) ζε θάζε γξακκή -ζα δνχκε γηαηί απηφ είλαη ζεκαληηθφ αξγφηεξα. Page 23 of 253

24 o Αο ζηαζνχκε ζηηο δχν πξψηεο γξακκέο ηνπ πξνγξάκκαηνο.. Απηέο νλνκάδνληαη ζρφιηα -νηηδήπνηε δεμηά ηνπ ζπκβφινπ # είλαη ζρφιην. Σα ζρφιηα ρξεζηκνπνηνχληαη θπξίσο σο ζεκεηψζεηο γηα ηνλ αλαγλψζηε ηνπ πξνγξάκκαηνο. o Η Python δε ιακβάλεη ππ' φςε ηεο ηα ζρφιηα, εθηφο απφ ηελ εηδηθή πεξίπησζε ηεο πξψηεο γξακκήο φπσο εδψ. Απηή απνθαιείηαη γξακκή shebang - νπνηεδήπνηε νη πξψηνη δχν ραξαθηήξεο ηνπ αξρείνπ πεγαίνπ θψδηθα είλαη #! αθνινπζνχκελνη απφ ηελ ηνπνζεζία ελφο πξνγξάκκαηνο, απηφ πιεξνθνξεί ην Linux/Unix ζχζηεκα φηη απηφ ην πξφγξακκα ζα πξέπεη λα εθηειεζηεί κε απηφ ην δηεξκελεπηή φηαλ ζα έξζεη ε ψξα ηεο εθηέιεζήο ηνπ. #!/usr/bin/python3.3 #Filename: welcometopython.py print ('Welcome to Python world!') o εκεηψζηε φηη κπνξείηε πάληα λα ηξέμεηε ην πξφγξακκα ζε νπνηαδήπνηε πιαηθφξκα θαζνξίδνληαο ην δηεξκελεπηή απ' επζείαο ζηε γξακκή εληνιψλ φπσο γηα παξάδεηγκα κε ηελ εληνιή python3.3.2 welcometopython.py. o Υξεζηκνπνηείηε ηα ζρφιηα ζηα πξνγξάκκαηά ζαο γηα λα εμεγήζεηε θάπνηεο ζεκαληηθέο ιεπηνκέξεηεο ηνπ πξνγξάκκαηνο -είλαη ρξήζηκν γηα ηνπο αλαγλψζηεο ηνπ πξνγξάκκαηφο ζαο έηζη ψζηε λα κπνξνχλ εχθνια λα θαηαιάβνπλ ηη θάλεη ην πξφγξακκα. Θπκεζείηε, απηφ ην άηνκν κπνξεί λα είζηε εζείο ν ίδηνο κεηά απφ έμη κήλεο! o Σα ζρφιηα αθνινπζνχληαη απφ κία εληνιή Python. Δδψ θαινχκε ηε ζπλάξηεζε (function) print πνπ απιά ηππψλεη ην θείκελν 'Welcome to Python world!'. Αξγφηεξα ζα αλαιχζνπκε ηηο ζπλαξηήζεηο -απηφ πνπ πξέπεη λα θαηαλνήζεηε απηή ηε ζηηγκή είλαη πσο νηηδήπνηε δψζεηε αλάκεζα ζηηο παξελζέζεηο ζα ηππσζεί ζηελ νζφλε. ε απηή ηελ πεξίπησζε, δίλνπκε ην 'Welcome to Python world!' ην νπνίν απνθαινχκε ζπκβνινζεηξά (string). Δθηειέζηκα πξνγξάκκαηα Python Σα παξαθάησ έρνπλ ηζρχ κφλν γηα ρξήζηεο Linux/Unix αιιά νη ρξήζηεο Windows κπνξεί λα είλαη εμίζνπ πεξίεξγνη ζρεηηθά κε ηελ πξψηε γξακκή ηνπ πξνγξάκκαηνο. Πξψηα, πξέπεη λα δψζνπκε ζην πξφγξακκα δηθαίσκα εθηέιεζεο ρξεζηκνπνηψληαο ηελ εληνιή chmod θαη κεηά λα ηξέμνπκε ην πεγαίν πξφγξακκα. $ chmod a+x welcometopython.py $./welcometopython.py Welcome to Python world! Page 24 of 253

25 Η εληνιή chmod ρξεζηκνπνηείηαη εδψ γηα λα αιιάμνπκε (change) ηελ θαηάζηαζε (mode) ηνπ αξρείνπ δίλνληαο δηθαηψκαηα εθηέιεζεο (execute) ζε φινπο (all) ηνπο ρξήζηεο ηνπ ζπζηήκαηνο. Έπεηηα, εθηεινχκε ην πξφγξακκα απ' επζείαο θαζνξίδνληαο ηελ ηνπνζεζία ηνπ αξρείνπ πεγαίνπ θψδηθα. Υξεζηκνπνηνχκε ην./ γηα λα ππνδειψζνπκε νηη ην πξφγξακκα βξίζθεηαη ζηελ ηξέρνπζα δηαδξνκή (ζην θάθειν πνπ είκαζηε). Τη γίλεηαη όκωο αλ δε γλωξίδνπκε πνύ βξίζθεηαη ν δηεξκελεπηήο ηεο Python; Σφηε, κπνξείηε λα ρξεζηκνπνηήζεηε ην εηδηθό πξόγξακκα env πνπ είλαη δηαζέζηκν ζε ζπζηήκαηα Linux/Unix. Απιάηξνπνπνηήζηε ηελ πξψηε γξακκή ηνπ πξνγξάκκαηνο ψο εμήο: #!/usr/bin/env python3 Σν πξφγξακκα env ζα αλαδεηήζεη ην δηεξκελεπηή ηεο Python κε ηνλ νπνίν ζα εθηειεζηεί ην πξφγξακκά καο. Μέρξη ηψξα, κπνξνχζακε λα ηξέμνπκε ην πξφγξακκά καο εθ' φζνλ γλσξίδακε αθξηβψο ηε δηαδξνκή πξνο απηφ. Αλ φκσο ζέιακε λα κπνξνχκε λα ην ηξέμνπκε απφ νπνπδήπνηε; Απηφ κπνξνχκε λα ην επηηχρνπκε απνζεθεχνληαο ην πξφγξακκα ζε κία απφ ηηο δηαδξνκέο πνπ πεξηέρνληαη ζηε κεηαβιεηή πεξηβάιινληνο PATH. Κάζε θνξά πνπ ηξέρεηε νπνηνδήπνηε πξφγξακκα, ην ζχζηεκα ην αλαδεηά ζε θάζε κία απφ ηεο δηαδξνκέο πνπ πεξηέρνληαη ζηε κεηαβιεηή πεξηβάιινληνο PATH θαη, αλ βξεζεί, ην πξφγξακκα εθηειείηαη. Μπνξνχκε λα θάλνπκε ην πξφγξακκά καο δηαζέζηκν απφ παληνχ απιά αληηγξάθνληαο ην αξρείν πεγαίνπ θψδηθα ζε κία απφ ηηο δηαδξνκέο πνπ πεξηέρνληαη ζηελ PATH. $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr /games $ cp welcometopython.py /usr/local/bin/welcometopython $ welcome to Python Welcome to Python world! εκεηψλνπκε φηη νη θάθεινη πνπ πεξηέρνληαη ζηελ PATH είλαη ζπλήζσο θάθεινη ηνπ ζπζηήκαηνο. Γη' απηφ ρξεηάδεζηε δηθαηψκαηα ππεξρξήζηε γηα λα αληηγξάςεηε ζ' απηνχο έλα αξρείν, π.ρ. βάδνληαο κπξνζηά ζηελ εληνιή ζαο ην sudo, δειαδή: sudo Page 25 of 253

26 cp helloworld.py /usr/local/bin/helloworld ή άιιε εληνιή πνπ ζαο δίλεη δηθαηψκαηα ππεξρξήζηε (ζπκβνπιεπηείηε ηελ ηεθκεξίσζε ηνπ ζπζηήκαηφο ζαο γη' απηφ ην ζέκα). Μπνξνχκε λα δνχκε ηα πεξηερφκελα ηεο PATH ρξεζηκνπνηψληαο ηελ εληνιή echo (ζε ηεξκαηηθφ) θαη πξνζζέηνληαο πξηλ ην φλνκα ηεο κεηαβιεηήο ην ζύκβνιν $ γηα λα δείμνπκε ζην θέιπθνο φηη ζέινπκε ηελ ηηκή ηεο ζπγθεθξηκέλεο κεηαβιεηήο. Μπνξείηε λα πξνζζέζεηε κία δηαδξνκή ζηε κεηαβιεηή PATH δίλνληαο γηα παξάδεηγκα ζε ηεξκαηηθφ ηελ εληνιή PATH=$PATH:/tonia/pythonproject/programs φπνπ '/tonia/pythonproject/programs' είλαη ε δηαδξνκή πνπ ζέιεηε λα πξνζζέζεηε. εκαληηθή παξαηήξεζε Η πξνζζήθε κηαο δηαδξνκήο ζηελ $PATH κε ηελ εληνιή PATH=$PATH:/tonia/pythonproject/programs ιεηηνπξγεί πξνζσξηλά, θαη ην απνηέιεζκά ηεο ράλεηαη κεηά απφ επαλεθθίλεζε ηνπ ζπζηήκαηνο. πκβνπιεπηείηε ηελ ηεθκεξίσζε ηνπ ζπζηήκαηφο ζαο γηα κφληκε πξνζζήθε δηαδξνκήο ζηελ $PATH. Απηή ε κέζνδνο είλαη πνιχ ρξήζηκε αλ ζέιεηε λα γξάςεηε ρξήζηκα scripts πνπ ζέιεηε λα κπνξείηε λα ηα ηξέρεηε απφ νπνπδήπνηε, νπνηεδήπνηε. Δίλαη ζα λα δεκηνπξγείηε ηηο δηθέο ζαο εληνιέο φπσο π.ρ. ε εληνιή cd ή νπνηαδήπνηε άιιε εληνιή ρξεζηκνπνηείηε ζε έλα ηεξκαηηθφ ζην Linux ή ζηε γξακκή εληνιψλ ηνπ DOS. Βνήζεηα ζηελ Python Αλ ρξεηάδεζηε γξήγνξα πιεξνθνξίεο ζρεηηθά κε κία ζπλάξηεζε ή εληνιή ζηελ Python, ηφηε κπνξείηε λα ρξεζηκνπνηήζεηε ηελ ελζσκαησκέλε ζπλάξηεζε help. Δίλαη ηδηαίηεξα ρξήζηκε εηδηθά φηαλ ρξεζηκνπνηείηε ηελ θνλζφια ηνπ δηεξκελεπηή. Γηα παξάδεηγκα, δψζηε help(print) -ζα εκθαλίζεη ηελ ηεθκεξίσζε γηα ηε ζπλάξηεζε print πνπ ρξεζηκνπνηείηαη γηα ηελ εθηχπσζε ζηελ νζφλε. Πηέζηε ην q γηα λα θιείζεηε ηε βνήζεηα.με ηνλ ίδην ηξφπν, κπνξείηε λα βξείηε πιεξνθνξίεο ζρεηηθά κε ζρεδφλ νηηδήπνηε ζηελ Python. Υξεζηκνπνηήζηε ηε help() γηα λα κάζεηε πεξηζζφηεξα γηα ηε ρξήζε ηεο ίδηαο ηεο help! ε πεξίπησζε πνπ ρξεηάδεζηε βνήζεηα ζρεηηθά κε ηειεζηέο (operators) φπσο ην return, ηφηε πξέπεη λα ηνπο ηνπνζεηήζεηε αλάκεζα ζε απιά εηζαγσγηθά π.ρ. help('return') έηζη ψζηε λα κε κπεξδεπηεί ε Python ζρεηηθά κε ην ηη πξνζπαζείηε λα θάλεηε. Page 26 of 253

27 Βαζηθέο εηζαγσγηθέο έλλνηεο ζηελ Python Κπξηνιεθηηθέο ζηαζεξέο (Literal Constants) Έλα παξάδεηγκα θπξηνιεθηηθήο ζηαζεξάο είλαη έλαο αξηζκφο φπσο 4, 6.23, 5.25e-1 ή κηα ζπκβνινζεηξά φπσο 'Απηή είλαη κηα ζπκβνινζεηξά' ή "Μηα ζπκβνινζεηξά!". Απνθαιείηαη θπξηνιεθηηθή δηφηη θπξηνιεθηεί -ε ηηκή ηεο νξίδεηαη θπξηνιεθηηθά. Ο αξηζκφο 2 αλαπαξηζηά ηνλ εαπηφ ηνπ θαη ηίπνηα άιιν είλαη ζηαζεξά δηφηη ε ηηκή ηεο δε κπνξεί λα αιιάμεη. Άξα, φια απηά αλαθέξνληαη σο θπξηνιεθηηθέο ζηαζεξέο. Αξηζκνί Οη αξηζκνί ζηελ Python είλαη ηξηψλ ηχπσλ: 1) νη αθέξαηνη (integers) 2) νη αξηζκνί θηλεηήο ππνδηαζηνιήο (floating point) θαη 3) νη κηγαδηθνί αξηζκνί (complex numbers) Έλα παξάδεηγκα αθέξαηνπ είλαη ην 4 θαη είλαη απιά έλαο αθέξαηνο αξηζκφο. Παξαδείγκαηα αξηζκψλ θηλεηήο ππνδηαζηνιήο (ή floats γηα ζπληνκία) είλαη νη 3.23 θαη 52.3E-4. Σν ζχκβνιν E δειψλεη δχλακε ηνπ 10. ε απηή ηελ πεξίπησζε, ην 52.3E-4 ζεκαίλεη 52.3 * Παξαδείγκαηα κηγαδηθψλ αξηζκψλ είλαη νη (-3+j) θαη ( j). Δεν υπάρχει ξεχωριςτόσ 'long int' τφποσ. Ο ακζραιοσ μπορεί να ζχει κάκε τιμι. πκβνινζεηξέο (Strings) Μηα ζπκβνινζεηξά είλαη κηα αθνινπζία από ραξαθηήξεο. Οη ζπκβνινζεηξέο είλαη βαζηθά έλα κάηζν ιέμεηο. Οη ιέμεηο κπνξεί λα είλαη ζηελ αγγιηθή ή ζε θάζε γιψζζα πνπ ππνζηεξίδεηαη απφ ην πξφηππν Unicode, νπζηαζηηθά ζε ζρεδφλ θάζε γιψζζα ηνπ θφζκνπ. Γεν ςπάπσοςν "ASCII-only" ζςμβολοζειπέρ, διόηι ηο ππόηςπο Unicode αποηελεί ςπεπζύνολο ηος ASCII. Αλ απαηηείηαη έλα ASCII-encoded byte-stream, ηφηε ρξεζηκνπνηείζηε str.encode("ascii"). Απφ πξνεπηινγή, φιεο νη ζπκβνινζεηξέο είλαη ζε Unicode. Page 27 of 253

28 Μονά ειζαγυγικά Μπνξείηε λα νξίζεηε ζπκβνινζεηξέο κε κνλά εηζαγσγηθά, γηα παξάδεηγκα 'Με ιέλε Σφληα θαη καζαίλσ λα πξνγξακκαηίδσ ζε Python'. Η κνξθνπνίεζε, π.ρ θελνί ραξαθηήξεο (Whitespace) θαη ζηεινζέηεο (Tabs), παξακέλεη σο έρεη. Γιπλά ειζαγυγικά Οη ζπκβνινζεηξέο κε δηπιά εηζαγσγηθά ιεηηνπξγνχλ αθξηβψο φπσο θαη κε κνλά εηζαγσγηθά. Γηα παξάδεηγκα, "Πψο ζνπ θαίλεηαη ε Python;" Tπιπλά ειζαγυγικά Μπνξείηε λα νξίζεηε ζπκβνινζεηξέο πνιιαπιψλ γξακκψλ κε ηξηπιά εηζαγσγηθά - (""" ή '''). Υξεζηκνπνηήζηε κνλά εηζαγσγηθά θαη δηπιά εηζαγσγηθά ειεχζεξα κέζα ζε ηξηπιά εηζαγσγηθά. Γηα παξάδεηγκα: '''Μια ςυμβολοςειρϊ πολλών γραμμών. Αυτό εύναι η πρώτη γραμμό. Αυτό εύναι η 2η γραμμό. "Πώσ ςου φαύνεται η Python;" το ρώτηςα. Μου εύπε: 'Πολύ ενδιαφϋρουςα.' ''' Αθνινπζίεο δηαθπγήο (Escape Sequences) Τπνζέζηε φηη ζα ζέιαηε κηα ζπκβνινζεηξά πνπ λα πεξηέρεη έλα κνλφ εηζαγσγηθφ ('), πψο ζα ην νξίζεηε; Γηα παξάδεηγκα, ε ζπκβνινζεηξά είλαη'γε ζ'αγλνψ!. Γελ κπνξείηε λα ην νξίζεηε σο 'Γε ζ'αγλνψ!' δηφηη ε Python ζα κπεξδεπηεί κε ηελ αξρή θαη ην ηέινο ηεο ζπκβνινζεηξάο. Γη'απηφ, πξέπεη λα νξίζεηε μερσξηζηά φηη ην κνλφ εηζαγσγηθφ δε δειψλεη ην ηέινο ηεο ζπκβνινζεηξάο. Η ιχζε είλαη κε ηε ρξήζε ηνπ απνθαινχκελνπ ραξαθηήξα δηαθπγήο. Οξίδεηε ην κνλφ εηζαγσγηθφ σο \' -πξνζέμηε ηελ αξηζηεξή πιάγηα θάζεην. Σψξα, κπνξείηε λα νξίζεηε ηε ζπκβνινζεηξά σο 'Γε ζ\'αγλνώ!'. Έλαο άιινο ηξφπνο νξηζκνχ ηεο ζπγθεθξηκέλεο ζπκβνινζεηξάο είλαη π.ρ. "Γε ζ' αγλνψ!", κε ηε ρξήζε δηπιψλ εηζαγσγηθψλ. Παξνκνίσο, πξέπεη λα ρξεζηκνπνηήζεηε έλα ραξαθηήξα δηαθπγήο γηα έλα δηπιφ εηζαγσγηθφ εληφο κηαο ζπκβνινζεηξάο δηπιψλ εηζαγσγηθψλ. Δπίζεο, πξέπεη λα ππνδείμεηε κε ραξαθηήξα δηαθπγήο ηελ αξηζηεξή πιάγηα θάζεην \\. Page 28 of 253

29 Κη αλ ζέιεηε λα νξίζεηε κηα ζπκβνινζεηξά δχν γξακκψλ; Έλαο ηξφπνο είλαη κε ηε ρξήζε ηξηπιψλ εηζαγσγηθψλ φπσο δείμακε πξνεγνπκέλσο, ή κε ηε ρξήζε ελφο ραξαθηήξα δηαθπγήο - \n ζηελ αξρή ηεο λέαο γξακκήο. Γηα παξάδεηγκα : Αυτό εύναι η πρώτη γραμμό\nκι αυτό εύναι η δεύτερη γραμμό. Έλαο αθφκα ραξαθηήξαο δηαθπγήο πνπ είλαη ρξήζηκν λα γλσξίδεηε είλαη ν ζηεινζέηεο (Tab) \t. Τπάξρνπλ θαη πνιινί άιινη ραξαθηήξεο δηαθπγήο αιιά εδψ αλέθεξα ηνπο ρξεζηκφηεξνπο. Αμίδεη λα ζεκεησζεί φηη εληφο κηαο ζπκβνινζεηξάο, κία αξηζηεξή πιάγηα θάζεηνο ζην ηέινο ηεο γξακκήο δειψλεη φηη ε ζπκβνινζεηξά ζπλερίδεηαη ζηελ επφκελε γξακκή, αιιά δελ πξνζζέηεη λέα γξακκή. Γηα παξάδεηγκα ε ζπκβνινζεηξά: "Αυτό εύναι η πρώτη πρόταςη.\ Κι αυτό εύναι η δεύτερη πρόταςη." ηζνδπλακεί κε "Απηή είλαη ε πξψηε πξφηαζε. Κη απηή είλαη ε δεχηεξε πξφηαζε.". Αλεπεμέξγαζηεο ζπκβνινζεηξέο (Raw Strings) Αλ πξέπεη λα νξίζεηε θάπνηεο ζπκβνινζεηξέο θαη δε ζέιεηε εηδηθή επεμεξγαζία, π.ρ. γηα ην ρεηξηζκφ ησλ ραξαθηήξσλ δηαθπγήο, νξίζηε κηα αλεπεμέξγαζηε (raw) ηηκή r ή R ζηε ζπκβνινζεηξά. Έλα παξάδεηγκα γη' απηφ είλαη: r"it was made by \n". ' απηή ηε ζπκβνινζεηξά, δε ζα ηππσζεί κηα λέα γξακκή, παξφηη ππάξρεη ην \n γηαηί ζηηο αλεπεμέξγαζηεο ζπκβνινζεηξέο δελ αλαιχνληαη νη ραξαθηήξεο δηαθπγήο. Οη ζπκβνινζεηξέο είλαη ακεηάβιεηεο (Immutable) Απηφ ζεκαίλεη φηη αθνχ δεκηνπξγήζαηε κηα ζπκβνινζεηξά, δε κπνξείηε λα ηελ αιιάμεηε. Παξφιν πνπ θαίλεηαη σο θάηη θαθφ, ζηελ πξαγκαηηθφηεηα δελ είλαη. Θα δνχκε γηαηί δελ είλαη πεξηνξηζκφο! πλέλσζε (Concatenation) θπξηνιεθηηθώλ ζπκβνινζεηξώλ Αλ ηνπνζεηήζεηε δίπια δίπια δχν θπξηνιεθηηθέο ζπκβνινζεηξέο, ζπλελψλνληαη απηφκαηα απφ ηελ Python. Γηα παξάδεηγκα, ε ζπκβνινζεηξά 'What\'s ' 'your name?' κεηαηξέπεηαη απηνκάησο ζε "What's your name?" Page 29 of 253

30 Σεκείωζε γηα πξνγξακκαηηζηέο C/C++ Γελ ππάξρεη μερσξηζηφο char ηχπνο δεδνκέλσλ ζηελ Python. Σεκείωζε γηα πξνγξακκαηηζηέο Perl/PHP Θπκεζείηε φηη ηα κνλά θαη ηα δηπιά εηζαγσγηθά είλαη ην ίδην - δε δηαθέξνπλ ζε θακία πεξίπησζε. Σεκείωζε γηα ρξήζηεο θαλνληθώλ εθθξάζεωλ (Regular Expression). Υξεζηκνπνηήζηε πάληα αλεπεμέξγαζηεο ζπκβνινζεηξέο γηα ην ρεηξηζκφ θαλνληθψλ εθθξάζεσλ. Γηαθνξεηηθά ζα απαηηεζεί ππεξβνιηθή ρξήζε ηνπ ραξαθηήξα δηαθπγήο. Γηα παξάδεηγκα, νη αλαθνξέο κπνξνχλ λα νξηζζνχλ σο '\\1' ή r'\1'. Η κέζνδνο format Μεξηθέο θνξέο ίζσο ρξεηαζηεί λα δεκηνπξγήζνπκε ζπκβνινζεηξέο απφ άιιεο πιεξνθνξίεο. Δδψ είλαη πνπ ρξεζηκεχεη ε μέθοδορ format(). #!/usr/bin/python3.3 # Filename: example_format.py age = 21 name = 'Τόνια' print('η {0} εύναι {1} ετών.'.format(name, age)) print('μα γιατύ θϋλει η {0} να μϊθει Python;'.format(name)) Έμνδνο Η Τόνια εύναι 21 ετών. Μα γιατύ θϋλει η Τόνια να μϊθει Python; Page 30 of 253

31 Μηα ζπκβνινζεηξά κπνξεί λα ρξεζηκνπνηεί νξηζκέλεο πξνδηαγξαθέο (specifications) θαη θαηά ζπλέπεηα, κπνξεί λα θιεζεί ε κέζνδνο format γηα λα ηηο αληηθαηαζηήζεη κε αληίζηνηρα νξίζκαηα (arguments) ηεο κεζφδνπ format. Παξαηεξήζηε ηελ πξψηε δήισζε {0} πνπ αληηζηνηρεί ζηε κεηαβιεηή name ε νπνία είλαη ην πξψην φξηζκα ζηε κέζνδν κνξθνπνίεζεο. Παξνκνίσο, ε δεχηεξε δήισζε {1} αληηζηνηρεί ζηε κεηαβιεηή age σο ην δεχηεξν φξηζκα ζηε κέζνδν κνξθνπνίεζεο. Θα είχαμε το ίδιο αποτζλεςμα και με αλλθλουχία ςυμβολοςειρϊν: 'H ' + name + ' είναι ' +str(age) + ' ετών.', παρατθριςτε όμωσ τθν αςχιμια και τθν επιρρζπεια ςε ςφάλματα. Δεφτερον, θ μετατροπι ςυμβολοςειράσ κα είχε επιτευχκεί αυτόματα ςτθ μζκοδο format αντί για τθ ρθτι μετατροπι εδϊ. Σρίτον, με τθ χριςθ τθσ μεκόδου format, μποροφμε να αλλάξουμε το μινυμα, χωρίσ να χρειάηεται να αςχολθκοφμε με τισ μεταβλθτζσ που χρθςιμοποιικθκαν, και το αντίςτροφο. Page 31 of 253

32 Μεηαβιεηέο (Variables) Η ρξήζε κφλν θπξηνιεθηηθψλ ζηαζεξψλ θαηαληά ζχληνκα βαξεηή - ρξεηαδφκαζηε θάπνην ηξφπν απνζήθεπζεο θαη επεμεξγαζίαο θάζε πιεξνθνξίαο. Δδψ είλαη πνπ εθαξκφδνληαη νη μεηαβληηέρ. Οη κεηαβιεηέο είλαη αθξηβψο φηη ην φλνκα ζπλεπάγεηαη - νη ηηκέο ηνπο πνηθίιινπλ, δειαδή κπνξείηε λα απνζεθεχζεηε νηηδήπνηε κε ηε ρξήζε ησλ κεηαβιεηψλ. Οη κεηαβιεηέο είλαη απιά ηκήκαηα ηεο κλήκεο ηνπ Η/Τ ζαο φπνπ κπνξείηε λα απνζεθεχζεηε πιεξνθνξία. Αληίζεηα κε ηηο θπξηνιεθηηθέο ζηαζεξέο, ρξεηάδεζηε θάπνηα κέζνδν (method) γηα λα θαιέζεηε απηέο ηηο κεηαβιεηέο, αιιά θαη λα ηνπο δψζεηε νλφκαηα. Ολνκαηνδνζία αλαγλσξηζηηθνύ Οη κεηαβιεηέο είλαη παξαδείγκαηα αλαγλσξηζηηθψλ. Σα αναγνυπιζηικά είλαη δνζέληα νλφκαηα γηα λα αλαγλσξίζνπλ θάηη. Τπάξρνπλ νξηζκέλνη θαλφλεο πνπ πξέπεη λα αθνινπζήζεηε γηα ηελ νλνκαηνδνζία αλαγλσξηζηηθψλ: Ο πξψηνο ραξαθηήξαο ηνπ αλαγλσξηζηηθνχ πξέπεη λα είλαη έλα γξάκκα ηεο αιθαβήηνπ (θεθαιαίν ASCII ή πεδφ ASCII ή ραξαθηήξαο Unicode) ή κηα θάησ παχια ('_'). Σν ππφινηπν ηνπ νλφκαηνο ηνπ αλαγλσξηζηηθνχ κπνξεί λα απνηειείηαη απφ γξάκκαηα (θεθαιαία ASCII ή πεδά ASCII ή Unicode ραξαθηήξεο), θάησ παχιεο ('_') ή αξηζκνχο (0-9). ην φλνκα ελφο αλαγλσξηζηηθνχ δηαθξίλνληαη ηα πεδά απφ ηα θεθαιαία (casesensitive). Γηα παξάδεηγκα, ην myname θαη ην myname δελ είλαη ην ίδην. Παξαηεξήζηε ην πεδφ n ζην πξψην παξάδεηγκα θαη ην θεθαιαίν N ζην δεχηεξν. Παξαδείγκαηα νξζήο νλνκαηνδνζίαο αλαγλσξηζηηθνχ: i, my_name, name_23, a1b2_c3 θαη random_utf8_characters_յժջ٣ㄆㄘㄩ ڨ ڪ წჭⴠοεδਫ ມຣⴠⴠପବଭ. Παξαδείγκαηα εζθαικέλεο νλνκαηνδνζίαο αλαγλσξηζηηθνχ: 2things, this is spaced out,my-name, θαη "this_is_in_quotes". Μπνξείηε λα ρξεζηκνπνηείηε ειιεληθέο ιέμεηο σο νλφκαηα αλαγλσξηζηηθψλ, π.ρ. α, ην_φλνκά_κνπ. Σύπνη δεδνκέλσλ Οη κεηαβιεηέο κπνξνχλ λα δηαηεξνχλ ηηκέο δηαθνξεηηθψλ ηχπσλ πνπ νλνκάδνληαη ηχπνη δεδνκέλσλ. Οη βαζηθνί ηχπνη είλαη αξηζκνί θαη ζπκβνινζεηξέο, φπσο ήδε αλαθέξακε. ηε ζπλέρεηα, ζα δνχκε πψο κπνξνχκε λα δεκηνπξγήζνπκε δηθνχο καο ηχπνπο ρξεζηκνπνηψληαο Κιάζεηο. Page 32 of 253

33 Αληηθείκελα Πξέπεη λα ζπκφκαζηε φηη, ε Python αληηιακβάλεηαη oηηδήπνηε ρξεζηκνπνηείηαη ζε έλα πξφγξακκα σο έλα αληηθείκελν, κε κηα γεληθή έλλνηα ηεο ιέμεο. Αληί λα πνχκε 'ην θάηη', ιέκε 'ην αληηθείκελν'. Σεκείωζε γηα ρξήζηεο αληηθεηκελνζηξεθνύο πξνγξακκαηηζκνύ Η Python είναι ένηονα ανηικειμενοζηπεθήρ κε ηελ έλλνηα φηη νηηδήπνηε είλαη έλα αληηθείκελν ζπκπεξηιακβάλνληαο αξηζκνχο, ζπκβνινζεηξέο θαη ζπλαξηήζεηο. Πώο λα γξάθεηε πξνγξάκκαηα Python Η ηςπική διαδικαζία εθεξήρ για ηην αποθήκεςζη και εκηέλεζη ενόρ ππογπάμμαηορ Python είναι η ακόλοςθη: 1. Ανοίξηε ηον επεξεπγαζηή κώδικα ηηρ πποηίμιζήρ ζαρ. 2. Γπάτηε ηον κώδικα ηος ππογπάμμαηορ πος δίνεηαι ζηο παπάδειγμα. 3. Αποθηκεύζηε ηο υρ απσείο με ηο όνομα πος αναθέπεηαι ζηο ζσόλιο. Ακολοςθώ ηη ζύμβαζη αποθήκεςζηρ όλυν ηυν ππογπαμμάηυν Python με ηην καηάληξη.py. 4. Δκηελέζηε ηο διεπμηνεςηή με ηην ενηολή python var.py ή απλούζηεπα σπηζιμοποιήζηε ηο IDLE για ηην εκηέλεζη ηυν ππογπαμμάηυν. Μποπείηε να κάνεηε επίζηρ ηα απσεία εκηελέζιμα όπυρ αναθέπθηκε παπαπάνυ. ηε ζπλέρεηα, ζα δνχκε ηε ρξήζε κεηαβιεηψλ καδί κε θπξηνιεθηηθέο ζηαζεξέο κέζσ ελφο απινχ παξαδείγκαηνο. Έξοδοσ # Filename : example.py i = 3 print(i) i = i + 2 print(i) s = '''This is a multi-line string. This is the second line.''' 3 5 This is a multi-line string. This is the second line. print(s) Page 33 of 253

34 Πώο ιεηηνπξγεί ην παξαπάλω πξόγξακκα example.py : Να πψο ιεηηνπξγεί ην πξφγξακκα. Πξψηα, εθρσξνχκε ηελ ηηκή ηεο θπξηνιεθηηθήο ζηαζεξάο 3 ζηε κεηαβιεηή i κε ηε ρξήζε ηνπ ηειεζηή εθρψξεζεο (=). Απηή ε γξακκή νλνκάδεηαη εληνιή (statement) δηφηη δειψλεη φηη θάηη πξέπεη λα γίλεη θαη ζηελ πεξίπησζή καο, ζπλδένπκε ην φλνκα ηεο κεηαβιεηήο i κε ηελ ηηκή 3. ηε ζπλέρεηα, εθηππψλνπκε ηελ ηηκή ηεο κεηαβιεηήο i κε ηε ρξήζε ηεο εληνιήο print ε νπνία, θπζηθά, απιά εθηππψλεη ηελ ηηκή ηεο κεηαβιεηήο ζηελ νζφλε. Μεηά πξνζζέηνπκε 2 ζηελ απνζεθεπκέλε ηηκή ηνπ i θαη απνζεθεχεηαη ελεκεξσκέλε εθ λένπ. Καηφπηλ ηελ εθηππψλνπκε θαη φπσο πεξηκέλνπκε, καο επηζηξέθεη ηελ ηηκή 5. Παξνκνίσο, εθρσξνχκε ηελ θπξηνιεθηηθή ζηαζεξά ζηε κεηαβιεηή s θαη εθηππψλνπκε ζηελ νζφλε. Σεκείωζε γηα ηνπο πξνγξακκαηηζηέο ζηαηηθώλ γιωζζώλ: Οη κεηαβιεηέο ρξεζηκνπνηνχληαη κφλν κε ηελ εθρψξεζε ζε απηέο κηαο ηηκήο. Γελ απαηηείηαη/ρξεζηκνπνηείηαη θάπνηα δήισζε (declaration) ή ν νξηζκφο ηχπνπ δεδνκέλσλ (data type definition). Page 34 of 253

35 Λνγηθέο θαη θπζηθέο γξακκέο πεγαίνπ θώδηθα Μηα θπζηθή γξακκή είλαη απηφ πνπ εζείο βιέπεηε φηαλ γξάθεηε ην πξφγξακκα. Μηα ινγηθή γξακκή είλαη απηφ πνπ βιέπεη ε Python σο κηα εληαία εληνιή. Η Python ππνζέηεη ζησπεξά φηη θάζε θπζηθή γξακκή αληηζηνηρεί ζε κηα ινγηθή γξακκή. Έλα παξάδεηγκα ινγηθήο γξακκήο είλαη κηα εληνιή φπσο print('hello World') -αλ απηή ήηαλ ζε κηα γξακκή απφ κφλε ηεο (φπσο ηε βιέπεηε ζηνλ επεμεξγαζηή θψδηθα), ηφηε απηή αληηζηνηρεί επίζεο ζε κηα θπζηθή γξακκή. Έκκεζα, ε Python ελζαξξχλεη ηε ρξήζε κηαο θαη κφλν εληνιήο αλά γξακκή ψζηε ν θψδηθαο λα είλαη επαλάγλσζηνο. Δάλ ζέιεηε λα θαζνξίζεηε πεξηζζφηεξεο απφ κία ινγηθέο γξακκέο ζε κηα κφλν θπζηθή γξακκή, ηφηε πξέπεη λα ην νξίζεηε ξεηά κε ηε ρξήζε ηνπ εξσηεκαηηθνχ (semicolon) (;) θαη δείρλεη ην ηέινο κηαο ινγηθήο γξακκήο/εληνιήο. Αθνινπζεί παξάδεηγκα : i = 5 print(i) Δίλαη ην ίδην κε i = 5; print(i); θαη ην ίδην κπνξεί λα γξαθηεί σο i = 5; print(i); ή θαη i = 5; print(i) Χζηφζν, ζπλεζίδεηαη λα πξνγξακκαηίδεηε γξάθνληαο κία θαη κφλν ινγηθή γξακκή ζε κηα εληαία θπζηθή γξακκή κφλν. Υξεζηκνπνηήζηε πεξηζζφηεξεο θπζηθέο γξακκέο γηα κία κφλν ινγηθή γξακκή, αλ απηή είλαη φλησο κεγάιε. Η ηδέα είλαη λα απνθεπρζεί ην εξσηεκαηηθφ, φζν ην δπλαηφλ πεξηζζφηεξν, ψζηε ν θψδηθαο λα είλαη επαλάγλσζηνο. ηελ πξαγκαηηθφηεηα, νη έκπεηξνη πξνγξακκαηηζηέο ηεο Python δελ ρξεζηκνπνηνχλ πνηέ εξσηεκαηηθφ ζε έλα πξφγξακκα Python. Page 35 of 253

36 o Αθνινπζεί έλα παξάδεηγκα ζχληαμεο κηαο ινγηθήο γξακκήο πνπ εθηείλεηαη ζε πνιιέο θπζηθέο γξακκέο. Απηφ αλαθέξεηαη σο explicit line joining. Οκνίσο print\ (i) Δίλαη ην ίδην κε print(i) Μεξηθέο θνξέο, ππάξρεη κηα ζησπεξή παξαδνρή φπνπ δε ρξεηάδεηαη λα ρξεζηκνπνηήζεηε κηα αξηζηεξή πιάγηα θάζεην. Απηή είλαη ε πεξίπησζε φπνπ ε ινγηθή γξακκή ρξεζηκνπνηεί παξελζέζεηο (), αγθχιεο [] ή άγθηζηξα {}. Απηφ αλαθέξεηαη σο implicit line joining. Δζνρή θώδηθα (Indentation) Ο θελφο ρψξνο είλαη ζεκαληηθφο ζηελ Python. Πξάγκαηη, ο κενόρ σαπακηήπαρ ζηην απσή ηηρ γπαμμήρ είναι ζημανηικόρ. Αςηό αποκαλείηαι εζοσή κώδικα. Οη αξρηθνί θελνί ραξαθηήξεο (θελά θαη ζηεινζέηεο) ζηελ αξρή ηεο ινγηθήο γξακκήο θαζνξίδνπλ ην επίπεδν εζνρήο ηεο ινγηθήο γξακκήο, θαη απηφ κε ηε ζεηξά ηνπ πξνζδηνξίδεη ηελ νκαδνπνίεζε ησλ εληνιψλ. Απηφ ζεκαίλεη φηη νη εληνιέο πνπ πάλε καδί πξέπεη θαη νθείινπλ λα έρνπλ ην ίδην επίπεδν εζνρήο. Κάζε ηέηνηα νκάδα εληνιψλ, θαιείηαη πινθάδα (block). Page 36 of 253

37 ΠΡΟΟΧΗ! Είναι πολφ ςθμαντικό να κυμόμαςτε ότι οι λάκοσ εςοχζσ μπορεί να προκαλζςουν ςφάλματα Αθνινπζεί παξάδεηγκα : θάικα! Πξνζέμηε έλα δηάζηεκα ζηελ αξρή ηεο γξακκήο Πξνζέμηε ηνλ θελφ ραξαθηήξα ζηελ αξρή ηεο δεχηεξεο γξακκήο. Σν ζθάικα πνπ ππνδεηθλχεη ε Python καο ιέεη φηη ε ζχληαμε ηνπ πξνγξάκκαηνο είλαη άθπξε, δειαδή, ν θψδηθαο ηνπ πξνγξάκκαηνο δε γξάθηεθε ζσζηά. Πνπ ζεκαίλεη γηα ζαο φηη δε κπνξείηε απζαίξεηα λα μεθηλάηε λέεο πινθάδεο εληνιψλ (εθηφο θπζηθά απφ ηελ πξνεπηιεγκέλε θχξηα πινθάδα πνπ ρξεζηκνπνηνχζαηε ζπλέρεηα). Πξνζνρή : ηελ Python κεηξάλε νη ραξαθηήξεο δηαζηήκαηνο!! Αλ ινηπφλ ζπλαληήζεηε πνηέ ην αθφινπζν ζθάικα : IndentationError : expected an indented block εκαίλεη φηη μεράζαηε λα ηνπνζεηήζεηε ηνπο ραξαθηήξεο δηαζηήκαηνο. Υξήζε ηεο εζνρήο Να κελ αλακηγλχεηε ζηεινζέηεο θαη θελά ζηηο εζνρέο δηφηη ζα πξνθιεζεί αζπκβαηφηεηα κεηαμχ δηαθνξεηηθψλ ιεηηνπξγηθψλ. αο ζπληζηψ ηε ρξήζε είηε ελφο κνλνχ ζηεινζέηε (1 tab) ή ηεζζάξσλ θελψλ (4 spaces) γηα θάζε επίπεδν εζνρήο. Δπηιέμηε έλα απφ ηα δχν ζηπι εζνρψλ. Καη ζεκαληηθφηεξν είλαη λα επηιέμεηε έλα θαη λα ην ρξεζηκνπνηείηε ζηαζεξά, δειαδή ζπλεζίζηε απηφ ην ζηπι κφλν. εκείσζε Η Python ζα έρεη πάληα εζνρή γηα πινθάδεο θαη πνηέ αγθχιεο (braces). Page 37 of 253

38 Σειεζηέο θαη εθθξάζεηο Οη πεξηζζφηεξεο εληνιέο πνπ γξάθεηε ζα πεξηέρνπλ εθθξάζεηο (expressions). Έλα απιφ παξάδεηγκα κίαο έθθξαζεο είλαη Μία έθθξαζε κπνξεί λα δηαρσξηζηεί ζε ηειεζηέο (operators) θαη ηειεζηένπο (operands). Οη ηειεζηέο είλαη ιεηηνπξγίεο πνπ θάλνπλ θάηη θαη κπνξνχλ λα αλαπαξαζηαζνχλ κε ζχκβνια φπσο ην + ή κε εηδηθέο ιέμεηο-θιεηδηά. Οη ηειεζηέο απαηηνχλ θάπνηα δεδνκέλα πάλσ ζηα νπνία ζα ιεηηνπξγήζνπλ θαη απηά ηα δεδνκέλα νλνκάδνληαη ηειεζηένη. ηε ζπγθεθξηκέλε πεξίπησζε, νη ηειεζηένη είλαη ην 3 θαη ην 4. Σειεζηέο Αο δνχκε ηνπο ηειεζηέο θαη ηε ρξήζε ηνπο: Μπνξείηε λα βξείηε ηελ ηηκή ησλ εθθξάζεσλ πνπ δίλνληαη ζηα παξαδείγκαηα ρξεζηκνπνηψληαο ην δηεξκελεπηή δηαδξαζηηθά. Γηα παξάδεηγκα, γηα ηνλ έιεγρν ηεο έθθξαζεο 3 + 4, ρξεζηκνπνηήζηε ηελ θνλζφια ηνπ δηαδξαζηηθνχ δηεξκελεπηή ηεο Python. ηε ζπλέρεηα παξαζέησ έλαλ νινθιεξσκέλν πίλαθα ησλ ηειεζηψλ κε εμήγεζε ηνπ θαζέλα θαη παξαδείγκαηα. Page 38 of 253

39 Σειεζηήο λνκα Δμήγεζε Παξαδείγκαηα + πλ Πξνζζέηεη δχν αληηθείκελα. Σν δίλεη 5. Σν 'a' + 'b' δίλεη 'ab'. - Μείνλ Δίηε δίλεη έλαλ αξλεηηθφ αξηζκφ, ή αθαηξεί έλαλ αξηζκφ απφ έλαλ άιιν. Σν -2.5 δίλεη έλαλ αξλεηηθφ αξηζκφ. Σν δίλεη * Δπί Γίλεη ην γηλφκελν δχν αξηζκψλ ή κηα ζπκβνινζεηξά (string) επαλαιακβαλφκελε ηφζεο θνξέο. ** Γχλακε Δπηζηξέθεη ην x πςσκέλν ζηε δχλακε y. Page 39 of Σν 3 * 3 δίλεη 9. Σν 'la' * 3 δίλεη 'lalala'. Σν 3 ** 2 δίλεη 9 (δειαδή 3 * 3 ). / Γηα Γηαηξεί ην x κε ην y. Σν 12/4 δίλεη 3 // Γηαίξεζε ζηξνγγπινπνη εκέλε πξνο ηα θάησ (Floor Division) Δπηζηξέθεη ηνλ θνληηλφηεξν (πξνο ηα θάησ) αθέξαην ζην πειίθν. % Τπφινηπν Δπηζηξέθεη ην ππφινηπν ηεο δηαίξεζεο. << Αξηζηεξή κεηάζεζε >> Γεμηά κεηάζεζε Μεηαζέηεη ηα δπαδηθά ςεθία (bits) ηνπ αξηζκνχ πξνο ηα αξηζηεξά θαηά ην πιήζνο ησλ ζέζεσλ πνπ θαζνξίζηεθε. (Κάζε αξηζκφο αλαπαξίζηαηαη ζηε κλήκε κε δπαδηθά ςεθία (bits, binary digits) -δειαδή κε 0 θαη 1). Μεηαζέηεη ηα bits ηνπ αξηζκνχ πξνο ηα δεμηά θαηά ην πιήζνο ησλ ζέζεσλ πνπ θαζνξίζηεθε. Σν 4 // 3 δίλεη 1. Σν 8 % 3 δίλεη 2. Σν % 2.25 δίλεη 1.5. To 2 << 2 δίλεη 8. Σν 2 αλαπαξηζηάηαη σο ζε bits σο 10. Η κεηάζεζε πξνο ηα αξηζηεξά θαηά 2 bits καο δίλεη 1000 πνπ παξηζηάλεη ην δεθαδηθφ 8. To 11 >> 1 δίλεη 5. Σν 11 αλαπαξηζηάηαη ζε bits σο 1011 πνπ φηαλ κεηαηεζνχλ δεμηά θαηά 1 bit καο δίλεη 101 ην νπνίν είλαη ην δεθαδηθφ 5.

40 & Γπαδηθφ ΚΑΙ Γπαδηθφ ΚΑΙ ησλ αξηζκψλ. Σν 5 & 3 δίλεη 1. Γπαδηθφ Ή Γπαδηθφ Ή ησλ αξηζκψλ Σν 5 3 δίλεη 7. ^ Γπαδηθφ απνθιεηζηηθφ Η Γπαδηθφ απνθιεηζηηθφ Ή ησλ αξηζκψλ Σν 5 ^ 3 δίλεη 6. ~ Γπαδηθή αληηζηξνθή < Μηθξφηεξν απφ > Μεγαιχηεξν απφ Σν δπαδηθφ αληίζηξνθν ηνπ x είλαη -(x+1). Δπηζηξέθεη ην αλ ην x είλαη κηθξφηεξν απφ ην y. ινη νη ηειεζηέο ζχγθξηζεο επηζηξέθνπλ True (Αιεζήο) ή False (Φεπδήο). εκεηψζηε νηη ηα νλφκαηα απηά μεθηλνχλ κε θεθαιαίν. Δπηζηξέθεη ην αλ ην x είλαη κεγαιχηεξν απφ ην y. <= Μηθξφηεξν ή ίζν Δπηζηξέθεη ην αλ ην x είλαη κηθξφηεξν απφ ή ίζν κε ην y. >= Μεγαιχηεξν ή Δπηζηξέθεη ην αλ ην x είλαη ίζν κεγαιχηεξν απφ ή ίζν κε ην y. == Ίζν πγθξίλεη αλ ηα αληηθείκελα είλαη ίζα.!= Γηαθνξεηηθφ πγθξίλεη αλ ηα αληηθείκελα ΓΔΝ είλαη ίζα. not Λνγηθφ ΟΥΙ Αλ ην x είλαη True,επηζηξέθεη False. Αλ ην x είλαη False, επηζηξέθεη True and Λνγηθφ ΚΑΙ Σν x and y επηζηξέθεη False αλ ην x είλαη False, αιιηψο επηζηξέθεη ππνινγίδεη θαη Page 40 of 253 Σν ~5 δίλεη -6. Σν 5 < 3 δίλεη False θαη ην 3 < 5 δίλεη True. Οη ζπγθξίζεηο κπνξνχλ λα ζπλδπαζηνχλ αιπζηδσηά θαηά βνχιεζε: Σν 3 < 5 < 7 δίλεη True. Σν 5 > 3 επηζηξέθεη True. Αλ θαη νη δχν ηειεζηένη είλαη αξηζκνί, πξψηα κεηαηξέπνληαη ζε έλαλ θνηλφ ηχπν. Αιιηψο, επηζηξέθεη πάληα False. Σν x = 3; y = 6; x <= y επηζηξέθεη True. Σν x = 4; y = 3; x >= 3 επηζηξέθεη True. Σν x = 2; y = 2; x == y επηζηέθεη True. Σν x = 'str'; y = 'str'; x == y επηζηξέθεη False. Σν x = 'str'; y = 'str'; x == y επηζηξέθεη True. Σν x = 2; y = 3; x!= y επηζηξέθεη True. x = True; not x επηζηξέθεη False. x = False; y = True; x and y επηζηξέθεη False

41 επηζηξέθεη ηελ ηηκή ηνπ y. or Λνγηθφ Ή Αλ ην x είλαη True, επηζηξέθεη True, αιιηψο ππνινγίδεη θαη επηζηξέθεη ηελ ηηκή ηνπ y. αθνχ ην x είλαη False. ε απηή ηελ πεξίπησζε, ε Python δε ζα ειέγμεη ηελ ηηκή ηνπ y αθνχ γλσξίδεη νηη ε αξηζηεξή πιεπξά ηεο έθθξαζεο 'and' είλαη False πνπ ππνδειψλεη νηη νιφθιεξε ε έθθξαζε ζα είλαη False αλεμάξηεηα απφ ηηο άιιεο ηηκέο. Απηή ε ηερληθή απνθαιείηαη short-circuit evaluation. Σν x = True; y = False; x or y επηζηξέθεη True. Η Short-circuit evaluation εθαξκφδεηαη θαη εδψ. πληόκεπζε γηα καζεκαηηθέο πξάμεηο θαη ηελ αλάζεζε Δίλαη ζπλήζεο θαηλφκελν ε εθηέιεζε κίαο καζεκαηηθήο πξάμεο ζηα πεξηερφκελα κίαο κεηαβιεηήο θαη ζηε ζπλέρεηα ε αλάζεζε ηνπ απνηειέζκαηνο πίζσ ζηε κεηαβιεηή, γη' απηφ ππάξρεη κία ζπληφκεπζε γηα απηνχ ηνπ είδνπο ηηο εθθξάζεηο. Μπνξείο λα γξάςεηο ην: a = 2; a = a * 3 ωσ a = 2; a *= 3 Παξαηήξεζε η δήλυζη μεηαβληηή = μεηαβληηή ηέλεζη έκθπαζη γίνεηαι μεηαβληηή ηέλεζη = έκθπαζη. εηξά ππνινγηζκνύ (πξνηεξαηόηεηα ηειεζηώλ) Αο ππνζέζνπκε φηη έρνπκε κία έθθξαζε πρ * 4. Πνην γίλεηαη πξψηα, ε πξφζζεζε ή ν πνιιαπιαζηαζκφο; Σα καζεκαηηθά καο ιέλε όηη πξώηα πξέπεη λα γίλεη ν πνιιαπιαζηαζκόο. Απηό ζεκαίλεη όηη ν ηειεζηήο ηνπ πνιιαπιαζηαζκνύ έρεη πςειόηεξε πξνηεξαηόηεηα από ηνλ ηειεζηή ηεο πξόζζεζεο. Page 41 of 253

42 Ο πίλαθαο πνπ αθνινπζεί καο δίλεη ηνλ πίλαθα πξνηεξαηνηήησλ γηα ηελ Python, απφ ηε ρακειφηεξε πξνο ηελ πςειφηεξε πξνηεξαηφηεηα. Απηφ ζεκαίλεη φηη ζε κία δεδνκέλε έθθξαζε, ε Python ζα ππνινγίζεη ηνπο ηειεζηέο θαη ηηο εθθξάζεηο πνπ βξίζθνληαη ρακειφηεξα ζηνλ πίλαθα πξηλ απφ απηνχο πνπ βξίζθνληαη ςειφηεξα. Ο παξαθάησ πίλαθαο, αληηγξακκέλνο απφ ην εγρεηξίδην αλαθνξάο ηεο Python, παξέρεηαη ράξηλ πιεξφηεηαο. Δίλαη πνιχ θαιχηεξν λα ρξεζηκνπνηείηε παξελζέζεηο γηα λα νκαδνπνηείηε ζσζηά ηειεζηέο θαη ηειεζηένπο ψζηε λα νξίζεηε μεθάζαξα ηελ πξνηεξαηφηεηα. Έηζη ην πξφγξακκα γίλεηαη πην επαλάγλσζην. Σειεζηήο Πεξηγξαθή Lambda Έθθξαζε Lambda Or Λνγηθφ Ή And Λνγηθφ ΚΑΙ not x Λνγηθφ ΟΥΙ in, not in Έιεγρνη ζπκκεηνρήο is, is not Έιεγρνη ηαπηφηεηαο <, <=, >, >=,!=,== πγθξίζεηο Γπαδηθφ Ή ^ Γπαδηθφ απνθιεηζηηθφ Ή & Γπαδηθφ ΚΑΙ <<, >> Μεηαζέζεηο +, - Πξφζζεζε θαη αθαίξεζε *, /, //, % Πνιιαπιαζηαζκφο, Γηαίξεζε, Γηαίξεζε ζηξνγγπινπνηεκέλε πξνο ηα θάησ, Τπφινηπν +x, -x Θεηηθφ, Αξλεηηθφ ~x Γπαδηθφ ΟΥΙ ** Όςσζε ζε δχλακε x.attribute Αλαθνξά ζε ραξαθηεξηζηηθφ x[index] Subscription x[index1:index2] Κνκκάηηαζκα (Slicing) f(arguments...) Κιήζε ζπλάξηεζεο (expressions,...) πλέλσζε ή εκθάληζε πιεηάδαο [expressions,...] Πξνβνιή ιίζηαο {key:datum,...} Πξνβνιή ιεμηθνχ εκείσζε Σειεζηέο κε ηελ ίδηα πξνηεξαηφηεηα βξίζθνληαη ζηελ ίδηα γξακκή ζηνλ παξαπάλσ πίλαθα. Γηα παξάδεηγκα, ην + θαη ην - έρνπλ ηελ ίδηα πξνηεξαηφηεηα. Page 42 of 253

43 Αθέξαηνη Μπνξνχκε λα ηππψλνπκε αθεξαίνπο ζε δηάθνξα ζπζηήκαηα, κε ηελ ρξήζε ησλ ηειεζηψλ : 1) d : Γηα δεθαδηθνχο αξηζκνχο 2) b : Γηα δπαδηθνχο αξηζκνχο (ή ελαιιαθηηθά bin()) 3) o : Γηα νθηαδηθνχο αξηζκνχο (ή ελαιιαθηηθά oct()) 4) x : Γηα δεθαεμαδηθνχο αξηζκνχο (ή ελαιιαθηηθά hex ()) Πξνζζέησληαο ηνλ ραξαθηήξα ηεο δίεζεο, εθηππψλεηαη επηπιένλ πιεξνθνξία πνπ δείρλεη ζε πνην ζχζηεκα αλήθεη ν εθηππσκέλνο αξηζκφο. Page 43 of 253

44 Αξηζκνί θηλεηήο ππνδηαζηνιήο Γηα ηελ κνξθνπνίεζε αξηζκψλ θηλεηήο ππνδηαζηνιήο, ρξεζηκνπνηνχκε ηνλ πξνζδηνξηζηή (specifier) f. Μπνξνχκε λα πνχκε πφζα ςεθία επηζπκνχκε λα εθηππσζνχλ απφ ην δεθαδηθφ κέξνο. Δπίζεο, κε ηελ ρξήζε ηνπ ηειεζηή +, θαίλεηαη ην πξφζεκν θαη ζηελ πεξίπησζε ζεηηθψλ αξηζκψλ. Αθνινπζνχλ παξαδείγκαηα : Page 44 of 253

45 Αιιαγή ηεο ζεηξάο ππνινγηζκνύ Γηα λα θάλνπκε ηηο εθθξάζεηο πην επαλάγλσζηεο, κπνξνχκε λα ρξεζηκνπνηήζνπκε παξελζέζεηο. Γηα παξάδεηγκα, ην 2 + (4 * 3) είλαη ζίγνπξα πην εχθνιν λα ην θαηαιάβνπκε απφ ην * 3 ην νπνίν απαηηεί ηε γλψζε ησλ πξνηεξαηνηήησλ ησλ ηειεζηψλ. πσο θαη φια ηα άιια, νη παξελζέζεηο ζα πξέπεη λα ρξεζηκνπνηνχληαη κε ζχλεζε (κελ ην παξαθάλεηε) θαη λα κελ είλαη άρξεζηεο (φπσο π.ρ. ζην 2 + (4 + 3)). Τπάξρεη έλα επηπιένλ πιενλέθηεκα ζηε ρξήζε παξελζέζεσλ -καο βνεζά λα αιιάμνπκε ηε ζεηξά ππνινγηζκνχ. Γηα παξάδεηγκα, αλ ζέιεηε λα γίλεη ε πξφζζεζε πξηλ ηνλ πνιιαπιαζηαζκφ ζε κία έθθξαζε, ηφηε κπνξείηε λα γξάςεηε θάηη φπσο (2 + 3) * 4. πζρέηηζε (Associativity) Οη ηειεζηέο ζπλήζσο ζπζρεηίδνληαη απφ ηα αξηζηεξά πξνο ηα δεμηά δειαδή νη ηειεζηέο κε ηελ ίδηα πξνηεξαηφηεηα ππνινγίδνληαη απφ ηα αξηζηεξά πξνο ηα δεμηά. Γηα παξάδεηγκα, ην ππνινγίδεηαη σο (2 + 3) + 4. Μεξηθνί ηειεζηέο φπσο νη ηειεζηέο αλάζεζεο έρνπλ ζπζρέηηζε απφ ηα δεμηά πξνο ηα αξηζηεξά δει. ην a = b = c αληηκεησπίδεηαη σο a = (b = c). Δθθξάζεηο (Expressions) Αθνινπζεί έλα παξάδεηγκα : Page 45 of 253

46 Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Σν κήθνο (length) θαη ην πιάηνο (breadth) ηνπ νξζνγσλίνπ απνζεθεχνληαη ζε κεηαβιεηέο κε ην ίδην φλνκα. Υξεζηκνπνηνχκε απηέο ηηο κεηαβιεηέο γηα λα ππνινγίζνπκε ην εκβαδφλ θαη ηελ πεξίκεηξν ηνπ νξζνγσλίνπ κε ηε βνήζεηα εθθξάζεσλ. Απνζεθεχνπκε ην απνηέιεζκα ηεο έθθξαζεο length * breadth ζηε κεηαβιεηή (variable) area θαη έπεηηα ην ηππψλνπκε ρξεζηκνπνηψληαο ηε ζπλάξηεζε print. ηε δεχηεξε πεξίπησζε, ρξεζηκνπνηνχκε απ' επζείαο ηελ ηηκή ηεο έθθξαζεο 2 * (length + breadth) ζηε ζπλάξηεζε print. Δπίζεο, παξαηεξήζηε ηνλ ηξφπν κε ηνλ νπνίν ε Python "ηππψλεη φκνξθα" ηα απνηειέζκαηα. Παξ' φιν πνπ δελ έρνπκε θαζνξίζεη έλα θελφ αλάκεζα ζην 'Area is' θαη ζηε κεηαβιεηή area, ε Python ην ηνπνζεηεί γηα εκάο έηζη ψζηε λα πάξνπκε κία πην θαζαξή φκνξθε έμνδν θαη ην πξφγξακκα είλαη πνιχ πην επαλάγλσζην κε απηφ ηνλ ηξφπν (αθνχ δε ρξεηάδεηαη λα αλεζπρνχκε γηα ηα θελά ζηηο ζπκβνινζεηξέο πνπ ρξεζηκνπνηνχκε γηα έμνδν). Απηφ είλαη έλα παξάδεηγκα ηνπ πψο ε Python θάλεη ηε δσή ηνπ πξνγξακκαηηζηή εχθνιε. Αλάζεζε ηηκώλ ζε κεηαβιεηέο Οη κεηαβιεηέο ζηελ python δελ έρνπλ ηχπνπο. Απηφ ζεκαίλεη φηη ζε κηα κεηαβιεηή κπνξεί λα γίλεη εθρψξεζε κηαο ηηκήο ρσξίο λα καο ελδηαθέξεη αλ πξφθεηηαη γηα αθέξαην, πξαγκαηηθφ, αιθαξηζκεηηθφ, ιίζηα, αληηθείκελν, θιπ. Γξάθνπκε ην φλνκα ηεο κεηαβιεηήο θαη ε ηηκή αθνινπζεί κεηά ην ζχκβνιν =. ην παξάδεηγκα πνπ Page 46 of 253

47 αθνινπζεί κπνξείηε λα δείηε έλα πξνγξακκαηάθη python ην νπνίν ππνινγίδεη ην εκβαδφ ηξηγψλνπ. Αλάζεζε πνιιαπιώλ ηηκώλ & «Φπρεδειηθή αλάζεζε» ηηκώλ Η python καο δίλεη ηε δπλαηφηεηα λα αλαζέζνπκε ηελ ίδηα ηηκή ζε πνιιέο κεηαβιεηέο ρξεζηκνπνηψληαο κία κφλνλ δήισζε. Παξαζέησ έλα πξφγξακκα πνπ εμεγεί ηα παξαπάλσ : Δπίζεο καο δίλεη ηνλ παξαθάησ, άθξσο «ςπρεδειηθφ» ηξφπν δήισζεο ηηκψλ. Page 47 of 253

48 πνπ νη κεηαβιεηέο παίξλνπλ θαηά ζεηξά ηηο ηηκέο πνπ αθνινπζνχλ. ην παξάδεηγκά καο δειαδή ε κεηαβιεηή x ζα πάξεη ηελ ηηκή 3 θαη ε y ηελ ηηκή 20. ύλζεηoi (κηγαδηθνί) αξηζκνί Η ππνζηήξημε κηγαδηθψλ αξηζκψλ είλαη θάηη πνπ δελ βιέπνπκε ζπρλά ζε κηα γιψζζα πξνγξακκαηηζκνχ. Η python καο επηηξέπεη λα νξίζνπκε έλαλ κηγαδηθφ κε έλαλ απφ ηνπο δχν ηξφπνπο πνπ κπνξείηε λα δείηε ζην παξάδεηγκα πνπ αθνινπζεί, λα ηνλ απνζπλζέζνπκε ζε πξαγκαηηθφ θαη θαληαζηηθφ κέξνο θαη λα ππνινγίζνπκε ην κέηξν ηνπ. Δίλαη επίζεο εθηθηέο πξάμεηο κεηαμύ ησλ κηγαδηθώλ. πλέλσζε αιθαξηζκεηηθώλ ηελ python κπνξνχκε λα ζπλελψζνπκε αιθαξηζκεηηθά κε 3 ηξφπνπο: Page 48 of 253

49 1) Σα αιθαξηζκεηηθά ζε παξάζεζε ρσξηζκέλα κε ηνλ ραξαθηήξα + 2) Σα αιθαξηζκεηηθά απιά ζε παξάζεζε 3) Με ρξήζε ηεο ζπλάξηεζεο.strip() string1 = "Are you suggesting" string2 = "coconuts " print( string1 + " " + string2 + "migrate?") print("are you suggesting" " coconuts migrate?") print('are you suggesting'.strip() + ' coconuts migrate?') Σν αιθαξηζκεηηθό σο πίλαθαο ραξαθηήξσλ Έλα αιθαξηζκεηηθφ ζηελ Python κπνξεί θαλείο λα ην δηαρεηξηζηεί θαη σο πίλαθα ραξαθηήξσλ (ιεηηνπξγηθφηεηα πνπ παξέρεηαη θαη απφ άιιεο γιψζζεο φπσο γηα παξάδεηγκα ε C). Γηα λα θαηαιάβνπκε ιίγν θαιχηεξα γηαηί αθξηβψο κηιάκε αλ έρνπκε ην αιθαξηζκεηηθφ test ζαλ πίλαθαο ραξαθηήξσλ απηφ αλαπαξίζηαηαη σο: T e S t Γειαδή αλ ε κεηαβιεηή καο πνπ πεξηέρεη ην αιθαξηζκεηηθφ θαιείηαη mystring ηφηε δίλνληαο ζηνλ δηεξκελεπηή ηεο Python mystring[0] ζα πξέπεη λα καο επηζηξέςεη ηνλ ραξαθηήξα t. Αο δνχκε ιίγν πην αλαιπηηθά ηη ελέξγεηεο καο επηηξέπεη ε Python λα εθηειέζνπκε ζε έλαλ πίλαθα ραξαθηήξσλ. text = "Are you suggesting coconuts migrate?" text[8] text[0:3] text[4:7] text[:19] text[19:] Γεκηνπξγνχκε ην αιθαξηζκεηηθφ text. Δλ ζπλέρεηα, νη γξακκέο θψδηθα πνπ ζαο δίλνπκε έρνπλ ηα εμήο απνηειέζκαηα (θαηά ζεηξά εκθάληζεο): Page 49 of 253

50 Δπηζηξέθεηαη ν ραξαθηήξαο πνπ βξίζθεηαη ζηελ ζέζε 8 (δειαδή ν 9νο θαηά ζεηξά ραξαθηήξαο ηνπ αιθαξηζκεηηθνχ αθνχ ε αξίζκεζε ησλ ζέζεσλ μεθηλά απφ ην 0) Δπηζηξέθνληαη νη ραξαθηήξεο απφ ηε ζέζε 0 σο ηελ 3 Δπηζηξέθνληαη νη ραξαθηήξεο απφ ηε ζέζε 4 σο ηελ 7 Δπηζηξέθνληαη νη ραξαθηήξεο απφ ηε ζέζε 19 θαη πξηλ Δπηζηξέθνληαη νη ραξαθηήξεο απφ ηε ζέζε 19 θαη κεηά Δθηφο απφ ζεηηθνχο δείθηεο ζέζεσλ κπνξνχκε λα έρνπκε θαη αξλεηηθνχο. text = "Are you suggesting coconuts migrate?" text[-1] text[-2] text[-3:] text[:-10] text[-0] Καη πάιη θαηά ζεηξά εκθάληζεο: Δπηζηξέθεηαη ν ηειεπηαίνο ραξαθηήξαο Δπηζηξέθεηαη ν πξν-ηειεπηαίνο ραξαθηήξαο Δπηζηξέθνληαη νη 3 ηειεπηαίνη ραξαθηήξεο Δπηζηξέθνληαη νη ραξαθηήξεο απφ ηελ δέθαηε, απφ ην ηέινο, ζέζε θαη πξηλ Δπηζηξέθεηαη ν πξψηνο ραξαθηήξαο [ην -0 ζεσξείηαη ίζν κε ην 0 ] Μπνξνχκε λα ζπλδπάζνπκε ηελ ζπλέλσζε αιθαξηζκεηηθψλ κε ηνπο πίλαθεο ραξαθηήξσλ σο εμήο: 'Do ' + text[4:] Η ζπγθεθξηκέλε γξακκή θψδηθα ζπλελψλεη ην αιθαξηζκεηηθφ Do κε ηνπο ραξαθηήξεο ηνπ αιθαξηζκεηηθνχ ηεο κεηαβιεηήο text απφ ηελ ηέηαξηε ζέζε θαη κεηά. Hacks πηλάθσλ ραξαθηήξσλ Θεσξνχκε ην ίδην αιθαξηζκεηηθφ : text = "Are you suggesting coconuts migrate?" text[1:2000] Page 50 of 253

51 text[120:] text[5:4] text[-100:] Καηά ζεηξά εκθάληζεο: Παίξλνπκε ην θνκκάηη ηνπ πίλαθα ραξαθηήξσλ ζην νπνίν ππάξρεη πιεξνθνξία Παίξλνπκε (θελφ ραξαθηήξα) Παίξλνπκε (θελφ ραξαθηήξα) Παίξλνπκε ην θνκκάηη ηνπ πίλαθα ραξαθηήξσλ ζην νπνίν ππάξρεη πιεξνθνξία Απφ ηα παξαπάλσ ζπκπεξαίλνπκε δειαδή πσο φηαλ νη ζέζεηο πνπ δεηνχκε δελ ππάξρνπλ ή δελ έρνπλ πιεξνθνξία ε Python καο επηζηξέθεη έλαλ θελφ ραξαθηήξα. ΠΡΟΟΥΗ: Αλ δεηήζνπκε ηνλ ραξαθηήξα κηαο ζέζεο κε αξλεηηθό δείθηε πνπ βξίζθεηαη έμσ από ηα όξηα ηνπ αιθαξηζκεηηθνύ καο ηόηε ε Python ζα καο επηζηξέςεη error. Γηα παξάδεηγκα, γηα ην αιθαξηζκεηηθό Are you suggesting coconuts migrate? Η εληνιή text[-50] ζα πξνθαιέζεη ζθάικα. Δηζαγσγή Unicode ραξαθηήξα Η εηζαγσγή Unicode ραξαθηήξσλ γίλεηαη ζηελ Python κε ηε ρξήζε ηνπ \u αθνινπζνχκελν απφ ηνλ θσδηθφ ηνπ ραξαθηήξα. Γηα παξάδεηγκα: print( "Are\u0020you suggesting..." ) Θα εκθαλίζεη ζηελ θνλζφια καο: Are you suggesting Μεηαθξάδνληαο ην \u0020 σο ηνλ θελφ ραξαθηήξα. Σν κήθνο ελόο αιθαξηζκεηηθνύ Σν κήθνο ελφο αιθαξηζκεηηθνχ κπνξνχκε λα ην αλαθηήζνπκε ρξεζηκνπνηψληαο ηελ ζπλάξηεζε len() φπσο θαίλεηαη παξαθάησ: len(text) Λίζηεο Οη ιίζηεο είλαη κηα πνιχ ελδηαθέξνπζα θαη ζεκαληηθή δνκή πνπ πξνζθέξεη ε Python. αλ δνκή δεδνκέλνπ ζπλαληάηαη ζε πνιιέο γιψζζεο πξνγξακκαηηζκνχ θαη απνηειεί, φπσο δηαηζζεηηθά θαηαιαβαίλεη θαλείο κηα ζπιινγή πξαγκάησλ. Page 51 of 253

52 ηελ Python δειψλνπκε κηα ιίζηα πεξηθιείνληαο ηα αληηθείκελά ηεο ζε ηεηξαγσληθέο αγθχιεο [,,, ]. Γελ είλαη απαξαίηεην λα δειψζνπκε εμ αξρήο φια ηα αληηθείκελα πνπ ζέινπκε λα πεξηιακβάλεη ε ιίζηα καο. Δπίζεο, ιφγσ ηνπ φηη ζηελ Python δελ δειψλνπκε ηχπνπο δεδνκέλσλ νη ιίζηεο καο κπνξνχλ λα απνηεινχληαη απφ αληηθείκελα δηαθνξεηηθά κεηαμχ ηνπο (αθεξαίνπο, πξαγκαηηθνχο, αιθαξηζκεηηθά, θ.ν.θ.).αο δνχκε κεξηθά παξαδείγκαηα:έζησ ε ιίζηα mylist: mylist = ['monty', 'python', 999, 222] mylist mylist[0] mylist[-1] mylist[1:-1] Καηά ζεηξά νη παξαπάλσ εληνιέο έρνπλ ηα εμήο απνηειέζκαηα: Δκθαλίδεηαη ε ιίζηα φπσο έρεη δεισζεί Δκθαλίδεηαη ην πξψην ζηνηρείν ηεο ιίζηαο Δκθαλίδεηαη ην ηειεπηαίν ζηνηρείν ηεο ιίζηαο Δκθαλίδνληαη ηα ζηνηρεία ηεο ιίζηαο κεηαμχ ηνπ πξψηνπ θαη ηνπ ηειεπηαίνπ Δηζαγσγή ζηνηρείνπ ζε ιίζηα mylist[1:1] = ['to1', 'to2'] Η παξαπάλσ εληνιή εηζάγεη ηα ζηνηρεία to1 θαη to2 ζηελ δεχηεξε θαη ηξίηε ζέζε ηεο ιίζηαο πνπ δειψζακε ζην πξνεγνχκελν αθξηβψο παξάδεηγκα. Δλ γέλεη: mylist[x] = θάπνηνο ηύπνο δεδνκέλνπ Θα εηζάγεη ην πεξηερφκελν ηεο κεηαβιεηήο Κάπνηνο ηχπνο δεδνκέλνπ ζηελ ζέζε Υ ηεο ιίζηαο mylist Γηαγξαθή ζηνηρείνπ από ιίζηα mylist[0:2] = [] Η παξαπάλσ εληνιή ζα δηαγξάςεη ηα ηξία πξψηα ζηνηρεία ηεο ιίζηαο mylist Δλ γέλεη: mylist[x] = [] Page 52 of 253

53 Θα δηαγξάςεη ην ζηνηρείν πνπ βξίζθεηαη ζηε ζέζε Υ ηεο ιίζηαο mylist Δηζαγσγή ελόο αληηγξάθνπ ηεο ιίζηαο ζηελ αξρή ηεο mylist[:0] = mylist Η παξαπάλσ εληνιή ζα δεκηνπξγήζεη έλα αληίγξαθν ηεο ιίζηαο mylist ζηελ αξρή ηεο Καζαξηζκόο ηεο ιίζηαο mylist[:] = [] Η παξαπάλσ εληνιή ζα θαζαξίζεη ηελ ιίζηα mylist απφ ηα πεξηερφκελά ηεο Μήθνο κηαο ιίζηαο Η ζπλάξηεζε len() πνπ ρξεζηκνπνηείηαη γηα λα καο δψζεη ην κήθνο ελφο πίλαθα ραξαθηήξσλ ρξεζηκνπνηείηαη θαη ζηηο ιίζηεο κε ηνλ ίδην αθξηβψο ζθνπφ. Δπνκέλσο ε εληνιή: Len(mylist) Μαο επηζηξέθεη ηνλ αξηζκφ ησλ ζηνηρείσλ πνπ πεξηέρεη ε ιίζηα mylist Δκθσιεπκέλεο ιίζηεο Η Python ππνζηεξίδεη ηνλ φξν ηεο εκθσιεπκέλεο ιίζηαο δειαδή κηα ιίζηα κέζα ζε κηα άιιε ιίζηα. mylist2 = ["Maria", "Lena"] mylist = [mylist2, "Dimitra", "Tonia", "Python"] print( mylist ) ηνλ παξαπάλσ θψδηθα ε ιίζηα mylist2 απνηειεί ζηνηρείν ηεο ιίζηαο mylist θαη επνκέλσο αλ εθηειέζνπκε ην ζπγθεθξηκέλν ηκήκα θψδηθα ην απνηέιεζκα πνπ ζα πάξνπκε ζα είλαη: Page 53 of 253

54 Πξνζζήθε ζηνηρείνπ ζην ηέινο ηεο ιίζηαο κε ρξήζε ηεο append() Δθηειψληαο mylist.append(χ) ην ζηνηρείν Υ πξνζηίζεηαη ζην ηέινο ηεο ηξέρνπζαο κνξθήο ηεο ιίζηαο mylist. Έιεγρνο ξνήο ηα πξνγξάκκαηα πνπ γξάςακε θαη εθηειέζακε σο ηψξα, ππήξμε πάληα κηα ζεηξά εληνιψλ, ηηο νπνίεο εθηεινχζε πηζηά ε Python κε ηελ ίδηα ζεηξά. Ση γίλεηαη φκσο αλ ζέινπκε λα αιιάμνπκε ηελ ξνή εθηέιεζεο; Αλ γηα παξάδεηγκα, ζέινπκε ην πξφγξακκα λα πάξεη κεξηθέο απνθάζεηο θαη λα θάλεη δηαθνξεηηθά πξάγκαηα ππφ δηαθνξεηηθέο πξνυπνζέζεηο, φπσο π.ρ. λα εθηππψζεη θαιεκέξα ή θαιεζπέξα, αλάινγα κε ηελ ψξα; Απηφ επηηπγράλεηαη ρξεζηκνπνηψληαο εληνιέο ειέγρνπ ξνήο. Τπάξρνπλ ηξεηο εληνιέο ειέγρνπ ξνήο ζηελ Python - if, for θαη while. Page 54 of 253

55 Η εληνιή if Η εληνιή if ρξεζηκνπνηείηαη γηα λα ειεγρζεί κηα ζπλζήθε θαη εάλ (if) ε ζπλζήθε απηή είλαη αιεζήο, ηφηε εθηειείηαη έλα ζχλνιν ή πινθάδα εληνιψλ (πνπ νλνκάδεηαη ifblock), δηαθνξεηηθά (else) γίλεηαη επεμεξγαζία ελφο άιινπ ζπλφινπ εληνιψλ (πνπ νλνκάδεηαη else-block). Η ρξήζε ηνπ φξνπ else είλαη πξναηξεηηθή. Αθνινπζεί έλα απιφ παξάδεηγκα κε ηελ ρξήζε ηεο εληνιήο if. Απνζεθεχσ σο ifexample.py θαη ζηε ζπλέρεηα Run Run Module (F5) θαη δίλνληαο δηάθνξεο ηηκέο πξνθχπηεη : Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα: ην πξφγξακκα απηφ καληεχεη ν ρξήζηεο αξηζκνχο θαη ειέγρνπκε αλ αληηζηνηρνχλ ζηνλ αξηζκφ πνπ έρνπκε νξίζεη. Οξίδνπκε ηελ κεηαβιεηή number σο νπνηνλδήπνηε αθέξαην αξηζκφ επηζπκνχκε, π.ρ. 19. Όζηεξα παίξλνπκε ηελ πξφγλσζε ηνπ ρξήζηε ρξεζηκνπνηψληαο ηελ ζπλάξηεζε input(). Οη ζπλαξηήζεηο είλαη απιά Page 55 of 253

56 επαλαρξεζηκνπνηήζηκα θνκκάηηα πξνγξακκάησλ. Θα αλαθεξζνχκε εθηελέζηεξα ζε απηέο ζηε ζπλέρεηα γη' απηέο. Παξέρνπκε κηα ζπκβνινζεηξά (string) ζηελ ελζσκαησκέλε ζπλάξηεζε input, ε νπνία εθηππψλεη ζηελ νζφλε απηή ηελ ζπκβνινζεηξά θαη αλακέλεη ηελ εηζαγσγή δεδνκέλσλ απφ ηνλ ρξήζηε. Μφιηο εηζάγνπκε θάηη θαη παηήζνπκε ην πιήθηξν enter, ε ζπλάξηεζε input() επηζηξέθεη απηφ πνπ εηζάγακε σο ζπκβνινζεηξά. ηελ ζπλέρεηα, απηή ε ζπκβνινζεηξά κεηαηξέπεηαη ζε αθέξαην αξηζκφ κε ηελ ρξήζε ηεο int θη απνζεθεχεηαη ζηελ κεηαβιεηή guess. ηελ πξαγκαηηθφηεηα, ε int είλαη κηα θιάζε, άιια ην κφλν πνπ ρξεηάδεηαη λα μέξεηε πξνο ην παξφλ είλαη φηη κπνξείηε λα ηελ ρξεζηκνπνηήζεηε γηα λα κεηαηξέπεηε κηα ζπκβνινζεηξά ζ' έλαλ αθέξαην αξηζκφ (ππφ ηελ πξνυπφζεζε φηη ε ζπκβνινζεηξά πεξηέρεη έλαλ έγθπξν αθέξαην αξηζκφ ζην θείκελν). ην επφκελν βήκα ζπγθξίλνπκε ην πξνγλσζηηθφ ηνπ ρξήζηε κε ηνλ αξηζκφ πνπ επηιέμακε. Δάλ είλαη ίδηνη, εθηππψλεηαη έλα κήλπκα επηηπρίαο. εκεηψζηε φηη ρξεζηκνπνηνχκε επίπεδα εζνρψλ γηα λα δειψζνπκε ζηελ Python πνηεο εληνιέο αλήθνπλ ζε πνηα πινθάδα. Γη' απηφ ην ιφγν, νη εζνρέο είλαη πνιύ ζεκαληηθέο ζηελ Python. Παξαηεξήζε εληνιή if πεξηιακβάλεη άλσ θαη θάησ ηειεία ζην ηέινο έηζη δειψλνπκε ζηελ Python φηη αθνινπζεί κηα πινθάδα εληνιψλ. ηελ ζπλέρεηα ειέγρνπκε αλ ην πξνγλσζηηθφ είλαη κηθξφηεξν απφ ηνλ αξηζκφ καο, θη αλ λαη, πιεξνθνξνχκε ηνλ ρξήζηε φηη ε πξφγλσζή ηνπ πξέπεη λα είλαη ιίγν κεγαιχηεξε απ' απηήλ. Απηφ πνπ ρξεζηκνπνηήζακε εδψ είλαη ν φξνο elif ν νπνίνο ζηελ πξαγκαηηθφηεηα ζπλδπάδεη δχν ζπζρεηηδφκελεο εληνιέο if else-if else ζε κία εληνιή if-elif-else. Απηφ θάλεη ην πξφγξακκα επθνιφηεξν θαη κεηψλεη ηνλ αξηζκφ ησλ εζνρψλ πνπ απαηηνχληαη. Οι ενηολέρ elif και else πξέπεη επίζεο λα έρνπλ άλσ θαη θάησ ηειεία ζην ηέινο ηεο ινγηθήο γξακκήο, αθνινπζνχκελεο απφ ηηο αληίζηνηρεο πινθάδεο εληνιψλ (κε θαηάιιειεο εζνρέο, βεβαίσο). Μπνξείηε λα έρεηε άιιε κία εληνιή if εληφο ηεο πινθάδαο if (if-block) κηαο εληνιήο if θ.νθ. Απηφ απνθαιείηαη εκθσιεπκέλε εληνιή if. Είναι ςθμαντικό να κυμόμαςτε ότι τα τμιματα elif και else είναι προαιρετικά. Μια ελάχιςτθ ζγκυρθ εντολι if είναι: if True: print('ναι, εύναι αληθϋσ!') Page 56 of 253

57 Αθνχ ε Python ηειεηψζεη ηελ εθηέιεζε νιφθιεξεο ηεο εληνιήο if ζπκπεξηιακβαλνκέλσλ θαη ησλ ζπζρεηηδφκελσλ φξσλ elif θαη else, πξνρσξάεη ζηελ επφκελε εληνιή ζηελ πινθάδα πνπ πεξηέρεη ηελ εληνιή if. ηελ πεξίπησζή καο πξφθεηηαη γηα ηελ θχξηα πινθάδα κε ηελ νπνία μεθηλάεη ε εθηέιεζε ηνπ πξνγξάκκαηνο θαη ε επφκελε εληνιή είλαη print('σέινο'). Μεηά απ' απηφ ε Python βιέπεη ην ηέινο ηνπ πξνγξάκκαηνο θαη απιά ηειεηψλεη εθεί. Δεν υπάρχει εντολι switch ςτθν Python. Μπορείτε να χρθςιμοποιιςετε μια εντολι if..elif..else για να κάνετε το ίδιο πράγμα (και ςε μερικζσ περιπτϊςεισ να χρθςιμοποιιςετε ζνα λεξικό για να το κάνετε γριγορα). Η εληνιή while Η εληνιή while ζαο επηηξέπεη λα εθηειείηε επαλεηιεκκέλα κηα πινθάδα εληνιψλ, φζν κηα πξνυπφζεζε παξακέλεη αιεζέο. Η εληνιή while είλαη έλα παξάδεηγκα απηνχ πνπ απνθαιείηαη εληνιή βξφρνπ ( looping statement). Μηα εληνιή while κπνξεί λα έρεη έλαλ πξναηξεηηθφ φξν else. ηε ζπλέρεηα παξαζέησ έλα απιφ παξάδεηγκα ρξήζεο ηεο εληνιήο while. Page 57 of 253

58 Απνζεθεχσ ην πξφγξακκα σο whileexample.py, εθηειψ Run Run Module (F5) θαη πξνθχπηεη : Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : ' απηφ ην πξφγξακκα παίδνπκε αθφκα ην παηρλίδη πξφγλσζεο, αιιά ην πιενλέθηεκα είλαη φηη επηηξέπεη ζηνλ ρξήζηε λα ζπλερίζεη λα καληεχεη κέρξη λα βξεη ηνλ ζσζηφ αξηζκφ -δελ ρξεηάδεηαη δει. λα εθηειεί επαλεηιεκκέλα ην πξφγξακκα γηα θάζε πξφγλσζε, φπσο γηλφηαλ ζην πξνεγνχκελν παξάδεηγκα. Απηφ είλαη έλα πνιχ θαιφ παξάδεηγκα ηεο ρξήζεο ηεο εληνιήο while. Μεηαθηλνχκε ηηο εληνιέο input θαη if εληφο ηνπ βξφρνπ while θαη νξίδνπκε ηελ κεηαβιεηή running ζε True πξηλ ηνλ βξφρν while. Πξψηα ειέγρνπκε αλ ε κεηαβιεηή running έρεη ηελ ηηκή True θαη ζηελ ζπλέρεηα πξνρσξάκε ζηελ εθηέιεζε ηεο αληίζηνηρεο πινθάδαο while (while-block). Αθνχ εθηειεζηεί απηή ε πινθάδα, ε πξνυπφζεζε ειέγρεηαη θαη πάιη, δει. ζηελ πεξίπησζή καο ε κεηαβιεηή running. Δάλ ε ηηκή ηεο ζπλερίδεη λα είλαη true (αιεζέο), εθηειείηαη θαη πάιη νιφθιεξε ε πινθάδα while (while-block), δηαθνξεηηθά πξνρσξάκε ζηελ εθηέιεζε ηεο πξναηξεηηθήο πινθάδαο else (else-block) θαη κεηά πξνρσξάκε ζηελ επφκελε εληνιή. Η πινθάδα else εθηειείηαη φηαλ ε πξνυπφζεζε ηνπ βξφρνπ while απνθηά ηελ ηηκή False (ςεπδέο) απηφ κπνξεί λα ζπκβεί αθφκα θαη θαηά ηελ πξψηε θνξά πνπ ειέγρεηαη ε πξνυπφζεζε. Δάλ ππάξρεη έλαο φξνο else γηα έλα βξφρν while, εθηειείηαη πάληνηε, εθηφο θη αλ δηαθφςεηε ηνλ βξφρν κε ηελ εληνιή break. Οη ηηκέο True (αιεζέο) θαη False (ςεπδέο) νλνκάδνληαη Μπνχιεηνη ηχπνη (Boolean types) θαη κπνξείηε λα ζεσξήζεηε φηη αληηζηνηρνχλ ζηηο ηηκέο 1 θαη 0 αληίζηνηρα. Page 58 of 253

59 Ο βξόρνο for Η εληνιή for..in είλαη άιιε κία εληνιή βξφρνπ, ε νπνία επαναλαμβάνεηαι ζε κηα αθνινπζία αληηθεηκέλσλ, δει. εθηειείηαη ζε θάζε αληηθείκελν ζε κηα αθνινπζία. Θα δνχκε πεξηζζφηεξεο ιεπηνκέξεηεο ζρεηηθά κε ηηο αθνινπζίεο ζηα επφκελα θεθάιαηα. Απηφ πνπ πξέπεη λα γλσξίδεηε πξνο ην παξφλ είλαη φηη κηα αθνινπζία είλαη απιά κηα ηαμηλνκεκέλε ζπιινγή αληηθεηκέλσλ. Αθνινπζεί παξάδεηγκα ρξήζεο ηεο εληνιήο for...in : Καη ηξέρνληάο ην πξνθχπηεη : Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα: ' απηφ ην πξφγξακκα εθηππψλνπκε κηα αθνινπζία αξηζκψλ. Παξάγνπκε απηή ηελ αθνινπζία αξηζκψλ κε ηελ ελζσκαησκέλε ζπλάξηεζε range. Απηφ πνπ θάλνπκε εδψ είλαη φηη παξέρνπκε δχν αξηζκνχο θαη ε range επηζηξέθεη κηα αθνινπζία αξηζκψλ, μεθηλψληαο απφ ηνλ πξψην αξηζκφ έσο ην δεχηεξν αξηζκφ. Γηα παξάδεηγκα, ε range(4,12) δίλεη ηελ αθνινπζία [4, 5, 6, 7,8,9,10,11]. Δμ νξηζκνχ, ε range έρεη σο αξηζκφ θιηκάθσζεο (step count) ην 1. Δάλ παξέρνπκε έλαλ ηξίην αξηζκφ ζηελ range, ηφηε απηφο γίλεηαη ν αξηζκφο θιηκάθσζεο (step count). Γηα παξάδεηγκα, range(1,5,2) δίλεη σο απνηέιεζκα [1,3]. Θπκεζείηε ην εχξνο ησλ αξηζκψλ εθηείλεηαη έσο ηνλ δεχηεξν αξηζκφ, δει. δελ ζπκπεξηιακβάλεη ηνλ δεχηεξν αξηζκφ. ηελ ζπλέρεηα, ν βξφρνο for επαλαιακβάλεηαη ζ' απηφ ην εχξνο - for i in range(4,12) είλαη αληίζηνηρν ηνπ for i in [4, 5, 6, 7,8,9,10,11] πνπ είλαη ζαλ λα αληηζηνηρνχκε Page 59 of 253

60 θάζε αξηζκφ (ή αληηθείκελν) ηεο αθνινπζίαο ζην i μερσξηζηά θαη ζηελ ζπλέρεηα λα εθηεινχκε ηελ πινθάδα ησλ εληνιψλ γηα θάζε ηηκή ηεο i. ηελ πεξίπησζή καο, απιά εθηππψλνπκε ηελ ηηκή ζηελ πινθάδα ησλ εληνιψλ. Θπκεζείηε φηη ην ηκήκα else είλαη πξναηξεηηθφ. ηαλ ζπκπεξηιακβάλεηαη, εθηειείηαη πάληα κφιηο ηεξκαηηζηεί ν βξφρνο for, εθηφο θη αλ ζπλαληεζεί ε εληνιή break ελδηάκεζα. Δπίζεο ζπκεζείηε φηη ν βξφρνο for..in δνπιεχεη γηα νπνηαδήπνηε αθνινπζία. Δδψ έρνπκε κηα ιίζηα αξηζκψλ πνπ παξάγνληαη απφ ηελ ελζσκαησκέλε ζπλάξηεζε range, αιιά γεληθά κπνξνχκε λα ρξεζηκνπνηήζνπκε νπνηνδήπνηε είδνο αθνινπζίαο νπνηνπδήπνηε είδνπο αληηθεηκέλσλ! ηελ Python, ν βξφρνο for είλαη ξηδηθά δηαθνξεηηθφο απφ ηνλ βξφρν for ηεο C/C++. Πξνγξακκαηηζηέο ηεο C# ζα παξαηεξήζνπλ φηη ν βξφρνο for ζηελ Python είλαη παξφκνηνο κε ηνλ βξφρν foreach ζηελ C#. Πξνγξακκαηηζηέο ηεο Java ζα παξαηεξήζνπλ φηη απηφο είλαη παξφκνηνο κε ην for (int i :IntArray) ζηελ Java 1.5. ηε C/C++, αλ ζέιεηε λα γξάςεηε π.ρ. for (int i = 0; i < 5; i++), ηφηε ζηελ Python απιά γξάθεηε for i in range(0,5). πσο βιέπεηε, ν βξφρνο for είλαη πην απιφο, πην εθθξαζηηθφο θαη ιηγφηεξν εππαζήο ζε ζθάικαηα ζηελ Python. Η ζπλάξηεζε range() Η ζπλάξηεζε range() δεκηνπξγεί αθνινπζίεο αξηζκψλ. Έρεη δηάθνξεο κνξθέο: range(number) : Γεκηνπξγείηαη κηα αθνινπζία αξηζκψλ απφ ην 0 σο ηελ πξνεγνχκελε αθέξαηα ηηκή ηεο κεηαβιεηήο number range(from, to) : Γεκηνπξγείηαη κηα αθνινπζία αξηζκψλ απφ ηελ ηηκή ηεο κεηαβιεηήο from κέρξη ηελ πξνεγνχκελε αθέξαηα ηηκή ηεο κεηαβιεηήο to range(from, to, step) : Γεκηνπξγείηαη κηα αθνινπζία αξηζκψλ απφ ηελ ηηκή ηεο κεηαβιεηήο from κέρξη ηελ πξνεγνχκελε αθέξαηα ηηκή ηεο κεηαβιεηήο to κε βήκα step. Αο δνχκε θάπνηα παξαδείγκαηα : Page 60 of 253

61 Page 61 of 253

62 Η εληνιή break Η εληνιή break ρξεζηκνπνηείηαη γηα ηε δηαθνπή κηαο εληνιήο βξφρνπ, δει. ηε δηαθνπή ηεο εθηέιεζεο ηεο εληνιήο βξφρνπ αθφκε θη αλ ε πξνυπφζεζε ηνπ βξφρνπ δελ έρεη γίλεη False (ςεπδήο) ή δελ έρεη επαλαιεθζεί ζ' φιε ηελ αθνινπζία ησλ αληηθεηκέλσλ. Δίλαη ζεκαληηθφ λα ζεκεηψζνπκε φηη εάλ δηαθφςεηε έλαλ βξφρν for ή while θαη' απηφ ηνλ ηξφπν, νπνηαδήπνηε αληίζηνηρε πινθάδα βξφρνπ else δελ εθηειείηαη. Αθνινπζεί έλα παξάδεηγκα ρξήζεο ηεο εληνιήο break : Απφ ην νπνίν πξνθχπηεη έμνδνο : Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα: ' απηφ ην πξφγξακκα παίξλνπκε επαλεηιεκκέλα ηα εηζαρζέληα δεδνκέλα ηνπ ρξήζηε θαη εθηππψλνπκε ην κήθνο θάζε εηζαγσγήο (δει. ην ζχλνιν ραξαθηήξσλ). Έρνπκε νξίζεη έλαλ εηδηθφ φξν γηα ηελ δηαθνπή ηνπ πξνγξάκκαηνο, ειέγρνληαο αλ ηα εηζαρζέληα δεδνκέλα ηνπ ρξήζηε είλαη 'quit'. ηακαηάκε ην πξφγξακκα δηαθφπηνληαο ηνλ βξφρν θαη θζάλνπκε ζην ηέινο ηνπ πξνγξάκκαηνο. Σν κήθνο ηεο εηζαρζείζαο ζπκβνινζεηξάο κπνξεί λα βξεζεί ρξεζηκνπνηψληαο ηελ ελζσκαησκέλε ζπλάξηεζε len. Page 62 of 253

63 Καιφ ζα ήηαλ λα απνθεχγεηαη ε ρξήζε ηεο δήισζεο break, θαζψο θάλεη πην δπζαλάγλσζην ηνλ θψδηθα. πρλά κπνξεί λα αθαηξεζεί κε ηελ αιιαγή ηεο ζπλζήθεο ζην βξφγρν. Κάπνηεο άιιεο θνξέο, βνεζάεη ζην λα θαηαλνήζνπκε πσο ηεξκαηίδεηαη ν βξφγρνο ιφγσ θάπνηαο εηδηθήο πεξίπησζεο. Θπκεζείηε όηη ε εληνιή break κπνξεί λα ρξεζηκνπνηεζεί επίζεο θαη κε ην βξόρν for. Η εληνιή continue Η εληνιή continue ρξεζηκνπνηείηαη γηα λα ππνδείμνπκε ζηελ Python λα παξαιείςεη ηηο ππφινηπεο εληνιέο ζηελ ηξέρνπζα πινθάδα βξφρνπ θαη λα ζπλερίζεη κε ηελ επφκελε επαλάιεςε ηνπ βξφρνπ. ηε ζπλέρεηα παξαζέησ έλα απιφ πξφγξακκα εθαξκνγήο ηεο εληνιήο continue. Καη πξνθχπηεη Page 63 of 253

64 Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα: ' απηφ ην πξφγξακκα, απνδερφκαζηε δεδνκέλα εηζαγσγήο απφ ηνλ ρξήζηε, αιιά ηα επεμεξγαδφκαζηε κφλν εάλ έρνπλ ηνπιάρηζηνλ κήθνο 5 ραξαθηήξσλ. Έηζη, ρξεζηκνπνηνχκε ηελ ελζσκαησκέλε ζπλάξηεζε len γηα λα βξνχκε ην κήθνο θη αλ απηφ είλαη κηθξφηεξν απφ 3, ηφηε παξαιείπνπκε ηηο ππφινηπεο εληνιέο ζηελ πινθάδα ρξεζηκνπνηψληαο ηελ εληνιή continue. Γηαθνξεηηθά, νη ππφινηπεο εληνιέο ζηελ πινθάδα εθηεινχληαη θαη κπνξνχκε λα θάλνπκε νπνηνδήπνηε είδνο επεμεξγαζίαο ζέινπκε ζ' απηφ ην ζεκείν. Η εληνιή continue δνπιεχεη επίζεο θαη κε ην βξφρν for. H δήισζε pass Η δήισζε pass, είλαη κηα εμαηξεηηθά ελδηαθέξνπζα δήισζε, ίζσο ε πην ρξήζηκε γηα έλαλ πξνγξακκαηηζηή. ηαλ ν Γηεξκελεπηήο ηε ζπλαληήζεη, δελ θάλεη απνιχησο ηίπνηε. while True: pass Ο ζπγθεθξηκέλνο θψδηθαο ζα πξνθαιέζεη έλαλ αηέξκνλα βξφγρν (δει έλαλ βξφγρν πνπ ζα απαζρνιεί αηψληα ηνλ δηεξκελεπηή ζαο). Αλά πάζα ζηηγκή ηνλ δηαθφπηεηε παηψληαο ηελ αθνινπζία πιήθηξσλ ctrl + c. Γηαηί όκσο είλαη θάηη ηέηνην ρξήζηκν; Δίλαη κηα εύινγε απνξία! θεθηείηε φηη έρεηε λα θαηαζθεπάζεηε έλα κεγάιν πξφγξακκα θάλνληαο ρξήζε αληηθεηκελνζηξεθνχο ζρεδίαζεο. Ο αληηθεηκελνζηξέθήο πξνγξακκαηηζκφο θάλεη ρξήζε αληηθεηκέλσλ.αο ππνζέζνπκε ινηπφλ φηη ζρεδηάδεηαη έλα ζθειεηφ ηνπ πξνγξάκκαηφο ζαο πνπ απνηειείηαη απφ ηα αληηθείκελα uowm, duth, apth. class uowm: pass class duth: pass class apth: Κάνοντάσ το αυτό,μπορείτε να ζχετε τισ κλάςεισ που αποφαςίςατε να δθμιουργιςετε, κενζσ, ϊςτε ςιγά ςιγά να υλοποιείτε το ςφςτθμά ςασ, γνωρίηοντασ πάντα όλα όςα ζχετε να κάνετε. pass Page 64 of 253

65 ηε ζπλέρεηα παξνπζηάδσ θάπνηα πξνγξάκκαηα γηα λα γίλνπλ πην θαηαλνεηέο νη έλλνηεο πνπ αλαθέξζεθαλ παξαπάλσ : 1 ν πξόγξακκα Αλ δνθηκάζνπκε λα εθηειέζνπκε ηνλ παξαπάλσ θψδηθα,ηφηε γηα νπνηνλδήπνηε αξηζκφ επηηειεί ηελ ιεηηνπξγία γηα ηελ νπνία πξννξίδεηαη, λα πιεθηξνινγήζεηο ην ζσζηφ γηλφκελν ηνπ 2*5 θαη λα ζνπ εκθαληζηεί ην κήλπκα : «σζηά!». Αλ δελ πιεθηξνινγήζεηο 10 θαη πιεθηξνινγήζεηο νπνηδήπνηε άιινλ αξηζκφ ζα εκθαληζηεί ην κήλπκα : «Έμνδνο απφ ην πξφγξακκα». Αλ φκσο αληί γηα αξηζκφ δνθηκάζνπκε λα δψζνπκε σο είζνδν έλα νπνηνδήπνηε γξάκκα, ηφηε παίξλνπκε ην αθφινπζν κήλπκα : Page 65 of 253

66 Απηφ ζπκβαίλεη γηαηί πξνζπαζνχκε λα κεηαηξέςνπκε ην γξάκκα a ζε αθέξαην κέζσ ηεο ζπλάξηεζεο int(),πξάγκα πνπ δελ γίλεηαη, θαη γηα απηφ εγείξεηαη κηα εμαίξεζε ηχπνπ ValueError. 2 ν πξόγξακκα ην πξφγξακκα πνπ αθνινπζεί ππνινγίδνληαη νη ιχζεηο κηαο δεπηεξνβάζκηαο εμίζσζεο. Αλάινγα κε ην αλ ε δηαθξίλνπζα είλαη ζεηηθή ή αξλεηηθή ρξεζηκνπνηνχκε κηγαδηθνχο αξηζκνχο θαη ζηελ ζπλέρεηα ηππψλνπκε ην απνηέιεζκα. Τπελζηκίδεηαη φηη ν ηχπνο επίιπζεο ηεο δεπηεξνβάζκηαο εμίζσζεο είλαη : Αλ ε δηαθξίλνπζα Γ είλαη ζεηηθή ηφηε έρνπκε πξαγκαηηθέο ξίδεο (πεξίπησζε κέζα ζην πξψην κπινθ θψδηθα κεηά ην if ελψ αιιηψο έρνπκε κηγαδηθέο (πεξίπησζε κέζα ζην κπινθ else). ηελ πεξίπησζε πνπ ε δηαθξίλνπζα είλαη 0 έρνπκε κηα δηπιή πξαγκαηηθή ξίδα, πξάγκα πνπ ηζρχεη θαη ζην απνηέιεζκα ηνπ πξνγάκκαηφο καο αθνχ δεκηνπξγνχληαη δχν ίδηεο ξίδεο κε κεδεληθφ θαληαζηηθφ κέξνο. Page 66 of 253

67 Page 67 of 253

68 3 ν πξόγξακκα ηελ Python, δελ ππάξρεη ε δήισζε switch φπνπ αλαιφγσο κε κηα παξάκεηξν εθηειείηαη κηα ιεηηνπξγία απφ k δηαθνξεηηθέο, φπνπ k είλαη ην πιήζνο ησλ δηαθνξεηηθψλ πεξηπηψζεσλ πνπ έρνπκε ζπκπεξηιάβεη ζηελ switch. Η δήισζε switch είλαη γλσζηή απφ γιψζζεο πξνγξακκαηηζκνχ φπσο C/C++ ή Java. ηελ Python, ν πξνηεηλφκελνο ηξφπνο είλαη ε ρξήζε ηεο δνκήο if elif else Έλα απιφ παξάδεηγκα απηήο ηεο ρξήζεο είλαη ην παξαθάησ : θαη εθηειψληαο ην παξαπάλσ πξφγξακκα πξνθχπηεη : Απηφο ν ηξφπνο πξνηείλεηαη φηαλ ηα elif πνπ ρξεζηκνπνηνχληαη είλαη ζρεηηθά ιίγα, θξαηψληαο έηζη ηνλ θψδηθα επαλάγλσζην. 4 ν παξάδεηγκα Οη βξφγρνη for εθηεινχληαη γηα ζπγθεθξηκέλν πιήζνο θνξψλ. Γηα ηελ δεκηνπξγία ηνπο ρξεζηκνπνηείηαη ε ζπλάξηεζε range() πνπ αλαθέξακε παξαπάλσ. Έηζη, φζν ε ζπλάξηεζε range() επηζηξέθεη έλα θαηλνχξγην αληηθείκελν, νη εληνιέο ζην ζψκα ηνπ βξφγρνπ ζπλερίδνπλ λα εθηεινχληαη. Page 68 of 253

69 Χο παξάδεηγκα ζα παξαζέζσ ηνλ ππνινγηζκφ ησλ 20 πξψησλ αξηζκψλ Fibonacci. Τπελζηκίδεηαη πσο ν ηχπνο γηα ηνλ ππνινγηζκφ ηνπ n-νζηνχ αξηζκνχ Fibonacci είλαη: F n = F n-1 + F n-2 φπνπ F 0 = 0 θαη F 1 = 1. πνπ i ζα πάξεη δηαδνρηθά ηηο ηηκέο απφ 0 εσο θαη 17, κε απνηέιεζκα λα εθηειεζηνχλ νη εληνιέο ζην ζψκα βξφγρνπ 18 θνξέο. Η ζπλάξηεζε range() δνπιεχεη κφλν γηα αθεξαίνπο. Θα κπνξνχζακε λα παξάγνπκε κε ηελ βνήζεηα ηεο range() ηνπο αξηζκνχο κέζα ζε έλα ζπγθεθξηκέλν εχξνο, ή κε έλα ζπγθεθξηκέλν βήκα φπσο θαίλεηαη ζηηο πεξηπηψζεηο πνπ παξαζέησ ακέζσο θάησ. 1 ε πεξίπησζε Page 69 of 253

70 ε απηή ηελ πεξίπησζε, ηππψλνπκε ηνπο αξηζκνχο ζην δηάζηεκα [100,120) κε βήκα αλά 4. 2 ε πεξίπησζε ε απηή ηελ πεξίπησζε, ηππψλνπκε φινπο ηνπο αξηζκνχο ζην δηάζηεκα [100,120). Παξαηήξεζε Αλ είρακε for i in range(100,120,2) ζα ηππψλακε ηνπο αξηζκνχο ζην δηάζηεκα [100,120), αιιά κε βήκα αλα 2, ζπλεπψο ζα ηππφλνληαλ κόλν νη άξηηνη αξηζκνί κέζα ζε απηφ ην δηάζηεκα. Υξήζε ιεμηθνύ Έλαο άιινο ηξφπνο λα εμνκνηψζνπκε ηελ ιεηηνπξγία κηαο δήισζεο switch, είλαη κε ηελ ρξήζε ιεμηθψλ. Σα ιεμηθά καο επηηξέπνπλ λα αληηζηνηρήζνπκε ζε έλα θιεηδί ηνπο (key) κηα κεηαβιεηή. Υξεζηκνπνηψληαο ινηπφλ σο θιεηδηά ηηο επηινγέο πνπ ζέινπκε λα έρνπκε, θαη αληηζηνηρίδνληάο ηα κε ηηο ζπλαξηήζεηο πνπ ζέινπκε λα ρξεζηκνπνηήζνπκε, παίξλνπκε ιεηηνπξγηθφηεηα εθάκηιιε κε ηελ επηζπκεηή. Έλα ιεμηθφ είλαη θάηη ζαλ έλα βηβιίν επαθψλ ζην νπνίν βξίζθεηε ηελ δηεχζπλζε ή ηηο πιεξνθνξίεο επηθνηλσλίαο θάπνηνπ, γλσξίδνληαη κφλν ην φλνκά ηνπ. Με άιια ιφγηα, ππάξρεη κηα ζπζρέηηζε κεηαμχ ηνπ θιεηδηνχ (ηνπ νλφκαηνο) θαη ηεο ηηκήο (ησλ ιεπηνκεξεηψλ). εκεηώζηε όηη ην θιεηδί πξέπεη λα είλαη κνλαδηθό, αιιηώο δελ ζα κπνξνύζαηε λα βξείηε ηηο ζσζηέο πιεξνθνξίεο επηθνηλσλίαο θάπνηνπ, αλ είραηε δύν άηνκα κε ην ίδην αθξηβώο όλνκα. Page 70 of 253

71 εκεηψζηε φηη κπνξείηε λα ρξεζηκνπνηείηε κφλν ακεηάβιεηα αληηθείκελα (γηα παξάδεηγκα ζπκβνινζεηξέο) σο θιεηδηά ελφο ιεμηθνχ, αιιά κπνξείηε λα ρξεζηκνπνηείηε είηε ακεηάβιεηα είηε κεηαβιεηά αληηθείκελα γηα ηηο ηηκέο ηνπ ιεμηθνχ. Απηφ κε απιά ιφγηα ζεκαίλεη φηη ζα πξέπεη λα ρξεζηκνπνηείηε κφλν απιά αληηθείκελα σο θιεηδηά Σα δεχγε θιεηδηψλ θαη ηηκψλ ζε έλα ιεμηθφ νξίδνληαη κε ηε ζχληαμε : d = {key1 : value1, key2 : value2 } εκεηψζηε φηη ηα δεχγε θιεηδηψλ/ηηκψλ ρσξίδνληαη κε θφκκα, θαη φια καδί πεξηθιείνληαη ζε έλα δεχγνο αγθίζηξσλ (δειάδε { θαη }). Θπκεζείηε φηη ηα δεχγε θιεηδηψλ/ηηκψλ ζε έλα ιεμηθφ δελ κπαίλνπλ ζε θαλελφο είδνπο ζεηξά. Αλ ζέιεηε λα είλαη ζε ζπγθεθξηκέλε ζεηξά, ζα πξέπεη λα ηα ηαμηλνκήζεηε πξνηνχ ηα ρξεζηκνπνηήζεηε. Σα ιεμηθά πνπ ζα ρξεζηκνπνηήζεηε είλαη πεξηζηάζεηο/αληηθείκελα ηεο θιάζεο dict. Γεκηνπξγία ιεμηθνύ Μπνξνχκε λα αλαζέζνπκε θάπνηεο ηηκέο ζην ιεμηθφ κε ηελ δεκηνπξγία ηνπ. Γηα παξάδεηγκα : Αθφκα θη αλ έρνπκε ήδε δεκηνπξγήζεη έλα ιεμηθφ κπνξνχκε εχθνια λα αλαζέηνπκε ηηκέο ζε απηφ. ην παξάδεηγκα πνπ αθνινπζεί δεκηνπξγνχκε έλα άδεην ιεμηθφ θαη ζηελ ζπλέρεηα πξνζζέηνπκε κηα ηηκή. Μπνξνχκε επίζεο λα δκηνπξγήζνπκε έλα ιεμηθφ κέζσ ηεο κεζφδνπ dict(). Page 71 of 253

72 Λεηηνπξγίεο ζε ιεμηθό Γηαγξαθή : Υξεζηκνπνηνχκε ην del. Γηα παξάδεηγκα ε εληνιή del d['swimwear'] δηαγξάθεη ηελ αληίζηνηρε εγγξαθή απφ ην παξαπάλσ ιεμηθφ. Μέγεζνο : Η αλάθηεζε ηνπ κεγέζνπο ελφο ιεμηθνχ (αξηζκφο δεπγαξηψλ θιεηδί/ηηκή) αλαθηάηαη κέζσ ηεο κεζφδνπ len(d). Κιεηδηά : Γηα λα βξνχκε ηα θιεηδηά ελφο ιεμηθνχ(ρξήζηκν ζε βξφγρνπο) ρξεζηκνπνηνχκε ηελ κέζνδν d.keys(). Σηκέο : Αληίζηνηρα γηα ηηο ηηκέο ηεο κεζφδνπ d.values(). Κιεηδί/Σηκή : Γηα λα αλαθηήζνπκε φια ηα δεπγάξηα θιεηδί/ηηκή απφ έλα ζπγθεθξηκέλν ιεμηθφ d.times() ε νπνία θαη καο επηζηξέθεη πιεηάδεο απφ δπν ζηνηρεία, φπνπ ην πξψην είλαη ην θιεηδί αθνινπζνχκελν απφ ηελ αληίζηνηρε ηηκή. Μηα ιεηηνπξγία πνπ ζπλαληηέηαη αξθεηά ζπρλά ζηελ πξάμε, είλαη λα ζέινπκε λα πξνζζέζνπκε κηα ηηκή ζε κηα ζπγθεθξηκέλε ζέζε ηνπ ιεμηθνχ. Πνιιέο θνξέο ζέινπκε λα δνχκε αλ ην θιεηδί ηνπ ιεμηθνχ ππάξρεη ήδε, λα αλαθηήζνπκε ηελ ήδε ππάξρνπζα ηηκή θαη λα ηελ ελεκεξψζνπκε κε βάζε κηα ζπλάξηεζε, ελψ αλ δελ ππάξρεη ην ζπγθεθξηκέλν θιεηδί, λα ην δεκηνπξγήζνπκε θαη λα ηνπνζεηήζνπκε ηελ ηηκή πνπ ζέινπκε. Παξαθάησ παξαζέησ δχν ηξφπνπ γηα ηελ πινπνίεζε απηήο ηεο ιεηηνπξγίαο. Σνλίδεηαη φηη θαη νη δχν ηξφπνη έρνπλ αθξηβψο ην ίδην απνηέιεζκα. 1 ε ζπλάξηεζε : Page 72 of 253

73 2 ε ζπλάξηεζε : Η πξψηε ζπλάξηεζε θνηηάδεη αλ ππάξρεη ην θιεηδί κέζα ζην ιεμηθφ. Αλ δελ ππάξρεη, ην δεκηνπξγεί θαη ηνπ δίλεη κηα αξρηθή ηηκή (κεδέλ ζηελ πεξίπησζή καο). ηε ζπλέρεηα πξνζζέηεη ζηελ ηηκή ηνπ ιεμηθνχ πνπ αλαθηά ηελ ηηκή πνπ έρνπκε πεξάζεη ζην φξηζκα ηεο ζπλάξηεζεο (value). Η δεχηεξε ζπλάξηεζε επηηπγράλεη ην ίδην απνηέιεζκα κε έλαλ πην θνκςφ ηξφπν. Υξεζηκνπνηνχκε ηελ κέζνδν get πνπ εθαξκφδεηαη ζε έλα ιεμηθφ. Απηή καο επηζηξέθεη ηελ ηηκή ηνπ d[key] ή ηελ ηηκή πνπ πξνζδηνξίδνπκε κε ηνλ δεχηεξν νξηζκφ εθφζνλ δελ ππάξρεη απηφ ην θιεηδί ζην ιεμηθφ ηελ ζπλέρεηα πξνζζέηνπκε ηελ ηηκή ηεο value ζηελ αλαθηεζείζα ηηκή θαη ην απνηέιεζκα ην εθρσξνχκε ζην d[key] έρνληαο θάλεη ηελ ελεκέξσζε πνπ επηζπκνχζακε. Γηάηξεμε ηηκώλ Η δηάηξεμε ησλ ηηκψλ ζε έλα ιεμηθφ γίλεηαη φπσο ζηηο ιίζηεο. Μφλν πνπ εδψ πξέπεη λα πξνζέμνπκε φηη δελ είλαη εγγπεκέλε ε ζεηξά κε ηελ νπνία ζα δηαηξερζνχλ ηα ζηνηρεία ηνπ ιεμηθνχ, θαη γηα απηφ ηνλ ιφγν δελ πξέπεη λα βαζηδφκαζηε ζε απηή. Αθνινπζεί έλα ζρεηηθφ παξάδεηγκα : Page 73 of 253

74 Αλαθνξά θαη Σξνπνπνίεζε Σα ιεμηθα είλαη ηξνπνπνηήζηκα αληηθείκελα (mutable). Γηα απηφ ηνλ ιφγν απαηηείηαη πξνζνρή φηαλ ηξνπνπνηνχκε έλα ιεμηθφ θαζψο φιεο νη αλαθνξέο ζε απηφ ην ιεμηθφ ηξνπνπνηνχληαη επίζεο. Αλ επηζπκνχκε ηελ απνθπγή κίαο ηέηνηαο ζπκπεξηθνξάο, ηφηε πξεπεη λα ρξεζηκνπνηνχκε ηελ κέζνδν copy(). d['a'] = 123 c = d c['a'] = 1821 print(d['a']) ε αληηδηαζηνιή κε : d = {} d['a'] = 123 c = d.copy c['a'] = 1821 print(d['a']) Page 74 of 253

75 Καηαλνήζεηο ιεμηθνχ ( Dict comprehension) Αληίζηνηρα κε ηηο θαηαλνήζεηο ιίζηαο, ππάξρνπλ θαη θαηαλνήζεηο ιεμηθψλ. Η δηαθνξά, πέξα απφ ηελ πξνθαλή ζπληαθηηθή δηαθνξά κε ηηο {} έγθεηηαη ζην γεγνλφο φηη ηψξα πξέπεη λα ρξεζηκνπνηνχκε δπν δηαηξέμηκα αληηθείκελα (iterable), νκνδνπνηεκέλα. Αθνινπζνχλ δπν παξαδείγκαηα πνπ θάλνπλ αθξβψο ην ίδην πξάγκα. Αλ πξνζέμεηε ζην απνηέιεζκα πνπ παξνπζηάδεηαη, δελ ηππψλνληαη ζε ζεηξά ηα γξάκκαηα ηεο ιέμεο Python. Απηφ ζπκβαίλεη γηαηί ε δνκή ηνπ ιεμηθνχ δελ εγγπάηαη θάπνηα ζεηξά. Δπίζεο, πξέπεη λα πξνζέμνπκε πσο ε δηάηξεμε ζηακαηάεη φηαλ ηειεηψζνπλ ηα ζηνηρεία ελφο απφ φια ηα αληηθείκελα πνπ δηαηξέρνπκε. Page 75 of 253

76 Σαμηλνκεκέλν Λεμηθό Η επξέσο ρξεζηκνπνηνχκελε δνκή ειέγρνπ ηνπ ιεμηθνχ, δελ εμαζθαιίδεη θάπνηα ζεηξά ζηα δεπγάξηα θιεηδί/ηηκή πνπ απνζεθεχνληαη. Έηζη, δπζρεξαίλεηαη ε ρξήζε ιεμηθψλ ζαλ κέζα απνζήθεπζεο ζε νξηζκέλεο πεξηπηψζεηο. Οξηζκέλεο δπλακηθέο γιψζζεο κπνξνχλ θαη εγγπψληαη κηα ζπγθεθξηκέλε ζεηξά πξνζπέιαζεο ησλ ζηνηρείσλ ζηηο αληίζηνηρεο δνκέο. Η ζεηξά θαζνξίδεηαη απφ ηνλ ρξφλν φπνπ εηζήρζεθε θάζε θιεηδί. Καηλνχξγηα θιεηδηά ηνπνζεηνχληαη ζην ηέινο ηνπ ιεμηθνχ. Χζηφζν, θιεηδηά ζηα νπνία αλαλεψζεθε ε ηηκή ηνπο, δελ αιιάδνπλ ζέζε. Η δνκή ηνπ ηαμηλνκεκέλνπ ιεμηθνχ είλαη νπζηαζηηθά έλα ιεμηθφ (κε ηελ έλλνηα φηη παξέρεη ηελ ίδηα ιεηηνπξγηθφηεηα), κφλν πνπ έρεη θαη ηελ ηδηφηεηα πνπ πεξηγξάθηεθε παξαπάλσ. ηε ζπλέρεηα, παξαζέησ έλα παξάδεηγκα πξνγξάκκαηνο κε ηε ρξήζε ιεμηθνχ: Πξψηα δεκηνπξγείηαη ην ιεμηθφ eab ( address book) ην νπνίν πεξηιακβάλεη ηηο ειεθηξνληθέο δηεπζχλζεηο θαζεγεηψλ ηνπ ηκήκαηφο καο. ηε ζπλέρεηα, ε πξφζβαζε ζηα δεχγε θιεηδηψλ/ηηκψλ γίλεηαη κε ηε ρξήζε ηνπ ηειεζηή επξεηεξίαζεο. Page 76 of 253

77 Γεκηνπξγνχκε ην ιεμηθφ eab ( address book). Eηζάγνπκε δεπγάξηα θιεηδί-ηηκή θαζνξίδνληαο ην θιεηδί, ρξεζηκνπνηψληαο ηνλ ηειεζηή επξεηεξίαζεο (indexing operator). Η δηαγξαθή δεπγψλ θιεηδηψλ/ηηκψλ γίλεηαη κε ηελ εληνιή del, πξνζδηνξίδνληαο ην ιεμηθφ θαη ηνλ ηειεζηή επξεηεξίαζεο γηα ην θιεηδί πνπ ζα αθαηξεζεί. Γελ ρξεηάδεηαη λα νξηζηεί ε ηηκή πνπ αληηζηνηρεί ζην θιεηδί πνπ ζα νξηζηεί. Έπεηηα, εηζάγνπκε θάζε δεπγάξη θιεηδί-ηηκή ηνπ ιεμηθνχ ρξεζηκνπνηψληαο ηε κέζνδν items ηνπ ιεμηθνχ, ε νπνία επηζηξέθεη κηα ιίζηα πιεηάδσλ, φπνπ θάζε πιεηάδα πεξηέρεη έλα δεπγάξη ζηνηρείσλ -ην θιεηδί αθνινπζνχκελν απφ ηελ ηηκή. Αλαθηνχκε απηφ ην δεπγάξη θαη ην εθρσξνχκε ζηηο κεηαβιεηέο name (νλνκαζία) θαη address (δηεχζπλζε) αληηζηνίρσο γηα θάζε δεπγάξη, ρξεζηκνπνηψληαο ην βξφρν for..in θαη κεηά ηππψλεη απηέο ηηο ηηκέο ζηελ πινθάδα for. Μπνξνχκε λα πξνζζέζνπκε λέα δεπγάξηα θιεηδί-ηηκή, απιά ρξεζηκνπνηψληαο ηνλ ηειεζηή επξεηεξίαζεο γηα λα εηζάγνπκε έλα θιεηδί θαη λα εθρσξήζνπκε ζ' απηφ κηα ηηκή, φπσο έρνπκε θάλεη γηα ην T. Lagkas ζηελ αλσηέξσ πεξίπησζε. Μπνξνχκε λα ειέγμνπκε εάλ έλα δεπγάξη θιεηδί-ηηκή ππάξρεη, ρξεζηκνπνηψληαο ηνλ ηειεζηή in, ή αθφκα θαη ηε κέζνδν has_key ηεο θιάζεο dict. Μπνξείηε λα δείηε ηελ ηεθκεξίσζε γηα νιφθιεξε ηε ιίζηα ησλ κεζφδσλ ηεο θιάζεο dict ρξεζηκνπνηψληαο ηελ εληνιή help(dict). Πξνθχπηεη κε εθηέιεζε ηνπ πξνγξάκκαηνο : Page 77 of 253

78 Συναρτήςεισ Αο μεθηλήζνπκε κε θάπνηνπο βαζηθνχο νξηζκνχο πνπ ζα καο βνεζήζνπλ ζηελ θαιχηεξε θαηαλφεζε φζσλ αθνινπζήζνπλ. πλάξηεζε είλαη κηα νλνκαδφκελε αθνινπζία δειψζεσλ ε νπνία πξαγκαηνπνηεί έλα ζπγθεθξηκέλν ππνινγηζκφ. Απνηεινχλ κηα ηερληθή αθαίξεζεο κέζσ ηεο νπνίαο κπνξεί λα δνζεί φλνκα ζε κηα ζχλζεηε ιεηηνπξγία θαη ζηελ ζπλέρεηα λα παξέρεηαη ε δπλαηφηεηα λα αλαθεξφκαζηε ζε απηή ζχλζεηε ιεηηνπξγία σο κνλάδα. Αλ κηα ζπλάξηεζε εθαξκφδεηαη ζε αληηθείκελν νλνκάδεηαη κέζνδνο. Όξηζκα είλαη κηα ηηκή ε νπνία παίξλεηαη απφ ην πξφγξακκα ζηελ θιήζε ηεο ζπλάξηεζεο. Μπνξεί λα ραξαθηεξηζηεί θαη σο είζνδνο ηεο ζπλάξηεζεο απφ ην πξφγξακκα απφ ην νπνίν θαιείηαη. Μηα ζπλάξηεζε κπνξεί αλ επηδέρεηαη πνιιά νξίζκαηα. Δπηζηξεθόκελε ηηκή είλαη ε ηηκή ε νπνία επηζηξέθεηαη απφ ηελ ζπλάξηεζε ζην πεξηβάιινλ πνπ ηελ θάιεζε κέζσ κηαο δήισζεο return. ηαλ ζπλαληάηαη ε δήισζε return,ηεξκαηίδεηαη ε εθηέιεζε ηεο ζπλάξηεζεο θαη ε πνή εθηέιεζεο επηζηξέθεη ζην πεξηβάιινλ απφ φπνπ θαιέζηεθε! Οη ζπλαξηήζεηο καο επηηξέπνπλ ηελ νκαδνπνίεζε θψδηθα πνπ επηηειεί κηα ζπγθεθξηκέλε ιεηηνπξγία θαη, θαηά ζπλέπεηα, ηελ επθνιφηεξε επαλαρξεζηκνπνίεζή ηνπ. Δπηπιένλ, επηηξέπνπλ ηνλ ζρεδηαζκφ ηνπ ηειηθνχ ζπζηήκαηνο ινγηζκηθνχ ζε πςειφηεξν επίπεδν αθαίξεζεο, φπνπ ε ιεηηνπξγηθφηεηα παξέρεηαη κέζσ ζπλαξηήζεσλ. Έηζη, ζηελ ζπλέρεηα απνκέλεη ε πινπνίεζε απηψλ, κέρξη ηνπ ζεκείνπ φπνπ νη κηθξφηεξεο δνκηθέο κνλάδεο πνπ ρξεζηκνπνηνχληαη, παξέρνληαη ήδε απφ ην ζχζηεκα. Οη ζπλαξηήζεηο είλαη επαλαρξεζηκνπνηήζηκα κέξε πξνγξακκάησλ. αο επηηξέπνπλ λα δίλεηε έλα φλνκα ζε έλα ζχλνιν εληνιψλ θαη λα ηξέρεηε εθείλν ην ζχλνιν εληνιψλ ρξεζηκνηψληαο ην φλνκά ηνπο, νπνπδήπνηε ζην πξνγξακκά ζαο θαη φζεο θνξέο ζέιεηε. Απηφ είλαη γλσζηφ ζαλ θιήζε (calling) ηεο ζπλάξηεζεο. Έρνπκε ήδε ρξεζηκνπνηήζεη πνιιέο ελζσκαησκέλεο ζπλαξηήζεηο φπσο ηε len θαη ηε range. Η έλλνηα ησλ ζπλαξηήζεσλ είλαη πηζαλφλ ην πην ζπνπδαίν δνκηθφ ζηνηρείν νπνηνπδήπνηε κε ζηνηρεηψδνπο πξνγξάκκαηνο (ζε φιεο ηηο γιψζζεο πξνγξακκαηηζκνχ), γη' απηφ ζα δηεξεπλήζνπκε δηάθνξεο πηπρέο ησλ ζπλαξηήζεσλ. Οη ζπλαξηήζεηο νξίδνληαη ρξεζηκνπνηψληαο ηε ιέμε θιεηδί def, κεηά ηελ νπνία αθνινπζεί έλα φλνκα πνπ ηαςηοποιεί ηελ εθάζηνηε ζπλάξηεζε θαη θαηφπηλ Page 78 of 253

79 αθνινπζεί έλα δεπγάξη παξελζέζεσλ πνπ κπνξνχλ λα πεξηθιείνπλ κεξηθά νλφκαηα κεηαβιεηψλ, θαη ε γξακκή ηειεηψλεη κε δηπιή ηειεία (:). o ην αθφινπζν παξάδεηγκα βιέπνπκε ηελ δεκηνπξγία κηαο ζπλάξηεζεο κε δχν νξίζκαηα θαη ηελ επηζηξνθή ηνπ ηειηθνχ ηεο απνηειέζκαηνο. ην ηέινο, εθηππψλνπκε ηελ ηηκή πνπ επηζηξέθεηαη θαιψληαο ηελ ζπλάξηεζε. o Μπνξνχκε λα επηζηξέςνπκε θαη πεξηζζφηεξεο απφ κηα ηηκέο θάπνηαο ζπλάξηεζεο. Page 79 of 253

80 Αγλέο πλαξηήζεηο θαη πλαξηήζεηο Σξνπνπνίεζεο Αγλέο πλαξηήζεηο (Pure Functions) νλνκάδνληαη νη ζπλαξηήζεηο πνπ δελ πξνθαινχλ θακία αιιαγή ζην αληηθείκλν ζην νπνίν θαινχληαη. Αληηζέησο, ζπλαξηήζεηο ηξνπνπνίεζεο (modifier functions) θαινχληαη απηέο πνπ κπνξνχλ λα πξνθαιέζνπλ αιιαγέο ζην ζπγθεθξηκέλν αληηθείκελν. Απηέο νη ζπλαξηήζεηο ιέκε φηη έρνπλ θαη παξελέξγεηεο (side effects), θαζψο πέξα απφ ηελ δηεξγαζία πνπ επηηεινχλ, κεηαβάινπλ θαη ηελ ηηκή ηνπ αληηθεηκέλνπ ζην νπνίν θιήζεθαλ. ην παξαπάλσ παξάδεηγκα επεηδή έλα αιθαξηζκεηηθφ είλαη ζηαζεξφ, ε ζπλάξηεζε upper() δελ ζα κπνξνχζε παξά λα είλαη κηα αγλή ζπλάξηεζε θαζψο δελ γίλεηαη λα κεηαβιεζεί έλα ζηαζεξφ αληηθείκελν. Έηζη, απηφ πνπ θάλεη είλαη λα δεκηνπξγεί έλα θαηλνχξγην string πνπ έρεη φια ηα γξάκκαηα θεθαιαία ρσξίο λα επεξεάδεηαη ην a. Αληηζέησο, πάλσ ζε έλα κεηαβιεηφ αληηθείκελν (mutable), κηα ζπλάξηεζε κπνξεί λα είλαη είηε αγλή, είηε ζπλάξηεζε ηξνπνπνίεζεο. Δπνκέλσο, ελψ φπσο πεξηκέλακε, ε count() δελ επεξεάδεη ηελ ιίζηα b, ε ζπλάξηεζε reverse() επηδξά απεπζείαο πάλσ ζε απηή θαη ηελ αληηζηξέθεη. b = ['a', 'b', 'c', 'd',] print(b.count('a')) print(b) print(b.reserve()) print(b) Page 80 of 253

81 o Αθνινπζεί έλα απιφ παξάδεηγκα κε έλα ζχλνιν εληνιψλ πνπ απνηεινχλ κέξνο απηήο ηεο ζπλάξηεζεο. Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Oξίδνπκε κηα ζπλάξηεζε κε ην φλνκα sayaboutpython αθνινπζψληαο ηε ζχληαμε φπσο αλαιχζακε παξαπάλσ. Απηή ε ζπλάξηεζε δελ έρεη παξακέηξνπο γη' απηό δε δειώλνληαη θαζόινπ κεηαβιεηέο αλάκεζα ζηηο παξελζέζεηο. Οη παξάκεηξνη ζηηο ζπλαξηήζεηο είλαη απιά ε είζνδνο ζηε ζπλάξηεζε ψζηε λα πεξλάκε δηαθνξεηηθέο ηηκέο ζηε ζπλάξηεζε θαη λα παίξλνπκε αληίζηνηρα απνηειέζκαηα. εκεηώζηε όηη κπνξνύκε λα θαινύκε ηελ ίδηα ζπλάξηεζε δύν θνξέο, δειαδή δε ρξεηάδεηαη λα γξάθνπκε ηνλ ίδην θώδηθα δύν θνξέο. Παξάκεηξνη ζπλαξηήζεσλ Μηα ζπλάξηεζε κπνξεί λα δερζεί παξακέηξνπο, νη νπνίεο είλαη ηηκέο πνπ δίλεηε ζηε ζπλάξηεζε, έηζη ψζηε απηή λα κπνξεί λα θάλεη θάηη αμηνπνηψληαο απηέο ηηο ηηκέο. Απηέο νη παξάκεηξνη κνηάδνπλ κε ηηο κεηαβιεηέο, δηαθέξνληαο σο πξνο ην φηη νη ηηκέο απηψλ ησλ κεηαβιεηψλ νξίδνληαη φηαλ θαινχκε ηε ζπλάξηεζε θαη ηνπο έρνπλ ήδε εθρσξεζεί ηηκέο φηαλ ηξέρεη ε ζπλάξηεζε. Page 81 of 253

82 Οη παξάκεηξνη θαζνξίδνληαη κέζα ζην δεπγάξη ησλ παξελζέζεσλ ζηνλ νξηζκφ ηεο ζπλάξηεζεο θαη δηαρσξίδνληαη κε θφκκα. ηαλ θαινχκε ηε ζπλάξηεζε δίλνπκε θαη ηηο ηηκέο κε ηνλ ίδην ηξφπν. εκείσζε γηα ηελ νξνινγία πνπ ρξεζηκνπνηείηαη: Οη νλνκαζίεο πνπ δίλεηε ζηνλ νξηζκφ ηεο ζπλάξηεζεο νλνκάδνληαη παξάκεηξνη ελψ νη ηηκέο πνπ δίλεηε φηαλ θαιείηε ηε ζπλάξηεζε νλνκάδνληαη νξίζκαηα. Αθνινπζεί έλα παξάδεηγκα : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Oξίδνπκε κηα ζπλάξηεζε πνπ νλνκάδεηαη printmax κε δπν παξακέηξνπο ηηο a θαη b. Bξίζθνπκε ην κεγαιχηεξν λνχκεξν ρξεζηκνπνηψληαο κηα απιή εληνιή if..else θαη κεηά ηππψλνπκε ην κεγαιχηεξν λνχκεξν. ηελ πξψηε ρξήζε ηεο printmax, απεπζείαο δίλνπκε ηνπο αξηζκνχο, δειαδή ηα νξίζκαηα. ηε δεχηεξε ρξήζε ηεο, θαινχκε ηε ζπλάξηεζε ρξεζηκνπνηψληαο κεηαβιεηέο. Η printmax(x, y) πξνθαιεί ηελ ηηκή ηνπ νξίζκαηνο x λα δνζεί ζηελ παξάκεηξν a θαη ηελ ηηκή ηνπ νξίζκαηνο y λα δνζεί ζηελ παξάκεηξν b. H ζπλάξηεζε printmax ιεηηνπξγεί κε ηνλ ίδην ηξφπν θαη ζηηο δπν πεξηπηψζεηο. ηε ζπλέρεηα ζα θαηαζθεπάζνπκε έλα πξφγξακκα θαη ζα νξίζνπκε κηα ζπλάξηεζε πνπ νλνκάδεηαη printmin κε δχν παξακέηξνπο ηηο a θαη b. Βξίζθνπκε ην κηθξφηεξν λνχκεξν ρξεζηκνπνηψληαο κηα απιή if else θαη κεηά ηππψλνπκε ην κηθξφηεξν λνχκεξν. Page 82 of 253

83 ηελ πξψηε ρξήζε ηεο printmax, απεπζείαο δίλνπκε ηνπο αξηζκνχο, δειαδή ηα νξίζκαηα. ηε δεχηεξε ρξήζε ηεο, θαινχκε ηε ζπλάξηεζε ρξεζηκνπνηψληαο κεηαβιεηέο. Η printmin (x, y) πξνθαιεί ηελ ηηκή ηνπ νξίζκαηνο x λα δνζεί ζηελ παξάκεηξν a θαη ηελ ηηκή ηνπ νξίζκαηνο y λα δνζεί ζηελ παξάκεηξν b. H ζπλάξηεζε printmin ιεηηνπξγεί κε ηνλ ίδην ηξφπν θαη ζηηο δπν πεξηπηψζεηο. Σνπηθέο κεηαβιεηέο (Local variables) ηαλ δειψλεηε κεηαβιεηέο κέζα ζε έλα νξηζκφ ζπλάξηεζεο, απηέο δελ έρνπλ θακία ζρέζε κε άιιεο κεηαβιεηέο πνπ έρνπλ ηελ ίδηα νλνκαζία θαη ρξεζηκνπνηνχληαη έμσ απν απηή ηε ζπλάξηεζε, δειαδή ηα νλφκαηα ησλ κεηαβιεηψλ ρξεζηκνπνηνχληαη κφλν ηνπηθά ζηε ζπλάξηεζε. Απηφ νλνκάδεηαη εμβέλεια (scope) ηυν μεηαβληηών. ιεο νη κεηαβιεηέο έρνπλ ηελ εκβέιεηα ηνπ ηκήκαηνο φπνπ έρνπλ δεισζεί, αξρίδνληαο απφ ην ζεκείν ζην νπνίν νξίδεηαη ην φλνκα. Αθνινπζεί παξάδεηγκα : Page 83 of 253

84 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : ηε ζπλάξηεζε,ηελ πξψηε θνξά πνπ ρξεζηκνπνηνχκε ηελ ηηκή κε ην φλνκα x, ε Python ρξεζηκνπνηεί ηελ ηηκή ηεο παξακέηξνπ πνπ έρεη δεισζεί ζηε ζπλάξηεζε. Καηφπηλ εθρσξνχκε ηελ ηηκή 5 ζην x. Η ονομαζία x είναι ηοπική ζηη ζςνάπηηζή μαρ. Έηζη φηαλ αιιάδνπκε ηελ ηηκή ηνπ x ζηε ζπλάξηεζε, ην x πνπ νξίζηεθε ζην θχξην ηκήκα δελ επεξεάδεηαη. ηελ ηειεπηαία θιήζε ηεο ζπλάξηεζεο print, παξνπζηάδνπκε ηελ ηηκή x ζην θχξην ηκήκα θαη επηβεβαηψλνπκε φηη δελ έρεη επεξεαζηεί. Δληνιή global Δάλ ζέιεηε λα εθρσξήζεηε κηα ηηκή ζε έλα φλνκα πνπ νξίδεηαη ζην θνξπθαίν επίπεδν ηνπ πξνγξάκκαηνο (δειαδή φρη κέζα ζε θάπνηνπ είδνπο εκβέιεηα φπσο ζε ζπλαξηήζεηο ή θιάζεηο), ηφηε πξέπεη λα πείηε ζηελ Python φηη ην φλνκα δελ είλαη ηνπηθφ αιιά θαζνιηθφ (global). Απηφ γίλεηαη κε ηε ρξήζε ηεο εληνιήο global. Δίλαη αδχλαηνλ λα εθρσξήζεηε κηα ηηκή ζε κηα κεηαβιεηή πνπ νξίδεηαη εθηφο κηαο ζπλάξηεζεο ρσξίο ηελ εληνιή global. Μπνξείηε λα ρξεζηκνπνηήζεηε ηηο ηηκέο ηέηνησλ κεηαβιεηψλ πνπ νξίδνληαη έμσ απφ ηε ζπλάξηεζε (ππνζέηνληαο φηη δελ ππάξρνπλ κεηαβιεηέο κε ην ίδην φλνκα κέζα Page 84 of 253

85 ζηε ζπλάξηεζε). Χζηφζν, θάηη ηέηνην δελ πξνηείλεηαη θαη πξέπεη λα απνθεχγεηαη κηαο θαη δελ είλαη μεθάζαξν γηα ηνλ αλαγλψζηε ηνπ πξνγξάκκαηνο γηα ην πνχ βξίζθεηαη ν νξηζκφο ηεο κεηαβιεηήο. Χπηζιμοποιώνηαρ ηην ενηολή global γίνεηαι ξεκάθαπο όηι η μεηαβληηή βπίζκεηαι ζε ένα εξυηεπικό ημήμα ενηολών. Αθνινπζεί παξάδεηγκα ρξήζεο ηεο κεηαβιεηήο global : Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Η εληνιή global ρξεζηκνπνηείηαη γηα λα δειψζεη φηη ην x είλαη κηα θαζνιηθή κεηαβιεηή, γη' απηφ ην ιφγν φηαλ εθρσξνχκε κηα ηηκή γηα ην x κέζα ζηε ζπλάξηεζε, απηή ε αιιαγή απεηθνλίδεηαη φηαλ ρξεζηκνπνηνχκε ηελ ηηκή ηνπ x ζην θπξίσο ηκήκα. Μπνξείηε λα θαζνξίζεηε πεξηζζφηεξεο απφ κία θαζνιηθέο κεηαβιεηέο ρξεζηκνπνηψληαο ηελ ίδηα εληνιή global. Γηα παξάδεηγκα global x, y, z. Page 85 of 253

86 Δληνιή nonlocal Έρνπκε δεη κέρξη ηψξα πψο λα έρνπκε πξφζβαζε ζε κεηαβιεηέο ζε ηνπηθή θαη θαζνιηθή εκβέιεηα. Αιιά ππάξρεη θαη έλα άιιν είδνο εκβέιεηαο πνπ νλνκάδεηαη κε ηνπηθή εκβέιεηα (nonlocal scope) θαη είλαη κεηαμχ ησλ δπν αλσηέξσλ ηχπσλ. Οη κεηαβιεηέο κε ηνπηθήο εκβέιεηαο παξαηεξνχληαη φηαλ νξίδεηε ζπλαξηήζεηο κέζα ζηηο ζπλαξηήζεηο. Αθού όλα ζηη Python είναι εκηελέζιμορ κώδικαρ, μποπείηε να οπίζεηε ζςναπηήζειρ οποςδήποηε. Αθνινπζεί παξάδεηγκα ρξήζεο ηεο εληνιήο nonlocal : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : ηαλ είκαζηε κέζα ζηελ func_inner, ην 'x' πνπ νξίδεηαη ζηελ πξψηε γξακκή ηνπ func_outer, ζρεηηθά δελ είλαη νχηε ζε ηνπηθή νχηε ζε θαζνιηθή εκβέιεηα. Γειψλνπκε φηη ρξεζηκνπνηνχκε απηφ ην x κε ην nonlocal x θαη έηζη απνθηνχκε πξφζβαζε ζε απηή ηε κεηαβιεηή. Αιιάδνληαο ην nonlocal x ζε global x, θαη επίζεο κεηαθηλψληαο ηελ ίδηα ηελεληνιή, παξαηεξνχκε ηε δηαθνξά ζηελ ζπκπεξηθνξά ζε απηέο ηηο δχν πεξηπηψζεηο. Page 86 of 253

87 Πξνεπηιεγκέλεο ηηκέο νξίζκαηνο ε θάπνηεο ζπλαξηήζεηο ίζσο λα ζέινπκε λα θάλνπκε κεξηθέο παξακέηξνπο ηνπο πξναηξεηηθέο θαη λα ρξεζηκνπνηήζνπκε πξνεπηιεγκέλεο ηηκέο εάλ ν ρξήζηεο δε ζέιεη λα δψζεη ηηκέο ζε ηέηνηεο παξακέηξνπο. Απηφ κπνξεί λα επηηεπρζεί κε ηε βνήζεηα ησλ πξνεπηιεγκέλσλ ηηκψλ νξίζκαηνο. Μπνξείηε λα θαζνξίζεηε πξνεπηιεγκέλεο ηηκέο νξηζκάησλ γηα παξακέηξνπο, ηνπνζεηψληαο κεηά ην φλνκα ηεο παξακέηξνπ ζηνλ νξηζκφ ηεο ζπλάξηεζεο ηνλ ηειεζηή εθρψξεζεο (=) λα αθνινπζείηαη απν ηελ πξνεπηιεγκέλε ηηκή. Η προεπιλεγμζνθ τιμι ορίςματοσ πρζπει να είναι μια ςτακερά. Για τθν ακρίβεια θ προεπιλεγμζνθ τιμι ορίςματοσ πρζπει να είναι αμετάβλθτθ. ηε ζπλέρεηα αθνινπζεί ζρεηηθφ παξάδεηγκα : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα: Η ζπλάξηεζε κε ην φλνκα say ρξεζηκνπνηείηαη γηα λα ηππψζεη κηα ζπκβνινζεηξά, ηφζεο θνξέο φζεο έρεη θαζνξηζηεί. Δάλ δελ έρεη δνζεί ηηκή,ηφηε απφ πξνεπηινγή ε ζπκβνινζεηξά ηππψλεηαη κηα θνξά. Απηφ ην πεηπραίλνπκε θαζνξίδνληαο κηα πξνεπηιεγκέλε ηηκή ίζε κε 1 γηα ηε παξάκεηξν times. Page 87 of 253

88 ηελ πξψηε ρξήζε ηεο ζπλάξηεζεο say παξέρνπκε κφλν ηε ζπκβνινζεηξά θαη ηππψλεη ηε ζπκβνινζεηξά κφλν κηα θνξά. ηε δεχηεξε ρξήζε ηεο say παξέρνπκε θαη ηε ζπκβνινζεηξά θαη έλα φξηζκα 5 δειψλνληαο έηζη φηη ζέινπκε λα πνχκε (say) ην κήλπκα ηεο ζπκβνινζεηξάο 5 θνξέο.ηελ ηξίηε ρξήζε ηεο say παξέρνπκε ηε ζπκβνινζεηξά θαη έλα φξηζκα 7 δειψλνληαο έηζη φηη ζέινπκε λα πνχκε (say) ην κήλπκα ηεο ζπκβνινζεηξάο απηήο 7 θνξέο. Μόνο ςε εκείνεσ τισ παραμζτρουσ, οι οποίεσ βρίςκονται ςτο τζλοσ τθσ λίςτασ παραμζτρων, μποροφν να δοκοφν προεπιλεγμζνεσ τιμζσ ορίςματοσ, δθλαδι δε μποροφμε να ζχουμε μια παράμετρο με προεπιλεγμζνθ τιμι ορίςματοσ πριν από μια παράμετρο χωρίσ προεπιλεγμζνθ τιμι ορίςματοσ, ςτθ ςειρά των παραμζτρων που ζχουν δθλωκεί ςτθ λίςτα παραμζτρων τθσ ςυνάρτθςθσ. Αυτό ςυμβαίνει διότι οι τιμζσ εκχωροφνται ςτισ παραμζτρουσ με τθ κζςθ τουσ. Για παράδειγμα θ def func(a, b=5) ιςχφει αλλά θ def func(a=5, b) δεν ιςχφει. Οξίζκαηα κε ιέμεηο-θιεηδηά (Keyword Arguments) Δάλ έρεηε θάπνηεο ζπλαξηήζεηο κε πνιιέο παξακέηξνπο θαη ζέιεηε λα θαζνξίζεηε κε αθξίβεηα κφλν κεξηθέο απφ απηέο,ηφηε κπνξείηε λα δψζεηε ηηκέο γηα ηέηνηεο παξακέηξνπο νλνκάδνληαο απηέο, δει. ρξεζηκνπνηείηε ηελ νλνκαζία (keyword) αληί ηεο ζέζεο ηνπο (πνπ έρνπκε ρξεζηκνπνηήζεη ζε φια ηα άιια) γηα λα θαζνξίζνπκε ηα νξίζκαηα ζηε ζπλάξηεζε. Έηζη έρνπκε δύο πλεονεκηήμαηα: 1. Η ρξήζε ηεο ζπλάξηεζεο γίλεηαη επθνιφηεξε επεηδή δελ ρξεηάδεηαη λα αλεζπρνχκε γηα ηε δηάηαμε ησλ νξηζκάησλ. 2. Μπνξνχκε λα δψζνπκε ηηκέο κφλν ζε εθείλεο ηηο παξακέηξνπο πνπ ζέινπκε, πξνλνψληαο φηη νη άιιεο παξάκεηξνη έρνπλ ηηο πξνεπηιεγκέλεο ηηκέο νξίζκαηνο. Page 88 of 253

89 Αθνινπζεί παξάδεηγκα νξίζκαηνο κε ιέμεηο-θιεηδηά : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Η ζπλάξηεζε κε ηελ νλνκαζία func έρεη κηα παξάκεηξν ρσξίο πξνεπηιεγκέλε ηηκή νξίζκαηνο θαη αθνινπζείηαη απφ δχν παξακέηξνπο κε πξνεπηιεγκέλεο ηηκέο νξίζκαηνο. ηελ πξψηε ρξήζε, func(4, 9) ε παξάκεηξνο a παίξλεη ηελ ηηκή 4, ε παξάκεηξνο b παίξλεη ηελ ηηκή 9 θαη ε c 13. ηελ δεχηεξε ρξήζε func(35, c=34), ε κεηαβιεηή a παίξλεη ηελ ηηκή ηνπ 35 εμαηηίαο ηεο ζέζεο ηνπ νξίζκαηνο. Καηφπηλ ε παξάκεηξνο c παίξλεη ηελ ηηκή ηνπ 34 εμαηηίαο ηεο νλνκαζίαο δει. νξίζκαηα κε ιέμεηο θιεηδηά. Η κεηαβιεηή b παίξλεη ηελ πξνεπηιεγκέλε ηηκή ηνπ 7. ηελ ηξίηε ρξήζε func(c=40, a=80),ρξεζηκνπνηνχκε κφλν νξίζκαηα κε ιέμεηο θιεηδηά γηα λα θαζνξίζνπκε ηηο ηηκέο. εκεηψζηε φηη θαζνξίδνπκε ηηκή γηα ηελ παξάκεηξν c πξηλ θαζνξίζνπκε γηα ηελ a αθφκα θη αλ ε a είλαη νξηζκέλε πξηλ απφ ηε c ζηνλ νξηζκφ ηεο ζπλάξηεζεο. Παξάκεηξνη κόλν κε ιέμεηο-θιεηδηά Αλ ζέινπκε λα θαζνξίζνπκε παξακέηξνπο κε ιέμεηο-θιεηδηά έηζη ψζηε λα είλαη δηαζέζηκεο κφλνλ ζαλ ιέμεηο θιεηδηά θαη φρη ζαλ νξίζκαηα ζε ζπγθεθξηκέλεο ζέζεηο, ηφηε απηέο πξέπεη λα δεισζνχλ κεηά απφ κηα παξάκεηξν αζηεξίζθν. Page 89 of 253

90 Αθνινπζεί ζρεηηθφ παξάδεηγκα : Πψο δνπιεχεη πν παξαπάλσ πξφγξακκα : Η δήισζε παξακέηξσλ κεηά απφ κηα παξάκεηξν κε αζηεξίζθν, έρεη σο απνηέιεζκα νξίζκαηα κε ιέμεηο θιεηδηά κφλν. Δάλ ζε απηά ηα νξίζκαηα δε δίλεηαη κηα πξνεπηιεγκέλε ηηκή, ηφηε νη θιήζεηο ζηε ζπλάξηεζε ζα δψζνπλ ζθάικα εάλ ην φξηζκα κε ιέμε-θιεηδη δελ δίλεηαη, φπσο θαίλεηαη θαη παξαπάλσ. Δάλ ζέιεηε λα έρεηε νξίζκαηα κε ιέμεηο-θιεηδηά κφλνλ αιιά δελ ρξεηάδεζηε κηα παξάκεηξν κε αζηεξίζθν, ηφηε ρξεζηκνπνηείηε κφλν ηνπ ηνλ αζηεξίζθν ρσξηο θακία νλνκαζία, φπσο ην def total(initial=5, *,vegetables). Η εληνιή return Η εληνιή return ρξεζηκνπνηείηαη γηα λα έρνπκε επηζηξνθή απφ κηα ζπλάξηεζε, δειαδή λα βγνχκε απφ ηε ζπλάξηεζε. Μπνξνχκε επίζεο, πξναηξεηηθά, λα επηζηξέςνπκε κηα ηηκή απφ ηελ ζπλάξηεζε. Αο δνχκε δχν παξαδείγκαηα : Page 90 of 253

91 1 ν παξάδεηγκα : Η ζπλάξηεζε maximum επηζηξέθεη ην κέγηζην (maximum) ησλ παξακέηξσλ, θαη ζε απηή ηελ πεξίπησζε ησλ αξηζκψλ πνπ παξέρνληαη ζηε ζπλάξηεζε. Υξεζηκνπνηεί κηα απιή εληνιή if..else γηα λα βξεη ηε κεγαιχηεξε ηηκή θαη κεηά επηζηξέθεη απηή ηελ ηηκή. 2 ν παξάδεηγκα : Page 91 of 253

92 Γεκηνπξγνχκε κία δεχηεξε, πνιχ απιή ζπλάξηεζε ε νπνία ιακβάλεη ζηελ είζνδν έλα εκβαδφ θαη ηππψλεη έλα εηδηθά δηακνξθσκέλν κήλπκα.ηε ζπλέρεηα, ζηελ ηηκή mydata αλαηίζεηαη ην απνηέιεζκα ηεο ζπλάξηεζεο ππνινγηζκνχ ηνπ εκβαδνχ.καη ηέινο, ηέινο ηξνθνδνηνχκε ην πεξηερφκελν ηνπ mydata ζηελ ζπλάξηεζε εθηχπσζεο. Δπηζηξνθή ηνπ απνηειέζκαηνο αληί γηα εθηχπσζε def triangle_area_return(a, b): area = a * b / 2 return area υνάρτθςθ υπολογιςμοφ του εμβαδοφ ε απηήλ ηελ εθδνρή ηεο ζπλάξηεζήο καο ν πξνζεθηηθφο αλαγλψζηεο παξαηεξεί (εθηφο απφ ην δηαθνξεηηθφ φλνκα ηεο ζπλάξηεζεο) κία αθφκε ζεκαληηθή δηαθνξά. Αληί γηα ηε γξακκή εθηχπσζεο ηνπ απνηειέζκαηνο, ρξεζηκνπνηνχκε ηελ δεζκεπκέλε ιέμε return. Απηή ε αιιαγή έρεη ζαλ απνηέιεζκα ε ηηκή ηνπ απνηειέζκαηνο λα επηζηξέθεηαη αληί λα εθηππψλεηαη. Έηζη, αλ ζέινπκε λα εκθαλίζνπκε ην απνηέιεζκα ηεο ζπλάξηεζεο απηήο ζα πξέπεη λα εθηειέζνπκε ηελ παξαθάησ γξακκή θψδηθα: print( triangle_area_return( 10, 10 ) ) ηελ πξάμε, δνθηκάδνληαο λα εθηειέζνπκε ηελ ίδηα γξακκή ρσξίο λα πεξηθιείεηαη απφ ηελ εληνιή print( ) θαη ζα δηαπηζηψζεηε φηη ηίπνηε δε ζπκβαίλεη. Page 92 of 253

93 ΚΑΙ Kάζε ζπλάξηεζε ζησπεξά πεξηέρεη κηα εληνιή return None ζην ηέινο ηεο εθηφο θη αλ έρνπκε γξάςεη ηε δηθή καο εληνιή επηζηξνθήο. Απηφ κπνξείηε λα ην δείηε ηξέρνληαο ηελ print(somefunction()) φπνπ ε ζπλάξηεζε somefunction δε ρξεζηκνπνηεί ηελ εληνιή return: def somefunction(): pass Η εληνιή pass ρξεζηκνπνηείηαη ζηελ Python γηα λα δείμεη έλα άδεην ηκήκα εληνιψλ. Page 93 of 253

94 πκβνινζεηξέο ηεθκεξίσζεο (DocStrings) Η Python έρεη έλα ζαπκάζην ραξαθηεξηζηηθφ πνπ νλνκάδεηαη ζπκβνινζεηξέο ηεθκεξίσζεο (documentation strings) θαη ζπλήζσο αλαθέξεηαη κε ηε ζπληνκνγξαθία DocStrings. Οη ζπκβνινζεηξέο ηεθκεξίσζεο είλαη έλα ζπνπδαίν εξγαιείν πνπ πξέπεη λα ρξεζηκνπνηείηε δηφηη βνεζάεη λα ηεθκεξηψζεηε ην πξφγξακκα θαιχηεξα θαη έηζη γίλεηαη πην εχθνια θαηαλνεηφ. Σν εληππσζηαθφ είλαη φηη μποπούμε να πάποςμε επιζηποθή ηη ζςμβολοζειπά ηεκμηπίυζηρ από μια ζςνάπηηζη για παπάδειγμα, ενώ ηο ππόγπαμμα ππαγμαηικά ηπέσει! Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Mία ζπκβνινζεηξά ζηελ πξψηε ινγηθή γξακκή ηεο ζπλάξηεζεο είλαη ε ζπκβνινζεηξά ηεθκεξίσζεο γηα απηή ηε ζπλάξηεζε. εκεηψζηε φηη νη ζπκβνινζεηξέο ηεθκεξίσζεο εθαξκφδνληαη θαη ζηα αξζξψκαηα (modules) θαη ζηηο θιάζεηο (classes), ηα νπνία ζα κειεηήζνπκε ζηε ζπλέρεηα. Η ζχκβαζε πνπ αθνινπζείηαη γηα κηα ζπκβνινζεηξά ηεθκεξίσζεο είλαη κηα ζπκβνινζεηξά πνιιψλ γξακκψλ, φπνπ ε πξψηε γξακκή αξρίδεη κε έλα θεθαιαίν Page 94 of 253

95 γξάκκα θαη ηειεηψλεη κε κηα ηειεία. Καηφπηλ ε δεχηεξε γξακκή είλαη θελή θαη αθνινπζεί ε ηξίηε γξακκή πνπ έρεη θάζε ιεπηνκεξή εμήγεζε. Πξνηείλεηαη λα αθνινπζείηε αθξηβψο απηή ηε ζχκβαζε γηα φιεο ηηο ζηνηρεηνζεηξέο ηεθκεξίσζεο πνπ αθνξνχλ φιεο ηηο κε ηεηξηκκέλεο ζπλαξηήζεηο (non-trivial functions). Μπνξνχκε λα έρνπκε πξφζβαζε ζηε ζπκβνινζεηξά ηεθκεξίσζεο ηεο ζπλάξηεζεο printmax ρξεζηκνπνηψληαο ην ηδηνραξαθηεξηζηηθφ (νλνκαζία πνπ αλήθεη ζε) doc (ζεκεηψζηε ηηο δηπιέο θάησ παχιεο) ηεο ζπλάξηεζεο. Θπκεζείηε φκσο φηη ε Python αληηκεησπίδεη ηα πάληα ζαλ αληηθείκελα, θαη απηφ ζπκπεξηιακβάλεη θαη ηηο ζπλαξηήζεηο. help() ζηελ Python ρξήζε ησλ ζπκβνινζεηξψλ ηεθκεξίσζεο. Απηφ πνπ θάλεη ε help() είλαη λα θέξλεη ην ηδηνραξαθηεξηζηηθφ doc ηεο ζπλάξηεζεο θαη λα ην εκθαλίδεη κε έλα θαινθηηαγκέλν ηξφπν. Mπνξνχκε λα ην δνθηκάζνπκε ζηελ παξαπάλσ ζπλάξηεζε αξθεί λα ζπκπεξηιάβνπκε ηελ help(printmax) ζην πξφγξακκά καο. Μεξηθά απηνκαηνπνηεκέλα εξγαιεία κπνξνχλ λα αλαθηήζνπλ ηελ ηεθκεξίσζε απφ ην πξφγξακκά ζαο κε απηφλ ηνλ ηξφπν. πλεπψο ζπληζηάηαη λα ρξεζηκνπνηείηε ζπκβνινζεηξέο ηεθκεξίσζεο ζε θάζε κε ηεηξηκκελε ζπλάξηεζε πνπ γξάθεηε. Η εληνιή pydoc πνπ ζπλνδεχεη ηελ Python ιεηηνπξγεί παξόκνηα κε ηε help() ρξεζηκνπνηψληαο ηηο docstrings. Page 95 of 253

96 Δπηπιένλ παξάδεηγκα ηελ Python, ππάξρεη ε ζχκβαζε αθνχ νξίζνπκε κηα ζπλάξηεζε λα πεξηγξάθνπκε ρξεζηκνπνηψληαο έλα αιθαξηζκεηηθφ ην νπνίν κπνξεί λα ζπλερηζηεί ζε παξαπάλσ απφ κηα γξακκέο, ην ζθνπφ ηεο ζπλάξηεζεο. πλήζσο, θαη αθνινπζψληαο ην ΡΔΡ 257, ε πξψηε γξακκή είλαη ζε πξνζηαθηηθή θαη αλαθέξεηαη ζην ηη ζέινπκε λα θάλεη ε ζπλάξηεζε ελψ ζηε ζπλέρεηα θαη αθήλνληαο κηα γξακκή θελή, κπνξνχκε λα εμεγήζνπκε (πξναηξεηηθά) κε πεξηζζφηεξα ιφγηα ηελ ζπλάξηεζή καο. Αλ αθνινπζνχκε απηφ ηνλ ηξφπν πεξηγξαθήο ησλ ζπλαξηήζεψλ καο, ηφηε ππάξρνπλ αξθεηά απηφκαηα εξγαιεία πνπ ζα παξάγνπλ απηφκαηα ηελ ηεθκεξίσζε ηνπ θψδηθά καο ζε κηα θηιηθή κνξθή κε βάζε ηηο ζπκβνινζεηξέο ηεθκεξίσζεο. Αληίζεηα κε απηέο, ηα απιά ζρφιηα αγλννχληαη. Αλώλπκεο ζπλαξηήζεηο Τπάξρνπλ θνξέο πνπ ζέινπκε λα νξίζνπκε κηα ζπλάξηεζε ψζηε λα ηελ πεξάζνπκε σο φξηζκα θάπνπ αιινχ. Παξάδεηγκα απνηεινχλ νη αιγφξηζκνη ηαμηλφκεζεο ζηνπο νπνίνπο κπνξνχκε λα πεξλάκε δηθέο καο ζπλαξηήζεηο ζχγθξηζεο ζηνηρείσλ. Γηα απηφ ηνλ ιφγν, ππάξρνπλ νη αλψλπκεο ζπλαξηήζεηο. ηε ζπλέρεηα, παξαζέησ έλα παξάδεηγκα γηα ην πψο κεηαηξέπνπκε κηα ζπλάξηεζε ζε αλψλπκε. Page 96 of 253

97 Δμήγεζε Θα ρξεζηκνπνηήζνπκε ηε ιέμε θιεηδί lambda απφ ην ειιεληθφ γξάκκα ι. Απηφο ν φξνο ρξεζηκνπνηείηαη σο αλαθνξά ζε θιάδν ησλ καζεκαηηθψλ πνπ αζρνιείηαη κε ζπλαξηήζεηο. Πξαθηηθά, ε ιέμε lambda αληηθαζηζηια ηε ιέμε θιεηδί def. ηε ζπλέρεηα παξαιείπνπκε ην φλνκα ηεο ζπλάξηεζεο θαζψο θαη ηηο παξελζέζεηο γχξσ απφ ηα νξίζκαηα. Σέινο, γξάθνπκε ηη επηζηξέθεη ε ζπλάξηεζε, ρσξίο φκσο λα ρξεζηκνπνηνχκε ηε ιέμε θιεηδί return. Γηαθνζκεηέο (Decorators) Οη δηαθνζκεηέο είλαη εηδηθέο ζπλαξηήζεηο ζηηο νπνίεο κπνξνχκε λα ρξεζηκνπνηήζνπκε αλ ζέινπκε λα θάλνπκε θάηη επηπξφζζεην πξηλ ή κεηά ηελ θιήζε κηαο ζπλάξηεζεο. Γηα παξάδεηγκα αλ ζέινπκε ην απνηέιεζκα κηα ζπλάξηεζεο λα ην πξνζαξκφζνπκε ζε κηα ζπγθεθξηκέλε δηακφξθσζε, ή αλ ζέινπκε λα αιιάμνπκε ηελ ζεηξά ησλ πεξηερνκέλσλ ζε κηα ιίζηα ψζηε λα δεκηνπξήζνπκε έλαλ ηπραηνπνηεκέλν αιγφξηζκν (randomized algorithm). Ο ιφγνο πνπ απηφ είλαη εθηθηφ είλαη επεηδή ζηελ Python ηα πάληα είλαη αληηθείκελα. Δπνκέλσο θαη ηηο ζπλαξηήζεηο κπνξνχκε λα ηηο ρξεζηκνπνηήζνπκε σο αληηθείκελα. Μέρξη ηψξα είρακε ζπλεζίζεη λα ρξεζηκνπνηνχκε πάληα κηα ζπλάξηεζε κε ηηο παξελζέζεηο δίπια ηεο. Έηζη, φηαλ θαιέζνπκε ηελ ζπλάξηεζε, εθηειείηαη ην ζψκα ηεο. Αλ δελ ρξεζηκνπνηήζνπκε απηέο ηηο παξελζέζεηο, ηφηε αλαθεξφκαζηε απεπζείαο ζην αληηθείκελν πνπ πξνζδηνξίδεη απηή. Έηζη ινηπφλ, παίξλνληαο απηφ ην φξηζκα σο αληηθείκελν ζε κηα άιιε ζπλάξηεζε είλαη δπλαηφ ηειηθά λα Page 97 of 253

98 ηξνπνπνηήζνπκε ηα απνηειέζκαηα πνπ εμάγνληαη ή ηα νξίζκαηα πνπ πεξληνχληαη ζε απηή ηε ζπλάξηεζε. Οη δηαθνζκεηέο είλαη έλα ηδίσκα ηεο Python πνπ επηηξέπεη ηελ θιήζε θάπνηαο ζπλάξηεζεο ε νπνία ηξνπνπνηεί ειαθξψο ηελ ζπκπεξηθνξά ηεο ζπλάξηεζεο πνπ θαινχκε. Γηα λα γίλεη απηφ πην μεθάζαξν, παξαζέησ έλα παξάδεηγκα πνπ έρεη ηελ ίδηα ζπκπεξηθνξά. ην 1o παξάδεηγκα,θαινχκε απιά άιιε κηα ζπλάξηεζε ψζηε λα ηξνπνπνηεζεί ε έμνδνο, ελψ ζην 2o παξάδεηγκα θάλνπκε αθξηβψο ην ίδην πξάγκα κε ηελ ρξήζε δηαθνζκεηψλ (decorators). 1 ν παξάδεηγκα : Μπνξνχκε λα νξίζνπκε κηα θαηλνχξηα ζπλάξηεζε g κέζα ζε κηα πξνυπάξρνπζα ζπλάξηεζε f. Έηζη ε g θαίλεηαη κφλν κέζα ζηελ ζπλάξηεζε f. ην παξαπάλσ παξάδεηγκα, βιέπνπκε φηη κέζα ζηελ ζπλάξηεζε makebold() νξίδεηαη ε ζπλάξηεζε wrapped(). Πξνζνρή πξέπεη λα δνζεί ζην φηη δε θαιείηαη απηφκαηα ε ζπλάξηεζε wrapped() κε ηνλ νξηζκφ ηεο. Πξέπεη λα ηελ θαιέζνπκε εκείο ξεηά ζην ζεκείν πνπ ηελ ρξεηαδφκαζηε. Δπίζεο, δελ ρξεηάδεηαη λα πεξάζνπκε σο φξηζκα ην αληηθείκελν fn ζηελ wrapped() ψζηε λα κπνξέζνπκε λα θάλνπκε πάμεηο κε απηφ. Η wrapped() ην βιέπεη ήδε θαζψο εκπεξηέρεηαη ζην ζψκα ηεο makebold νπφηε ζην πεξηβάιινλ ηεο είλαη φηηδήπνηε έρεη ην πεξηβάιινλ ηεο makebold(). Page 98 of 253

99 Ίζσο θαλεί παξάμελν φηη ζην message εθρσξνχκε ηελ makebold(message). πσο είπακε θαη πξηλ, ζηελ Python είλαη φια αληηθείκελα. πλεπψο, κε ηελ makebold(message) έρνπκε δεκηνπξγήζεη κηα θαηλνχξγηα ζπλάξηεζε ηελ νπνία εθρσξνχκε ζηελ message. Έηζη πιένλ ε message δείρλεη ζε θαηλνχξγηα πεξηερφκελα πηα θαη έρεη ηξνπνπνηεκέλε ζπκπεξηθνξά, ηελ νπνία θαη βιέπνπκε φηαλ εθηππψλνπκε φ,ηη επηζηξέθεη. Απηφ πνπ θάλεη ε makebold(), είλαη πσο κέζα ηεο δεκηνπξγείηαη κηα ζπλάξηεζε wrapped(). H wrapped() ρξεζηκνπνηεί ην φξηζκα ηεο makebold() θαη ζπλελψλεη ην string πνπ επηζηξέθεη ε fn κε θάπνηα άιια. Σν ηειηθφ αληηθείκελν πνπ δεκηνπξγείηαη επηζηξέθεηαη. Δπεηδή απηφ ην αληηθείκελν είλαη ζπλάξηεζε, εκείο κπνξνχκε λα ην αλαζέζνπκε ζε κηα κεηαβιεηή θαη ζηελ ζπλέρεηα λα ην ρξεζηκνπνηήζνπκε θαλνληθά ζαλ ζπλάξηεζε. Η ίδηα ιεηηνπξγηθφηεηα, κε πην «θνκςφ» θψδηθα επηηπγράλεηαη φπσο θαίλεηαη ζην παξάδεηγκα πνπ αθνινπζεί κε ηελ ρξήζε δηαθνζκεηψλ. 2 ν παξάδεηγκα : Σν απνηέιεζκα είλαη ΑΚΡΙΒΧ ΣΟ ΙΓΙΟ, κφλν πνπ ζε απηή ηελ πεξίπησζε πηηλ νξίζνπκε ηελ ζπλάξηεζε message() ρξεζηκνπνηνχκε ηνλ δηαθνζκεηή ν νπνίνο πξνζδηνξίδεη ηελ ζπκπεξηθνξά πνπ απηφο πεξηγξάθεη θαη ζα πεξηιακβάλεη ε ζπλάξηεζή καο, θαη ζηελ ζπλέρεηα πινπνηνχκε θαλνληθά ηελ ζπλάξηεζε. Απφ εθεί θαη πέξα, φπνπε θαινχκε ηελ ζπλάξηεζε message(), απηή ζα πεξηιακβάλεη θαη ηε ζπκπεξηθνξά πνπ νξίδεηαη απφ ηελ makebold. Page 99 of 253

100 Αξζξώκαηα Έρεηε δεη πψο κπνξείηε λα επαλαρξεζηκνπνηήζεηε θψδηθα ζην πξφγξακκά ζαο νξίδνληαο κηα θνξά ζπλαξηήζεηο. Ση θάλεηε φκσο αλ ζέιεηε λα επαλαρξεζηκνπνηήζεηε έλαλ αξηζκφ ζπλαξηήζεσλ ζε άιια πξνγξάκκαηα πνπ γξάθεηε; πσο ίζσο έρεηε καληέςεη ε απάληεζε είλαη ηα απθπώμαηα. Τπάξρνπλ δηάθνξεο κεζφδνη γαη λα γξάθεηε αξζξψκαηα, αιιά ν απινχζηεξνο ηξφπνο είλαη δεκηνπξγώληαο έλα αξρείν κε επέθηαζε.py ην νπνίν ζα πεξηέρεη ζπλαξηήζεηο θαη κεηαβιεηέο. Έλαο άιινο ηξφπνο είλαη λα γξάθεηε ηα αξζξψκαηα ζηελ αξρηθή γιψζζα ζηελ νπνία γξάθηεθε o δηεξκελεπηήο ηεο Python. Γηα παξάδεηγκα κπνξείηε λα γξάςεηε αξζξψκαηα ζηε γιψζζα πξνγξακκαηηζκνχ C θαη κφιηο κεηαγισηηζηνχλ, λα ρξεζηκνπνηεζνχλ απφ ηνλ θψδηθα πνπ γξάθεηε ζε Python φηαλ ρξεζηκνπνηείηε ηνλ πξφηππν δηεξκελεπηή ηεο Python. Έλα άξζξσκα κπνξεί λα εηζαρζεί απφ έλα άιιν πξφγξακκα γηα λα θάλνπκε ρξήζε ηεο ιεηηνπξγηθφηεηάο ηνπ. Έηζη κπνξνχκε λα ρξεζηκνπνηήζνπκε επίζεο ηελ πξφηππε βηβιηνζήθε ηεο Python. Aξρηθά ζα δνχκε πψο λα ρξεζηκνπνηνχκε ηα αξζξψκαηα ηεο πξφηππεο βηβιηνζήθεο. Αθνινπζεί παξάδεηγκα : Page 100 of 253

101 Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : Aξρηθά εηζάγεηε ην άξζξσκα sys ρξεζηκνπνηψληαο ηελ εληνιή import. Καηά θχξην ιφγν απηφ γηα ηελ Python ζεκαίλεη φηη ζέινπκε λα ρξεζηκνπνηήζνπκε απηφ ην άξζξσκα. Σν άξζξσκα sys πεξηέρεη ιεηηνπξγηθφηεηα πνπ έρεη ζρέζε κε ηνλ δηεξκελεπηή ηεο Python θαη ην πεξηβάιινλ ηνπ δει. ην system. ηαλ ε Python εθηειεί ηελ εληνιή import sys, ςάρλεη γηα ην άξζξσκα sys. ε απηή ηελ πεξίπησζε, είλαη έλα απφ ηα ελζσκαησκέλα αξζξψκαηα, θαη γη απηφ ε Python μέξεη πνπ ζα ην βξεη. Δάλ δελ ήηαλ έλα ελζσκαησκέλν άξζξσκα δει. έλα άξζξσκα γξακκέλν ζε Python, ηφηε ν δηεξκελεπηήο ηεο Python ζα ην έςαρλε ζηνπο θαηαιφγνπο πνπ βξίζθνληαη ζηε κεηαβιεηή sys.path. Δάλ ην άξζξσκα βξεζεί ηφηε νη εληνιέο ζην θπξίσο ηκήκα ηνπ αξζξψκαηνο ηξέρνπλ θαη ηφηε ην άξζξσκα ζαο γίλεηαη δηαζέζηκν γηα λα ην ρξεζηκνπνηήζεηε. εκεηψζηε φηη ε αξρηθνπνίεζε γίλεηαη κφλν ηελ πξψηε θνξά πνπ εηζάγνπκε έλα άξζξσκα. Η κεηαβιεηή argv ζην άξζξσκα sys εηζάγεηαη ρξεζηκνπνηψληαο ζπκβνιηζκφ κε ηειείεο δει. sys.argv. Απηφ δείρλεη μεθάζαξα φηη απηή ε νλνκαζία είλαη κέξνο ηνπ αξζξψκαηνο sys. Έλα αθφκα πιενλέθηεκα απηήο ηεο πξνζέγγηζεο είλαη φηη απηή ε νλνκαζία δελ ζπγθξνχεηαη κε θακκία άιιε κεηαβιεηή argv πνπ ρξεζηκνπνηείηαη ζην πξφγξακκά ζαο. Η κεηαβιεηή sys.argv είλαη κηα ιίζηα ζπκβνινζεηξψλ. Eηδηθά ε sys.argv πεξηέρεη ηνλ θαηάινγν ησλ νξηζκάησλ ηεο γξακκήο εληνιψλ (command line arguments) δει. ηα νξίζκαηα πνπ έρνπλ πεξάζεη ζην πξφγξακκά ζαο ρξεζηκνπνηψληαο ηελ γξακκή εληνιψλ. Δάλ ρξεζηκνπνηείηε θάπνην IDE (Integrated Development Enviroment δει. νινθιεξσκέλν πεξηβάιινλ αλάπηπμεο) φπσο εγψ ζηελ παξνχζα εξγαζία, γηα λα γξάςεηε θαη λα ηξέμεηε απηά ηα πξνγξάκκαηα, ςάμηε ζηα κελνχ γηα έλαλ ηξφπν λα θαζνξίδεηε νξίζκαηα γξακκήο εληνιψλ ζην πξφγξακκα. Δδψ φηαλ εθηεινχκε python using_sys.py we are arguments, ηξέρνπκε ην άξζξσκα using_sys.py κε ηελ εληνιή python θαη ηα άιια ζηνηρεία πνπ αθνινπζνχλ είλαη νξίζκαηα πνπ πεξλνχλ ζην πξφγξακκα. Η Python απνζεθεχεη ηα νξίζκαηα ηεο γξακκήο εληνιψλ ζηε κεηαβιεηή sys.argv γηα λα ηα ρξεζηκνπνηήζεηε. Θπκεζείηε φηη ε νλνκαζία ηνπ ζελαξίνπ εληνιψλ πνπ ηξέρεη είλαη πάληα ην πξψην φξηζκα ζηε ιίζηα sys.argv. Έηζη ζε απηή ηελ πεξίπησζε ζα έρνπκε ην 'using_sys.py' ζαλ sys.argv[0], ην 'we' ζαλ sys.argv[1], ην 'are' ζαλ sys.argv[2] θαη ην 'arguments' ζαλ sys.argv[3]. εκεηψζηε φηη ε Python αξρίδεη λα κεηξάεη από ην 0 θαη όρη από ην 1. Page 101 of 253

102 Σν sys.path πεξηέρεη ηε ιίζηα κε ηα νλφκαηα θαηαιφγσλ απφ φπνπ εηζάγνληαη ηα αξζξψκαηα. Παξαηεξήζηε φηη ε πξψηε ζπκβνινζεηξά ζην sys.path είλαη άδεηα. Απηή ε άδεηα ζπκβνινζεηξά δείρλεη φηη ν ηξέρσλ θαηάινγνο είλαη επίζεο κέξνο ηνπ sys.path, o νπνίνο είλαη ην ίδην κε ηε κεηαβιεηή πεξηβάιινληνο PYTHONPATH. Απηφ ζεκαίλεη φηη κπνξείηε απεπζείαο λα εηζάγεηε αξζξψκαηα πνπ βξίζθνληαη ζηνλ ηξέρνληα θαηάινγν. Γηαθνξεηηθά πξέπεη λα ηνπνζεηήζεηε ην άξζξσκά ζαο ζε έλαλ απφ ηνπο θαηαιφγνπο πνπ βξίζθνληαη ζην sys.path. εκεηψζηε φηη ν ηξέρσλ θαηάινγνο είλαη ν θαηάινγνο απφ φπνπ ην πξφγξακκα εθθηλείηαη. Σξέμηε import os; print(os.getcwd()) γηα λα βξείηε ηνλ ηξέρνληα θαηάινγν ηνπ πξνγξάκκαηφο ζαο. Μεηαγισηηηζκέλα Βyte αξρεία κε επέθηαζε.pyc Η εηζαγσγή ελφο αξζξψκαηνο είλαη κηα ππφζεζε πνπ θνζηίδεη, έηζη ε Python θάλεη κεξηθά θφιπα γηα λα ην θάλεηε γξεγνξφηεξα. Έλαο ηξφπνο είλαη ε δεκηνπξγία κεηαγισηηηζκέλσλ byte αξρείσλ (byte-compiled files) κε ηελ επέθηαζε.pyc ε νπνία είλαη κηα ελδηάκεζε κνξθή ζηελ νπνία ε Python κεηαηξέπεη ην πξφγξακκα. Απηφ ην αξρείν κε επέθηαζε.pyc είλαη ρξήζηκν ηελ επφκελε θνξά πνπ ζα εηζάγεηε ην άξζξσκα απφ έλα δηαθνξεηηθφ πξφγξακκα. Απηφ ζα είλαη πνιχ ηαρχηεξν γηαηί έλα ηκήκα ηεο δηεξγαζίαο γηα ηελ εηζαγσγή ελφο αξζξψκαηνο έρεη ήδε γίλεη. Δπίζεο ηα byte-compiled αξρεία είλαη αλεμάξηεηα πιαηθόξκαο (platform-independent). Σα αξρεία.pyc ζπλήζσο δεκηνπξγνχληαη ζηνλ ίδην θαηάινγν κε ηα αληίζηνηρα αξρεία.py. Δάλ ε Python δελ έρεη άδεηα γηα λα γξάςεη ζε αξρεία ζε απηφλ ηνλ θαηάινγν, ηφηε ηα αξρεία.pyc δε ζα δεκηνπξγεζνχλ. Η εληνιή from... import... Eάλ ζέιεηε λα εηζάγεηε απεπζείαο ηε κεηαβιεηή argv κέζα ζην πξφγξακκά ζαο (γηα λα απνθχγεηε ηελ πιεθηξνιφγεζε ηνπ sys. θάζε θνξά), ηφηε κπνξείηε λα ρξεζηκνπνηήζεηε ηελ εληνιή from sys import argv. Δάλ ζέιεηε λα εηζάγεηε φιεο ηηο νλνκαζίεο πνπ ρξεζηκνπνηνχληαη ζην άξζξσκα sys, ηφηε κπνξείηε λα ρξεζηκνπνηήζεηε ηελ εληνιή from sys import *. Απηφ ιεηηνπξγεί ζε θάζε άξζξσκα. Γεληθά πξέπεη λα απνθεχγεηε λα ρξεζηκνπνηείηε απηή ηελ εληνιή θαη αλη' απηήο λα ρξεζηκνπνηείηε ηελ εληνιή import επεηδή έηζη ην πξφγξακκά ζαο ζα απνθχγεη ηελ ζχγθξνπζε ησλ νλνκαζηψλ θαη ζα είλαη πην επαλάγλσζην. Page 102 of 253

103 Ολνκαζία αξζξώκαηνο (module's name ) Κάζε άξζξσκα έρεη κηα νλνκαζία θαη νη εληνιέο ζε έλα άξζξσκα κπνξνχλ λα αλαθαιχςνπλ ην φλνκα ηνπ αξζξψκαηφο ηνπο. Απηφ είλαη εχρξεζην ζηελ εηδηθή θαηάζηαζε ηνπ ππνινγηζκνχ γηα ην εάλ ην άξζξσκα ηξέρεη κφλν ηνπ ή εηζάγεηαη. πσο αλαθέξζεθε πξνεγνπκέλσο, φηαλ έλα άξζξσκα εηζάγεηαη γηα πξψηε θνξά, ν θψδηθαο ζε απηφ ην άξζξσκα εθηειείηαη. Μπνξνχκε λα ρξεζηκνπνηήζνπκε απηή ηελ έλλνηα γηα λα αιιάμνπκε ηε ζπκπεξηθνξά ηνπ αξζξψκαηνο εάλ ην πξφγξακκα ρξεζηκνπνηείηαη απφ κφλν ηνπ θαη φρη φηαλ εηζάγεηαη απφ έλα άιιν άξζξσκα. Απηφ κπνξεί λα επηηεπρζεί ρξεζηκνπνηψληαο ην ηδηνραξαθηεξηζηηθφ name ηνπ αξζξψκαηνο. Αθνινπζεί ζρεηηθφ παξάδεηγκα : Πψο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : ε θάζε άξζξσκα ζηελ Python έρεη νξηζζεί ε νλνκαζία ηνπ name, θαη εάλ απηή είλαη ' main ', ηφηε ζπλεπάγεηαη φηη ηξέρεη κφλν ηνπ απφ ην ρξήζηε θαη κπνξνχκε λα θάλνπκε θαλνληθέο ελέξγεηεο. Πώο λα θηηάμνπκε ηα δηθά καο αξζξώκαηα; Η δεκηνπξγία ησλ δηθψλ καο αξζξσκάησλ είλαη εχθνιε, ην έρνπκε θάλεη ήδε, θη απηφ δηφηη θάζε πξφγξακκα ζηε Python είλαη επίζεο θη έλα άξζξσκα. Γηα ην κφλν πνπ πξέπεη λα είκαζηε ζίγνπξνη είλαη λα έρεη κηα επέθηαζε.py. Page 103 of 253

104 Αθνινπζεί έλα παξάδεηγκα ην νπνίν ζηφρν έρεη λα μεθαζαξίζεη ην ηνπίν : # Filename: myfirstmodule.py def sayhi(): print('γεια, αυτό εύναι το πρώτο μου ϊρθρωμα!') version = '0.1' # End of myfirstmodule.py Σν παξαπάλσ είλαη έλα δείγκα 'αξζξψκαηνο. πσο κπνξείηε λα δείηε δελ ππάξρεη θακκία ηδηαηηεξφηεηα ζπγθξηλφκελν κε έλα ζπλεζηζκέλν πξφγξακκα ζε Python. Θπκεζείηε φηη ην άξζξσκα πξέπεη λα ηνπνζεηείηαη ζηνλ ίδην θαηάινγν κε ην πξφγξακκα πνπ ην εηζάγνπκε, ή ην άξζξσκα πξέπεη λα βξίζθεηαη ζε έλαλ απφ ηνπο θαηαιφγνπο πνπ είλαη ζηε ιίζηα ηνπ sys.path. Παξαηεξνχκε φηη ρξεζηκνπνηνχκε ηνλ ίδην ζπκβνιηζκφ κε ηειείεο γηα λα εηζάγνπκε κέιε ζην άξζξσκα. Η Python θάλεη ζσζηή επαλαρξεζηκνπνίεζε ηνπ ίδηνπ Page 104 of 253

105 ζπκβνιηζκνχ γηα λα ηνπ δψζεη ηελ ραξαθηεξηζηηθή Pythφληα αίζζεζε, έηζη ψζηε λα κελ ρξεηάδεηαη λα καζαίλνπκε θαηλνχξγηνπο ηξφπνπο γηα λα θάλνπκε πξάγκαηα. o Αο δνχκε ηψξα κηα εθδνρή φπνπ γίλεηαη ρξήζε ηεο ζχληαμεο from..import : Βλέποςμε όηι ηο αποηέλεζμα ηος mymodule_demo2.py είναι ηο ίδιο με ηο αποηέλεζμα ηος myfirstmodule_demo.py. εκαληηθή παξαηήξεζε Eάλ ήηαλ ήδε δεισκέλν ην φλνκα ηεο έθδνζεο version ζην άξζξσκα ην νπνίν εηζάγεη ην myfirstmodule, ζα γηλφηαλ ζχγθξνπζε. Απηφ είλαη επίζεο πηζαλφλ δηφηη είλαη θνηλή πξαθηηθή γηα θάζε άξζξσκα λα δειψλεη ην λνχκεξν έθδνζήο ηνπ ρξεζηκνπνηψληαο απηφ ην φλνκα. Γη' απηφ ην ιφγν ζπληζηάηαη λα πξνηηκάηε ηελ εληνιή import αθφκα θη αλ έηζη γίλεηαη ην πξφγξακκά ζαο κεγαιχηεξν. Δπίζεο ζα κπνξνχζαηε λα ρξεζηκνπνηήζεηε: from mymodule import * Απηφ ζα εηζήγαγε φια ηα δεκφζηα νλφκαηα φπσο ην sayhi αιιά δε ζα εηζήγαγε ην version επεηδή αξρίδεη κε δηπιέο θάησ παχιεο. Page 105 of 253

106 Η ζπλάξηεζε dir Μπνξείηε λα ρξεζηκνπνηήζεηε ηελ ελζσκαησκέλε ζπλάξηεζε dir γηα λα δείηε κηα ιίζηα κε ηα αλαγλσξηζηηθά πνπ νξίδεη έλα αληηθείκελν. Γηα παξάδεηγκα, ζε έλα άξζξσκα, ηα αλαγλσξηζηηθά πεξηιακβάλνπλ ηηο ζπλαξηήζεηο, ηηο θιάζεηο θαη ηηο κεηαβιεηέο πνπ νξίδνληαη ζε απηφ ην άξζξσκα. ηαλ δίλεηε ην φλνκα ελφο αξζξψκαηνο ζηε ζπλάξηεζε dir, απηή επηζηξέθεη ηε ιίζηα ησλ νλνκάησλ πνπ νξίδνληαη ζε απηφ ην άξζξσκα. ηαλ δελ παξέρεηαη θαλέλα φξηζκα, ηφηε επηζηξέθεη ηε ιίζηα ησλ νλνκάησλ πνπ νξίδνληαη ζην ηξέρνλ άξζξσκα. >>> import sys # παίξλεη ιίζηα ησλ ηδηνραξαθηεξηζηηθψλ, ζε απηή ηελ πεξίπησζε, γηα ην άξζξσκα sys >>> dir(sys) (εκθαλίδεη κηα ηεξάζηηα ιίζηα ηδηνραξαθηεξηζηηθψλ) >>> dir() # δίλεη ιίζηα ηδηνραξαθηεξηζηηθψλ γηα ην ηξέρνλ άξζξσκα >>> a = 5 # δεκηνπξγεί κηα λέα κεηαβιεηή 'a' >>> dir() >>> del a # δηαγξάθεη ή αθαηξεί έλα φλνκα >>> dir() Δμήγεζε Αξρηθά βιέπνπκε ηε ρξήζε ηεο ζπλάξηεζεο dir ζην εηζαρζέλ άξζξσκα dir. Mπνξνχκε λα δνχκε ηελ ηεξάζηηα ιίζηα ησλ ηδηνραξαθηεξηζηηθψλ πνπ πεξηέρεη. Καηφπηλ ρξεζηκνπνηνχκε ηελ ζπλάξηεζε dir ρσξίο λα ηεο πεξάζνπκε παξακέηξνπο. Απφ πξνεπηινγή, επηζηξέθεη ηε ιίζηα ηνπ ηξέρνληνο αξζξψκαηνο. Παξαηεξήζηε φηη ε ιίζηα ησλ εηζαρζέλησλ αξζξσκάησλ είλαη επίζεο κέξνο απηήο ηεο ιίζηαο. Γηα λα δείηε ζε δξάζε ηε dir, νξίδνπκε κηα θαηλνχξγηα κεηαβιεηή a θαη εθρσξνχκε ζ' απηή κηα ηηκή, κεηά ηζεθάξνπκε ηε dir θαη παξαηεξνχκε φηη ππάξρεη κηα επηπξφζζεηε ηηκή ζηε ιίζηα ηνπ ίδηνπ νλφκαηνο. Page 106 of 253

107 Αθαηξνχκε ηε κεηαβιεηή/ηδηνραξαθηεξηζηηθφ ηνπ ηξέρνληνο αξζξψκαηνο ρξεζηκνπνηψληαο ηελ εληνιή del θαη ε αιιαγή αληαλαθιάηαη πάιη ζην απνηέιεζκα ηεο ζπλάξηεζεο dir. ρόιηα Παξαηεξήζεηο : Η εληνιή del ρξεζηκνπνηείηαη γηα λα δηαγξάςεη κηα κεηαβιεηή/φλνκα θαη αθνχ ε εληνιή έρεη ηξέμεη, ζε απηή ηελ πεξίπησζε del a, δε κπνξείηε πηα λα εηζάγεηε ηε κεηαβιεηή a είλαη ζαλ λα κελ ππήξμε πξηλ θαζφινπ. H ζπλάξηεζε dir() ιεηηνπξγεί ζε νπνηνδήπνηε αληηθείκελν. Γηα παξάδεηγκα, ηξέμηε dir(print) γηα λα κάζεηε ζρεηηθά κε ηα ηδηνραξαθηεξηζηηθά ηεο ζπλάξηεζεο print, ή dir(str) γηα ηα ηδηνραξαθηεξηζηηθά ηεο θιάζεο str. Παθέηα (Packages) Τπάξρεη ηεξαξρία κε ηελ νπνία νξγαλψλνληαη ηα πξνγξάκκαηά ζηελ Python. Οη κεηαβιεηέο ζπλήζσο πεγαίλνπλ κέζα ζηηο ζπλαξηήζεηο. Οη ζπλαξηήζεηο θαη νη θαζνιηθέο κεηαβιεηέο ζπλήζσο πεγαίλνπλ κέζα ζηα αξζξψκαηα. Ση ζα γηλφηαλ φκσο αλ ζέιαηε λα νξγαλψζεηε ηα αξζξψκαηα; Γη' απηφ έξρνληαη εδψ ζην πξνζθήλην ηα παθέηα. Σα παθέηα είλαη απιώο θάθεινη αξζξσκάησλ κε έλα εηδηθό αξρείν init.py πνπ δείρλεη ζηελ Python όηη απηόο ν θάθεινο είλαη εηδηθόο δηόηη πεξηέρεη αξζξώκαηα Python. Αο πξνρσξήζνπκε ζε έλα παξάδεηγκα γηα λα γίλεη πην θαηαλνεηή ε ρξήζε ησλ παθέησλ : Αο πνχκε φηη ζέιεηε λα δεκηνπξγήζνπκε έλα παθέην πνπ νλνκάδεηαη 'icte' κε ππνπαθέηα πνπ νλνκάδνληαη 'mathimata_kormou', 'mathimata_katey8inshs' θαη απηά ηα ππνπαθέηα κε ηε ζεηξά ηνπο πεξηέρνπλ αξζξψκαηα φπσο 'Leitoyrgika_Systhmata', 'Diktya Kinhtwn epikoinwniwn'. Tα πακέτα είναι μια ευκολία στην ιεραρχική οργάνωση των αρθρωμάτων. Page 107 of 253

108 Αιθαξηζκεηηθά Βαζηθά ζηνηρεία αιθαξηζκεηηθώλ Σα αιθαξηζκεηηθια, φπσο θαη νη πιεηάδεο (πνπ ζα αλαιχζνπκε παξαθάησ), είλαη ακεηάβιεηα, πνπ ζεκαίλεη έπεηηα απφ ηελ δεκηνπξγία ηνπο δελ κπνξνχλ λα αιιάμνπλ ηηκή. Ο ηειεζηήο αλάζεζεο, κπνξεί λα θάλεη κηα κεηαβιεηή λα δείρλεη ζε έλα αιθαξηζκεηηθφ φπσο θαη ζηνπο απινχο ηχπνπο. Η πξνεπηιεγκέλε θσδηθνπνίεζε γηα έλα αιθαξηζκεηηθφ είλαη UTF-8. Σα αιθαξηζκεηηθά απνηεινχλ έλα είδνο αθνινπζίαο(sequence). Απηφ ζεκαίλεη πσο θάζε ζηνηρείν είλαη ζε κηα αξηζκεκέλε ζεηξά, κε βάζε θαη ηελ νπνία κπνξεί λα πξνζπειαζηεί. Μπνξνχκε λα αξρίζνπκε ηελ πξνζπέιαζε ησλ ζηνηρείσλ κεηξψληαο απφ ην ηέινο ηνπ αιθαξηζκεηηθνχ πξνο ηελ αξρή ηνπ αλ ρξεζηκνπνηήζνπκε ην ζχκβνιν - (κείνλ) πξηλ απφ ηνλ δέθηε (index). Page 108 of 253

109 Αληηζηξνθή Αιθαξηζκεηηθνύ Αθνχ κπνξνχκε λα πξνζπειάζνπκε έλα αιθαξηζκεηηθφ σο κηα αθνινπζία, κπνξνχκε λα ρξεζηκνπνηήζνζκε φπνηα γλσξίζκαηα κηαο αθνινπζίαο επηζπκνχκε γηα λα επηηχρνπκε επηζπκεηέο ελέξγεηεο. Έηζη, γηα παξάδεηγκα ε αληηζηξνθή ελφο αιθαξηζκεηηθνχ κπνξεί λα γίλεη πνιχ εχθνια. Page 109 of 253

110 Θα κπνξνχζακε αληίζηνηρα λα αληηζηξέςνπκε κφλν έλα θνκκάηη ηνπ αιθαξηζκεηηθνχ κε ηνλ παξαθάησ ηξφπν : Πσο δνπιεχεη απηφ ην πξφγξακκα : Ξεθηλάκε απφ ηνλ ραξαθηήξα κε δείθηε 3 θαη ζα ηππψζνπκε φινπο κέρξη θαη ηνλ ραξαθηήξα κε δείθηε 2, έλα πξηλ δειαδή. Σνλίδσ πσο ζηελ Python, φπσο θαη ζε πνιιέο αθφκε άιιεο γιψζζεο πξνγξακκαηηζκνπ, ε δεηθηνδφηεζε αξρίδεη απφ ην κεδέλ (0). Μνξθνπνίεζε αιθαξηζκεηηθνύ Η κνξθνπνίεζε ελφο αιθαξηζκεηηθνχ κπνξεί λα γίλεη κέζσ ηεο ζπλάξηεζεο string.format().ηελ Python, ηα αιθαξηζκεηηθά strings είλαη ν πξνεπηιεγκέλνο ηχπνο θαη δελ ρξεηάδνληαη θάπνηα δήισζε. Γηα λα κπνξέζνπκε λα δείμνπκε πνηα κεηαβιεηή ζα πάεη ζε πνηα ζέζε, ρξεζηκνπνηνχκε ην {x},φπνπ x είλαη έλαο δείθηεο πνπ δείρλεη πνηα απφ ηηο αθφινπζεο κεηαβιεηέο ζα ηνπνζεηεζεί ζηελ ζέζε ηνπ. Page 110 of 253

111 Γνκέο δεδνκέλσλ Οη δνκέο δεδνκέλσλ καο παξέρνπλ έλαλ απνηειεζκαηηθφ ηξφπν δηαρείξεζεο ηεο δηαζέζηκεο πιεξνθνξίαο. Απνηεινχλ ηελ ξαρνθνθαιηά ζρεδφλ θάζε πξνγξάκκαηφο καο θαη ε θαηάιιειε επηινγή ηνπ κπνξεί λα νδεγήζεη ζε πνιχ κεγάια νθέιε ζηελ ηαρχηεηα εθηέιεζεο ησλ ππνινγηζκψλ. Ο απνηειεζκαηηθφο ηνπο ζρεδηαζκφο θαη ε πινπνίεζή ηνπο απνηεινχλ ζεκαληηθφ κέξνο ηεο επηζηεκνληθήο έξεπλαο ζηνλ ρψξν ησλ ππνινγηζηψλ. πλήζσο φκσο, έλαο πξνγξακκαηηζηήο δελ ρξεηάδεηαη λα ηηο θαηαζθεπάζεη απφ ηελ αξρή θαη κπνξεί λα ρξεζηκνπνηήζεη θάπνηα απφ απηέο πνπ κνηξάδνληαη κε ηε βαζηθή βηβιηνζήθε, ε νπνία είλαη αξθεηά πινχζηα ζηελ Python θαη ε νπνία καο δηεπθνιχλεη αξρηθά ζηελ ρξήζε ηνπο. Άξα, νη δνκέο δεδνκέλσλ είλαη απηφ πνπ ιέεη ην φλνκά ηνπο, δειαδή είλαη δνκέο πνπ κπνξνχλ λα θξαηήζνπλ καδί κεξηθά δεδνκέλα. Με άιια ιφγηα ρξεζηκνπνηνχληαη γηα λα απνζεθεχνπλ δεδνκέλα πνπ έρνπλ ζρέζε κεηαμχ ηνπο. Τπάξρνπλ ηέζζεξηο δνκέο δεδνκέλσλ ελζσκαησκέλεο ζηε Python: 1. νη ιίζηεο 2. νη πιεηάδεο 3. ηα ιεμηθά 4. ηα ζχλνια Λίζηα Μηα ιίζηα είλαη κηα δνκή δεδνκέλσλ πνπ ζπγθξαηεί κηα δηαηεηαγκέλε ζπιινγή ζηνηρείσλ, δειαδή κπνξείηε λα απνζεθεχζεηε κηα αθνινπζία (sequence) αληηθεηκέλσλ ζηε ιίζηα. Απηφ είλαη εχθνιν λα ην θαληαζηείηε αλ ζθεθηείηε κηα ιίζηα γηα αγνξέο, φπνπ έρεηε κηα ιίζηα κε αληηθείκελα πνπ πξέπεη λα αγνξάζεηε, θαη εθηφο απηνχ πηζαλφλ έρεηε θάζε ζηνηρείν ζε δηαθνξεηηθή γξακκή ζηε ιίζηα αγνξψλ ζαο, ελψ ζηελ Python ηνπνζεηείηε θφκκαηα αλάκεζα ζηα ζηνηρεία. Η ιίζηα ησλ ζηνηρείσλ πξέπεη λα θιείλεηαη ζε αγθχιεο (δειαδή [ θαη ] ) έηζη ψζηε λα θαηαιαβαίλεη ε Python φηη θαζνξίδεηε κηα ιίζηα. Αθνχ έρεηε δεκηνπξγήζεη κηα ιίζηα κηα θνξά κπνξείηε λα πξνζζέζεηε, λα κεηαθηλήζεηε ή λα ςάμεηε γηα ζηνηρεία ζ' απηή ηε ιίζηα. Απφ ηε ζηηγκή πνπ κπνξνχκε λα πξνζζέζνπκε θαη λα κεηαθηλήζνπκε ζηνηρεία, ιέκε φηη ε ιίζηα είλαη έλαο μεηαβληηόρ ηύπορ δεδομένυν (mutable data type), δειαδή απηφο ν ηχπνο κπνξεί λα αιιαρζεί. Page 111 of 253

112 Μια ζύνηομη μαηιά ζηα ανηικείμενα (objects) και ηιρ κλάζειρ (classes) Η ιίζηα είλαη έλα παξάδεηγκα ρξήζεο αληηθεηκέλσλ θαη θιάζεσλ. ηαλ ρξεζηκνπνηνχκε ηε κεηαβιεηή i θαη εθρσξνχκε ζ' απηήλ κηα ηηκή, αο πνχκε ηνλ αθέξαην αξηζκφ 5, απηφ κπνξνχκε λα ην ζθεθηνχκε ζαλ ηε δεκηνπξγία ελφο αληηθεηκέλνπ (δει. ππφζηαζεο (instance)) i ηεο θιάζεο (δει. ηχπνπ (type)) int. ηελ πξαγκαηηθφηεηα κπνξείηε λα δηαβάζεηε ηε βνήζεηα ζην help(int) γηα λα ην θαηαιάβεηε θαιχηεξα. Mηα θιάζε κπνξεί επίζεο λα έρεη κεζφδνπο (methods), δειαδή ζπλαξηήζεηο πνπ νξίζηεθαλ γηα ρξήζε πνπ έρεη ζρέζε κφλν κε απηή ηελ θιάζε. Μπνξείηε λα ρξεζηκνπνηήζεηε απηά ηα κέξε ιεηηνπξγηθφηεηαο κφλν φηαλ έρεηε έλα αληηθείκελν ζε απηή ηελ θιάζε. Γηα παξάδεηγκα ε Python παξέρεη κηα κέζνδν append γηα ηελ θιάζε list, πνπ ζαο επηηξέπεη λα πξνζζέζεηε έλα αληηθείκελν ζην ηέινο ηεο ιίζηαο. Γηα παξάδεηγκα, ην mylist.append('an item') ζα πξνζζέζεη απηή ηε ζπκβνινζεηξά ζην ηέινο ηνπ mylist. εκεηψζηε ηε ρξήζε ηνπ ζπκβνιηζκνχ κε ηειείεο γηα λα εηζαρζνχλ νη κέζνδνη ησλ αληηθεηκέλσλ. Μηα θιάζε κπνξεί επίζεο λα έρεη πεδία (fields), πνπ δελ είλαη ηίπνηα άιιν παξά κεηαβιεηέο πνπ νξίζηεθαλ γηα ρξήζε πνπ έρεη ζρέζε κφλν κε απηή ηελ θιάζε. Μπνξείηε λα ρξεζηκνπνηήζεηε απηέο ηηο κεηαβιεηέο/νλνκαζίεο κφλν φηαλ έρεηε έλα αληηθείκελν απηήο ηεο θιάζεο. Σα πεδία επίζεο εηζάγνληαη κε ζπκβνιηζκφ κε ηειείεο, γηα παξάδεηγκα, mylist.field. Οη ιίζηεο ρξεζηκνπνηνχληαη αξθεηά ζπρλά ζηνλ πξνγξακκαηηζκφ. Αληηθαζηζηνχλ ηελ έλλνηα ηνπ πίλαθα, πνπ γλσξίδνπκε απφ άιιεο γιψζζεο πξνγξακκαηηζκνχ. Η θχξηα δηαθνξά ηνπο ζηελ Python είλαη φηη γίλεηαη απηφκαηα ε θαηάιιειε δέζκεπζε ηεο κλήκεο πνπ απηνί απαηηνχλ. Δπνκέλσο δελ πξέπεη λα ηηο ζπγρένπκε κε ηηο δηαζπλδεδεκέλεο ιίζηεο πνπ ίζσο γλσξίδνπκε. Η ζπκπεξνθνξά ηνπο έρεη φια ηα γλσξίζκαηα ησλ πηλάθσλ. Γηα λα νξίζνπκε κηα ιίζηα, αξθεί λα πεξηιάβνπκε κέζα ζε αγθχιεο ηα αληηθείκελα πνπ ζέινπκε λα πεξηέρεη. πσο βιέπνπκε παξαθάησ, κηα ιίζηα κπνξεί λα πεξηέρεη νπνηνπδήπνηε ηχπνπ αληηθείκελα. Έηζη, κπνξνχκε λα πξνζζέζνπκε δηθά καο αληηθείκελα, άιιεο ιίζηεο αθφκα θαη αληηθείκελα πνπ αλαπαξηζηνχλ ζπλαξηήζεηο. Παξαζέησ ινηπφλ ην εμήο παξάδεηγκα γηα λα ζηεξίμσ φζα πξνεηπψζεθαλ : Page 112 of 253

113 Γεκηνπξγία ιίζηαο Ο πην απιφο ηξφπνο λα δεκηνπξγήζνπκε κηα θελή ιίζηα είλαη κε ηελ ρξήζε ησλ ηεηξάγσλσλ αγθπιψλ. List = [] Τπάξρνπλ θαη ιεπηνκέξεηεο πνπ ζπρλά καο μεθεχγνπλ φζνλ αθνξά ηηο ιίζηεο. Αλ ρξεζηκνπνηήζνπκε ηελ ζπλάηεζε list() ζε κηα ιίζηα, ηφηε καο επηζηξέθεηαη έλα αληίγξαθν απηήο ηεο ιίζηαο ρσξίο λα έρεη αιιάμεη θάηη. Αλ φκσο πεξηιάβνπκε ηελ παιηά ιίζηα κέζα ζε αγθχιεο, ηφηε δεκηνπξγείηαη κηα θαηλνχξηα πνπ πεξηέρεη έλα αληηθείκελν. Page 113 of 253

114 Πξνζνρή ζηελ δηαθνξά πνπ παξαηεξείηαη αλ ρξεζηκνπνηήζνπκε ηελ ζπλάξηεζε list() ή φρη. Απηφ γηαηί ε list() δεκηνπξγεί έλα αληίγξαθν ηεο ιίζηαο απφ πξνεπηινγή, ελψ αιιηψο ε Python επηζηξέθεη απιψο κηα αλαθνξά γηα ην αληηθείκελν πνπ πιένλ κπνξνχκε λα ην πξνζπειάζνπκε κε έλαλ αθφκα ηξφπν. Αθνινπζεί ζρεηηθφ παξάδεηγκα : Πξόζβαζε ζε ζηνηρεία ιίζηαο Η πξφζβαζε ζηα ζηνηρεία κηαο ιίζηαο είλαη αξθεηά εχθνιε, αξθεί λα ζπκάζηε πσο ε κέηξεζε, φπσο ζρεδφλ ζε φια ζηνπο ππνινγηζηέο, αξρίδεη απφ ην κεδέλ θαη φρη απφ ην έλα. Δπνκέλσο ην πξψην ζηνηρείν κίαο ιίζηαο αξηζκείηαη κε ην κεδέλ θαη φια ηα κεηέπεηηα έρνπλ δείθηε απμεκέλν θαηά έλα. Έλα άιιν ζεκαληηθφ ζηνηρείν πνπ πξέπεη λα ζπκφκαζηε φηαλ πξνζπειαχλνπκε ζηνηρεία είλαη φηη ην ηειεπηαίν ζηνηρείν φηαλ δηαιέγνπκε απφ έλα ζχλνιν δελ είλαη ην ζηνηρείν list1[j] αιιά ην list1[j-1]. Αλ ην ζθεθηνχκε ιίγν είλαη ινγηθφ, θαζψο αλ κηα ιίζηα έρεη n ζηνηρεία, ην ηειεπηαίν ηεο δελ είλαη ην list1[n] αιιά ην list1[n-1] αθνχ ε αξίζκεζε αξρίδεη απφ ην κεδέλ. Page 114 of 253

115 o Πιήζνο ζηνηρείσλ n = len (list1) o Πξώην ζηνηρείν list1[0] o ηνηρεία ζην [i,j): list1[ ii : j ] Δθηφο απφ ην λα δηαιέμνπκε απφ πνχ εψο πνπ ζα πάξνπκε ηα ζηνηρεία κηαο ιίζηαο, κπνξνχκε επίζεο λα θαζνξίζνπκε θαη αλα πφζα ζηνηρεία ζα ηα ιακβάλνπκε. Αλ έρνπκε κηα ιίζηα κε φινπο ηνπο αξηζκνχο κέρξη ην 10 θαη ζέινπκε ηνπο άξηηνπο απφ ηνλ δεχηεξν αξηζκφ εσο ηνλ φγδνν(ρσξίο λα ηνλ ζπκπεξηιακβάλνπκε) ηφηε κπνξνχκε λα θάλνπκε αθνινχζσο, φπνπ ν ηειεπηαίνο αξηζκφο ζηηο αγθχιεο είλαη ην βήκα : a = [x for x in range (10)] # μπορούμε επύςησ να γρϊψουμε a =list(range(10)) print (a[2:8:2]) o ηνηρεία ζην [i,j) αλά k list1[i:j:k] o Σν k κπνξεί λα πάξεη αξλεηηθέο ηηκέο list1[ :: k] Παξαηεξνχκε φηη ην k, πνπ απνηειεί ην βήκα κπνξεί λα πάξεη αξλεηηθέο ηηκέο, επνκέλσο κπνξνχκε έηζη εχθνια λα θαηαζθεπάζνπκε κηα ζπλάξηεζε αληηζηξνθήο ελφο πίλαθα. Page 115 of 253

116 Γηάηξεμε ζηνηρείσλ ιίζηαο Μπνξνχκε πνιχ εχθνια λα δηαηξέμνπκε ηα ζηνηρεία κίαο ιίζηαο έλα έλα ρξεζηκνπνηψληαο κηα απιή δνκή for. Αθνινπζεί παξάδεηγκα : Αλ ζέινπκε, κπνξνχκε λα ρξεζηκνπνηήζνπκε επαλαιήπηεο γηα ηελ δηάηξεμε ησλ ζηνηρείσλ κηαο ιίζηαο, νη νπνίνη απνηεινχλ θαη κηα εηζαγσγή ζηελ έλλνηα ησλ γελλήηνξσλ. Page 116 of 253

117 Γηαγξαθή ζηνηρείσλ Γηα λα δηαγξάςνπκε θάπνηα ζηνηρεία απφ κηα ιίζηα, πξνζζέηνπκε κπξνζηά ηελ ιέμε θιεηδί del θαη ζηελ ζπλέρεηα ην θνκκάηη ηεο ιίζηαο ην νπνίν ζέινπκε λα δηαγξάςνπκε. Απηφ ην θνκκάηη ην πξνζδηνξίδνπκε φπσο αθξηβψο ζα ην πξνζδηνξίδακε θαη αλ ζέιακε λα θάλνπκε πξνζπέιαζε ζηα ζηνηρεία απηνχ ηνπ θνκκαηηνχ. Αθνινπζεί παξάδεηγκα : Καηαλνήζεηο ιίζηαο ( Lists comprehensions ) Μπνξνχκε επίζεο λα δεκηνπξγήζνπκε κηα θαηλνχξγηα ιίζηα κε ηελ ρξήζε θαηαλνήζεσλ ιίζηαο (list comprehensions). ην παξάδεηγκα πνπ αθνινπζεί βιέπνπκε κηα ήδε ππάξρνπζα ιίζηα ηεο νπνίαο ηα ζηνηρεία δηαηξέρνληαη έλα έλα θαη θάζε έλα ην πςψλνπκε ζην ηεηξάγσλν. Σν πςσκέλν ζην ηεηξάγσλν ζηνηρείν πιένλ αλήθεη ζηελ θαηλνχξγηα ιίζηα. Page 117 of 253

118 Μηα list comprehension δεκηνπξγείηαη κέζσ ελφο εηδηθνχ ζπληαθηηθνχ κε αγθχιεο. Πάληα σο απνηέιεζκά ηνπ είλαη έλα θαηλνχξγην αληηθείκελν ιίζηαο. Σν γεληθφ κνληέιν είλαη : result = [transform iteration filter ] Σν θνκκάηη ηνπ κεηαζρεκαηηζκνχ (transform) γίλεηαη θάζε θνξά πνπ πξνθχπηεη απφ ηελ δηάηξεμε (iteration είλαη ε δηαδηθαζία κέζσ ηεο νπνίαο παηξλνπκε έλα έλα ηα ζηνηρεία κίαο αθνινπζίαο) θαη εθφζνλ ηζρχεη ε ζπλζήθε θηιηξαξίζκαηνο (filter), αλ απηή ππάξρεη. Η ζεηξά κε ηελ νπνία γίλεηαη ε δηάηξεμε είλαη ζπγθεθξηκέλε θαη θαζνξίδεη ηελ ζεηξά εκθάληζεο ησλ απνηειεζκάησλ ζηε ιίζηα. ηελ ζπλέρεηα παξαζέησ έλα παξάδεηγκα πιήξνπο ρξήζεο απηνχ ηνπ κνληέινπ. Με ηελ ρξήζε ιηζηψλ, πνιιέο θνξέο κπνξνχκε λα απνθχγνπκε ηελ ζπγγξαθή βξφγρσλ for θαη λα δεκηνπξγήζνπκε πην απνδνηηθφ θαη επαλάγλσζην θψδηθα. Απηφ κπνξεί λα γίλεη αμηνπνηψληαο ηηο εηδηθέο ιεηηνπξγίεο πνπ καο πξνζθέξνπλ νη ιίζηεο. Μπνξνχκε γηα παξάδεηγκα λα αζξνίζνπκε φινπο ηνπο αξηζκνχο πνπ πεξηέρνληαη ζε κηα ιίζηα κέζσ ηεο ζπλάξηεζεο sum(). Παξαθάησ αζξνίδνπκε φινπο ηνπο αξηζκνχο κέρξη ην 100 πνπ είλαη πνιιαπιάζηα ηνπ 3 θαη ηνπ 7. ηνίβα Με ηελ ρξήζε κίαο ιίζηαο, είλαη πνιχ εχθνιν λα θαηαζθεπάζνπκε άιιεο δνκέο. Έλα παξάδεηγκα είλαη κηα ζηνίβα. Η ζηνίβα έρεη δπν βαζηθέο ιεηηνπξγίεο. Απηέο είλαη νη : push (νλνκάδεηαη append ζηελ Python) pop Page 118 of 253

119 Έπεηηα παξαζέησ έλα απιφ παξάδεηγκα πινπνίεζεο κηαο ζηνίβαο : Αθνινπζεί έλα παξάδεηγκα γηα λα θαηαλνήζνπκε θαιχηεξα ηελ ζεκαζία θαη ρξήζε ηεο ιίζηαο : Page 119 of 253

120 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : H κεηαβιεηή shoppinglist είλαη κηα ιίζηα αγνξψλ γηα θάπνηνλ πνπ πεγαίλεη ζηελ αγνξά. ηε shoppinglist απνζεθεχνπκε ζπκβνινζεηξέο ησλ νλνκάησλ ησλ αληηθεηκέλσλ πνπ ζα αγνξάζνπκε, αιιά κπνξείηε λα πξνζζέζεηε νπνηνδήπνηε είδνο αληηθεηκέλνπ ζηε ιίζηα ζπκπεξηιακβαλνκέλσλ αξηζκψλ ή αθφκα θαη άιιεο ιίζηεο. Δπίζεο έρνπκε ρξεζηκνπνηήζεη ην βξφρν for..in γηα λα επαλειέγμνπκε ηα αληηθείκελα ηεο ιίζηαο. Μέρξη ηψξα, πξέπεη λα έρεηε θαηαιάβεη φηη ε ιίζηα είλαη επίζεο κηα αθνινπζία. Παξαηεξήζηε πσο ρξεζηκνπνηνχκε ηε ιέμε-θιεηδί φξηζκα end ζηε ζπλάξηεζε print, γηα λα δείμνπκε φηη ζέινπκε λα ηειεηψζνπκε (end) ηελ έμνδν κε έλα δηάζηεκα (space) αληί ηεο ζπλεζηζκέλεο λέαο γξακκήο (line break). Καηφπηλ πξνζζέηνπκε έλα ζηνηρείν ζηε ιίζηα ρξεζηκνπνηψληαο ηε κέζνδν append ηνπ αληηθεηκέλνπ ιίζηαο. Σφηε, ειέγρνπκε φηη ην ζηνηρείν έρεη πξαγκαηηθά πξνζηεζεί ζηε ιίζηα, ηππψλνληαο ηα πεξηερφκελα ηεο ιίζηαο, απιά πεξλψληαο ηε ιίζηα ζηελ εληνιή print θαη ηελ ηππψλεη. Σφηε, ηαμηλνκνχκε ηε ιίζηα ρξεζηκνπνηψληαο ηε κέζνδν sort ηεο ιίζηαο. Δίλαη ζεκαληηθφ λα θαηαιάβεηε φηη απηή ε κέζνδνο επεξεάδεη ηελ ίδηα ηε ιίζηα θαη δελ επηζηξέθεη κηα ηξνπνπνηεκέλε ιίζηα, απηή είλαη ε δηαθνξά απφ ηνλ ηξφπν πνπ δνπιεχνπλ νη ζπκβνινζεηξέο. Απηφ είλαη πνπ ελλννχκε ιέγνληαο φηη οι λίζηερ είναι μεηαβληηέρ (mutable) και οι ζςμβολοζειπέρ αμεηάβληηερ (immutable). Καηφπηλ, φηαλ αγνξάζνπκε έλα πξάγκα, ζέινπκε λα ην αθαηξέζνπκε απφ ηε ιίζηα. Απηφ ην επηηπγράλνπκε ρξεζηκνπνηψληαο ηελ εληνιή del. Δδψ αλαθέξνπκε πνην ζηνηρείν ηεο ιίζηαο ζέινπκε λα αθαηξέζνπκε θαη ε εληνιή del ην αθαηξεί απφ ηε ιίζηα γηα καο. Καζνξίδνπκε φηη ζέινπκε λα αθαηξέζνπκε ην πξψην αληηθείκελν απφ ηε ιίζηα θαη έηζη ρξεζηκνπνηνχκε ηελ del shoplist[0] (ζπκεζείηε φηη ε Python αξρίδεη λα κεηξά απφ ην κεδέλ). Δάλ ζέιεηε λα γλσξίζεηε φιεο ηηο κεζφδνπο πνπ νξίδνληαη απφ ηε ιίζηα αληηθεηκέλνπ, θνηηάμηε ην help(list) γηα ιεπηνκέξεηεο. Page 120 of 253

121 Πιεηάδα Οη πιεηάδεο ρξεζηκνπνηνχληαη γηα λα ζπγθξαηήζνπλ καδί πνιιαπιά αληηθείκελα. Πιεηάδα είλαη έλα ζηηγκηφηππν ηεο ιίζηαο. θεθηείηε ηα ζαλ παξφκνηα κε ηηο ιίζηεο, αιιά ρσξίο ηελ εθηεηακέλε ιεηηνπξγηθφηεηα πνπ ε θιάζε ηεο ιίζηαο ζαο δίλεη. Έλα θχξην ραξαθηεξηζηηθφ ησλ πιεηάδσλ είλαη φηη είλαη ακεηάβιεηεο φπσο νη ζπκβνινζεηξέο, δειαδή δε κπνξείηε λα ηξνπνπνηήζεηε πιεηάδεο. Οη πιεηάδεο δελ αιιάδνπλ κέγεζνο νχηε θαη ζηνηρεία. Οη πιεηάδεο νξίδνληαη θαζνξίδνληαο ζηνηρεία πνπ δηαρσξίδνληαη κε θφκκαηα, κέζα ζε έλα πξναηξεηηθφ δεπγάξη παξελζέζεσλ. Οη πιεηάδεο ρξεζηκνπνηνχληαη, ζπλήζσο, ζηηο πεξηπηψζεηο φπνπ κηα εληνιή ή κηα ζπλάξηεζε νξηδφκελε απφ ην ρξήζηε, κπνξεί κε αζθάιεηα λα ζεσξήζεη φηη ε ζπιινγή ησλ ηηκψλ δει. ε πιεηάδα ησλ ηηκψλ πνπ ρξεζηκνπνηνχληαη δε ζα αιιάμεη. Αθνινπζεί παξάδεηγκα : Page 121 of 253

122 Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα: Η κεηαβιεηή lesson αλαθέξεηαη ζε κηα πιεηάδα ζηνηρείσλ. Βιέπνπκε φηη ε ζπλάξηεζε len κπνξεί λα ρξεζηκνπνηεζεί γηα λα πάξεη ην κήθνο ηεο πιεηάδαο. Απηφ επίζεο δείρλεη φηη ε πιεηάδα είλαη επίζεο θαη κηα αθνινπζία. Με ηελ αιιαγή ηνπ πξνγξάκκαηνο ζπνπδψλ γίλεηαη αλάζεζε επηπιένλ καζεκάησλ ζηνλ θ. Γαζπγέλε. Η πιεηάδα new_lesson πεξηέρεη θάπνηα καζήκαηα πνπ βξίζθνληαη ήδε ζηνλ νδεγφ ζπνπδψλ, καδί κε ηα καζήκαηα πνπ είρε ν θ. Γαζπγέλεο θαη ζηνλ παιηφ νδεγφο ζπνπδψλ. Πνιχ ζεκαληηθφ είλαη φηη κηα πιεηάδα κέζα ζε κηα πιεηάδα δε ράλεη ηελ ηαπηφηεηά ηεο. Μπνξνχκε λα έρνπκε πξφζβαζε ζηα αληηθείκελα κέζα ζηελ πιεηάδα, θαζνξίδνληαο ηε ζέζε ηνπ ζηνηρείνπ κέζα ζε έλα δεπγάξη αγθχιεο, αθξηβψο φπσο θάλακε γηα ηηο ιίζηεο. Απηφ νλνκάδεηαη ηειεζηήο επξεηεξίαζεο (indexing operator). Παίξλνπκε ην ηξίην ζηνηρείν κέζα ζην new_lesson θαζνξίδνληαο new_lesson[2] θαη παίξλνπκε ην ηξίην ζηνηρείν κέζα ζην ηξίην ζηνηρείν ζηελ πιεηάδα new_lesson θαζνξίδνληαο new_lesson[2][2]. Υξεζηκνπνηψληαο κηα πιεηάδα νπζηαζηηθά δεκηνπξγνχκε έλα αληηθείκλ ην νπνίν είλαη κηα νκάδα άιισλ αληηθεηκέλσλ. Αλ γηα κηα ιεηηνπξγία κπνξνχκε λα ρξεζηκνπνηήζνπκε είηε πιεηάδεο είηε ιίζηεο, πξνηηκνχκε ηηο πιεηάδεο θαζψο είλαη ν πην γξήγνξνο ηξφπνο! Υ Δπηπξόζζεηεο παξαηεξήζεηο : Παξελζέζεηο Αλ θαη νη παξελζέζεηο είλαη πξναηξεηηθέο, θαιφ ζα ήηαλ λα ηηο έρνπκε πάληα γηα λα θάλνπκε θαλεξφ φηη απηή είλαη κηα πιεηάδα, εηδηθά επεηδή απνθεχγεηαη ε αζάθεηα. Γηα παξάδεηγκα, ην print(1,2,3) θαη ην print( (1,2,3) ) ζεκαίλνπλ δπν δηαθνξεηηθά πξάγκαηα -ην κελ ηππψλεη ηξεηο αξηζκνχο, αληίζεηα ην δε ηππψλεη κηα πιεηάδα (ε νπνία πεξηέρεη ηξεηο αξηζκνχο). Πιεηάδα κε 0 ή 1 ζηνηρεία Μηα άδεηα πιεηάδα δνκείηαη απφ έλα άδεην δεπγάξη παξελζέζεσλ φπσο ην myempty = (). Πάλησο, κηα πιεηάδα κε έλα κφλν ζηνηρείν δελ είλαη ηφζν απιή. Πξέπεη λα ηελ θαζνξίζεηε ρξεζηκνπνηψληαο έλα θφκκα κεηά ην πξψην θαη κνλαδηθφ ζηνηρείν, έηζη ψζηε ε Python λα κπνξεί λα δηαθνξνπνηεί κηα πιεηάδα απφ έλα δεπγάξη παξελζέζεσλ πνπ παξεκβάιινπλ ην αληηθείκελν ζε κηα έθθξαζε, δειαδή πξέπεη λα θαζνξίδεηε singleton = (2, ), εάλ ελλνείηε φηη ζέιεηε κηα πιεηάδα πνπ πεξηέρεη ην ζηνρείν 2. Για ηα λεξικά και ηην σπήζη ηοςρ κάναμε λόγο παπαπάνυ (παπαπομπή ζηην ζελίδα 69) Page 122 of 253

123 Αθνινπζίεο Οη ιίζηεο, νη πιεηάδεο θαη νη ζπκβνινζεηξέο είλαη παξαδείγκαηα αθνινπζηψλ, αιιά ηη είλαη νη αθνινπζίεο θαη ηη ην ηδηαίηεξν κε απηέο; Tα θπξίαξρα ραξαθηεξηζηηθά είλαη φηη έρνπλ δνθηκέο έληαμεο (membership tests, δει. ηηο εθθξάζεηο in θαη not in) θαη ιεηηνπξγίεο επξεηεξίαζεο (indexing operations). H ιεηηνπξγία επξεηεξίαζεο καο επηηξέπεη λα πάξνπκε απ' επζείαο έλα ζπγθεθξηκέλν ζηνηρείν ζηελ αθνινπζία. Οη ηξεηο ηχπνη αθνινπζηψλ πνπ αλαθέξζεθαλ παξαπάλσ, ιίζηεο, πιεηάδεο θαη ζπκβνινζεηξέο έρνπλ επίζεο κηα ιεηηνπξγία ηεκαρηζκνχ (slicing operation), πνπ καο επηηξέπεη λα αλαθηνχκε έλα κέξνο (slice) ηεο αθνινπζίαο. Αθνινπζεί παξάδεηγκα : Page 123 of 253

124 Πσο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : Αξρηθά βιέπνπκε πψο λα ρξεζηκνπνηνχκε επξεηήξηα γηα λα παίξλνπκε κνλαδηθά ζηνηρεία ηεο αθνινπζίαο. Απηφ αλαθέξεηαη επίζεο ζαλ ζπλδξνκεηηθή ιεηηνπξγία (subscription operation). Οπνηεδήπνηε θαζνξίδεηε έλα λνχκεξν ζε κηα αθνινπζία κέζα ζε αγθχιεο, φπσο θαίλεηαη παξαπάλσ, ε Python ζα θέξλεη ην ζηνηρείν πνπ αληηζηνηρεί ζε απηή ηε ζέζε ζηελ αθνινπζία. Θπκεζείηε φηη ε Python αξρίδεη λα κεηξάεη ηα λνχκεξα απφ ην κεδέλ. Γηα απηφ ην ιφγν ε ictelessons_list[0] θάλεη κεηάθιεζε ηνπ πξψηνπ ζηνηρείνπ θαη ε ictelessons_list[3] θάλεη κεηάθιεζε ηνπ ηέηαξηνπ ζηνηρείνπ ζηελ αθνινπζία shoplist. Σν επξεηήξην κπνξεί λα είλαη έλαο αξλεηηθφο αξηζκφο, ζηελ νπνία πεξίπησζε, ε ζέζε ππνινγίδεηαη απφ ην ηέινο ηεο αθνινπζίαο. Έηζη, ε ictelessons_list[-1] αλαθέξεηαη ζην ηειεπηαίν ζηνηρείν ζηελ αθνινπζία θαη ε ictelessons_list[-2] θάλεη κεηάθιεζε ηνπ δεχηεξνπ απφ ην ηέινο ζηνηρείνπ ζηελ αθνινπζία. Η ιεηηνπξγία ηεκαρηζκνχ ρξεζηκνπνηείηαη θαζνξίδνληαο ηελ νλνκαζία ηεο αθνινπζίαο, αθνινπζνχκελν απφ έλα πξναηξεηηθφ δεπγάξη αξηζκψλ, πνπ δηαρσξίδνληαη απφ δηπιή ηειεία κέζα ζε αγθχιεο. εκεηψζηε φηη απηφ είλαη παξφκνην κε ηε ιεηηνπξγία επξεηεξίαζεο, πνπ έρεη ρξεζηκνπνηεζεί κέρξη ηψξα. Θπκεζείηε φηη ηα νούμεπα είναι πποαιπεηικά αλλά η διπλή ηελεία δεν είναι. Σν πξψην λνχκεξν (πξηλ απφ ηε δηπιή ηειεία) ζηε ιεηηνπξγία ηεκαρηζκνχ αλαθέξεηαη ζηε ζέζε απφ φπνπ ην ηκήκα (slice) αξρίδεη θαη ην δεχηεξν λνχκεξν (κεηά ηε δηπιή ηειεία) δείρλεη πνπ ζα ζηακαηήζεη ην ηκήκα. Δάλ δελ θαζνξίδεηαη ην Page 124 of 253

125 πξψην λνχκεξν, ε Python ζα αξρίζεη ζηελ αξρή ηεο αθνινπζίαο. Δάλ ην δεχηεξν λνχκεξν παξαιήθζεθε, ε Python ζα ζηακαηήζεη ζην ηέινο ηεο αθνινπζίαο. Σν ηκήκα πνπ επηζηξέθεηαη μεθηλά απφ ηελ αξρηθή ζέζε θαη ηειεηψλεη αθξηβψο πξηλ απφ ηελ ηειηθή ζέζε, δειαδή ε αξρηθή ζέζε ζπκπεξηιακβάλεηαη αιιά ε ηειηθή ζέζε απνθιείεηαη απφ ην ηκήκα ηεο αθνινπζίαο. Έηζη ε ictelessons_list[1:3] επηζηξέθεη έλα ηκήκα ηεο αθνινπζίαο αξρίδνληαο ζηε ζέζε 1, πεξηιακβάλεη ηε ζέζε 2, αιιά ζηακαηάεη ζηε ζέζε 3, ζπλεπψο, επηζηξέθεηαη έλα ηκήκα δχν αληηθεηκέλσλ. Παξφκνηα, ε ictelessons_list[:] επηζηξέθεη έλα αληίγξαθν φιεο ηεο αθνινπζίαο. Μπνξείηε επίζεο λα θάλεηε ηεκαρηζκφ κε αξλεηηθέο ζέζεηο. Οη αξλεηηθνί αξηζκνί ρξεζηκνπνηνχληαη γηα ζέζεηο απφ ην ηέινο ηεο αθνινπζίαο. Γηα παξάδεηγκα, ε ictelessons_list[:-1] ζα επηζηξέςεη έλα ηκήκα ηεο αθνινπζίαο ε νπνία παξαιείπεη ην ηειεπηαίν ζηνηρείν ηεο αθνινπζίαο, αιιά πεξηέρεη θάζε άιιν. Το ςπουδαίο με τισ ακολουκίεσ είναι ότι μποροφμε να ζχουμε πρόςβαςθ ςε πλειάδεσ, λίςτεσ και ςυμβολοςειρζσ όλεσ με τον ίδιο τρόπο. ύλνιν (Set) Σα ζχλνια είλαη κε ηαμηλνκεκέλεο ζπιινγέο απιψλ αληηθεηλέλσλ. Απηά ρξεζηκνπνηνχληαη φηαλ ε χπαξμε ελφο αληηθεηκέλνπ ζε κηα ζπιινγή είλαη πην ζπνπδαία απφ ηελ εληνιή ή πφζεο θνξέο απηή ζπκβαίλεη. Υξεζηκνπνηψληαο ηα ζχλνια, κπνξείηε λα ειέγμεηε γηα έληαμε (membership), εάλ είλαη έλα ππνζχλνιν (subset) ελφο άιινπ ζπλφινπ, λα βξείηε ηελ ηνκή (intersection) αλάκεζα ζε δχν ζχλνια θαη νχησ θαζεμήο. Σα ζχλνια καο δηεπθνιχλνπλ ζηελ νκαδνπνίεζε πνιιψλ αληηθεηκέλσλ θαη ζηελ εθαξκνγή ζηελ ζπλέρεηα πξάμεσλ φπσο ε ελσζή ηνπο κε απνδνηηθφ ηξφπν, εμαζθαιίδνληαο πσο θάζε ζηνηρείν, αλ πεξηέρεηαη ζε πάλσ απφ έλα ζχλνια, ηειηθά ζα βξεζεί κφλν κηα θνξά ζην ηειηθφ απνηέιεζκα. Πξφθεηηαη γηα κηα δνκή δεδνκέλσλ πνπ αλαπαξίζηαηαη ςο έλα κε δηαηεηαγκέλν ζχλνιν κνλαδηθψλ ζηνηρείσλ. Γεκηνπξγία ζπλόινπ Γηα ηελ απεπζείαο δεκηνπξγία ελφο ζπλφινπ ρξεζηκνπνηνχκε αγθχιεο. Η Python θαηαιαβαίλεη πσο δελ είλαη ιεμηθφ αιιά αλαθεξφκαζηε ζε ζχλνιν, επεηδή δελ Page 125 of 253

126 ππάξρεη ε αλσ θάησ ηειεία ε νπνία ππνδειψλεη ηελ ηηκή πνπ αληηζηνηρίδεηαη ζε θάζε θιεηδί. Αο δνχκε έλα παξάδεηγκα : Μπνξνχκε επίζεο λα δεκηνπξγήζνπκε έλα ιεμηθφ απφ νπνηνδήπνηε ηχπν δεδνκέλσλ θζάλεη λα κπνξνχκε λα δηαηξέμνπκε ηα ζηνηρεία απηνχ ηνπ ηχπνπ (iterable). Βαζηθέο πξάμεηο ζπλόισλ πσο γλσξίδνπκε απφ ηα καζεκαηηθά, νη βαζηθέο πξάμεηο ζπλφισλ είλαη : Πξφζζεζε ζηνηρείνπ ζε έλα ζχλνιν Αθαίξεζε ζηνηρείνπ απφ έλα ζχλνιν Έλσζε ζπλφισλ Σνκή ζπλφισλ Γηαθνξά ζπλφισλ πκκεηξηθή δηαθνξά ζπλφισλ Page 126 of 253

127 Αθνινπζνχλ κεξηθά παξαδείγκαηα γηα ηελ θαιχηεξε θαηαλφεζε ησλ ζπλφισλ: 1 ν παξάδεηγκα : 2 ν παξάδεηγκα : Page 127 of 253

128 Παξαπνκπέο (References) ηαλ δεκηνπξγείηε έλα αληηθείκελν θαη ην εθρσξείηε ζε κηα κεηαβιεηή, ε κεηαβιεηή απιά παξαπέκπεη ζην αληηθείκελν θαη δελ αληηπξνζσπεχεη θαζ' απηφ ην αληηθείκελν. H νλνκαζία ηεο κεηαβιεηήο δείρλεη ζε εθείλν ην ζεκείν ηεο κλήκεο ηνπ ππνινγηζηή, φπνπ απνζεθεχεηαη ην αληηθείκελν. Απηφ νλνκάδεηαη ζπζρέηηζε (binding) ηεο νλνκαζίαο κε ην αληηθείκελν. Γεληθά δελ πξέπεη λα αλεζπρείηε γηα απηφ, αιιά ππάξρεη κηα κηθξή επίδξαζε εμαηηίαο ησλ παξαπνκπψλ ηελ νπνία πξέπεη λα αληηιεθζείηε. Αθνινπζεί ζρεηηθφ παξάδεηγκα : Σα αλαιπηηθά ζρφιηα ηνπ παξαπάλσ παξαδείγκαηνο εμεγνχλ ηη αθξηβψο θάλεη! Εάν κζλουμε να φτιάξουμε ζνα αντίγραφο μιασ λίςτασ, ι τζτοιου είδουσ ακολουκίεσ, ι ςφμπλοκα αντικείμενα (όχι απλά αντικείμενα όπωσ ακζραιουσ αρικμοφσ), τότε πρζπει να χρθςιμοποιιςουμε τθ λειτουργία τεμαχιςμοφ για να φτιάξουμε αντίγραφο. Εάν εκχωριςουμε τθν ονομαςία τθσ μεταβλθτισ ςε μια άλλθ ονομαςία, τότε και οι δυο τουσ κα παραπζμπουν ςτο ίδιο αντικείμενο και αυτό κα μποροφςε να είναι πρόβλθμα για μασ, Page 128 of 253 εάν δεν είμαςτε προςεκτικοί.

129 Μια ενηολή εκσώπηζηρ για λίζηερ δε δημιοςπγεί ανηίγπαθο. Ππέπει να σπηζιμοποιήζεηε ηη λειηοςπγία ηεμασιζμού για να θηιάξεηε ανηίγπαθο ηηρ ακολοςθίαρ. Κάηη παξαπάλσ γηα ηηο ζπκβνινζεηξέο Οη ζπκβνινζεηξέο είλαη επίζεο αληηθείκελα θαη έρνπλ κεζφδνπο πνπ θάλνπλ ηα πάληα, απφ ηνλ έιεγρν ηνπ ηκήκαηνο κηαο ζπκβνινζεηξάο κέρξη απνθνπή ησλ δηαζηεκάησλ! Οη ζπκβνινζεηξέο πνπ ρξεζηκνπνηείηε ζην πξφγξακκα είλαη φιεο αληηθείκελα ηεο θιάζεο str. Μεξηθέο ρξήζηκεο κεζφδνη ηεο θιάζεο παξνπζηάδνληαη ζην επφκελν παξάδεηγκα. Γηα κηα νινθιεξσκέλε ιίζηα ηέηνησλ κεζφδσλ ( βιέπε ηελ help(str) ). Αθνινπζεί έλα θαηαηνπηζηηθφηαην παξάδεηγκα : Page 129 of 253

130 Πσο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : Eδψ βιέπνπκε πνιιέο κεζφδνπο ηεο ζπκβνινζεηξάο ζε ελέξγεηα. Η κέζνδνο startswith ρξεζηκνπνηείηαη γηα λα αλαθαιχςνπκε αλ ε ζπκβνινζεηξά αξρίδεη κε ηε δνζείζα ζπκβνινζεηξά. Ο ηειεζηήο in ρξεζηκνπνηείηαη γηα λα ειέγμεη αλ ε δνζείζα ζπκβνινζεηξά είλαη κέξνο ηεο ζπκβνινζεηξάο. Η κέζνδνο find ρξεζηκνπνηείηαη γηα λα αλαθαιχςεη ηε ζέζε ηεο δνζείζαο ζπκβνινζεηξάο ζηε ζπκβνινζεηξά ή επηζηξέθεη -1 εάλ δελ επηηχρεη ηελ αλαθάιπςε ηεο ππνζπκβνινζεηξάο (substring). Η θιάζε str επίζεο έρεη ηελ κέζνδν join γηα λα ελψλεη ηα ζηνηρεία κηαο αθνινπζίαο, κε ηε ζπκβνινζεηξά λα ελεξγεί ζα δηαρσξηζηηθό (delimiter) αλάκεζα ζε θάζε ζηνηρείν ηεο αθνινπζίαο, θαη επηζηξέθεη κηα κεγαιχηεξε ζπκβνινζεηξά γελλεκέλε απφ απηφ. ύλζεηα αληηθείκελα Δδψ ζα αλαθεξζνχµε ζηα ππφινηπα αληηθείµελα ζηελ Python πνπ πεξηέρνπλ άιια αληηθείµελα (container types). Μεξηθά απφ απηά είλαη : Πιεηάδεο (tuple) Αιθαξηζµεηηθά (string) Λίζηεο (list) χλνια (set) Λεμηθά (dictionary) ηελ ίδηα θαηεγνξία µπνξνχµε λα εληάμνπµε αληηθείµελα απφ θιάζεηο πνπ ϕηηάρλνπµε εµείο. Απηά θαηαιαµβάλνπλ δηαθνξεηηθή ζέζε µλήµεο αθφµα θαη αλ πεξηέρνπλ αληηθείµελα µε ηηο ίδηεο ηηµέο. Μφλε εμαίξεζε είλαη αλ µηα µεηαβιεηή απνηειεί ςεπδψλπµν (alias) µηαο άιιεο,ην νπνίν ζα αλαιχζνπκε ζηελ ζπλέρεηα. Page 130 of 253

131 Δδψ αμίδεη λα επηζεµάλνπµε θαη ηελ δηαθνξά ηνπ ηειεζηή is από ηνλ ηειεζηή ==. Ο πξψηνο ειέγρεη αλ δπν µεηαβιεηέο αλαθέξνληαη ζε αθξηβψο ην ίδην αληηθείµελν, ελψ ν ηειεζηήο == ειέγρεη µφλν ηα πεξηερφµελα ησλ δπν αληηθεηµέλσλ. Βιέπνπκε ζην παξαθάησ παξάδεηγκα : Φεπδώλπκα Φεπδώλπµν (alias) είλαη φηαλ αλαθεξφµαζηε ζε έλα αληηθείµελν µε έλα δηαϕνξεηηθφ φλνµα, ρξεζηµνπνηψληαο µηα δηαθνξεηηθή µεηαβιεηή γηα λα αλαϕεξζνχµε ζε απηφ. Οηαλ γίλεηαη θάηη ηέηνην, φ,ηη αιιαγέο γίλνπλ, αλεμάξηεηα απφ ηνλ ηξφπν αλαθνξάο ζην ζπγθεθξηµέλν αληηθείµελν, ζα επεξεάζνπλ φιεο ηηο µεηαβιεηέο πνπ αλαθέξνληαη ζε απηφ. Παξαηεξνχµε δειαδή φηη ε πξνζζήθε ηνπ αξηζµνχ 4 ζηελ ιίζηα πνπ έδεηρλε ην a, επεξεάδεη θαη ηελ ιίζηα b, αθνχ ζηελ νπζία ην b είλαη έλα ςεπδψλπµν ηνπ a θαη αλαθέξνληαη αθξηβψο ζην ίδην αληηθείµελν. Page 131 of 253

132 None Σν None είλαη έλαο εηδηθφο ηχπνο ν νπνίνο αλαπαξηζηά ηελ ηδέα φηη δελ ππάξρεη θάηη. ε άιιεο γιψζζεο ε ίδηα έλλνηα ζπρλά απαληάηαη απφ ην Null. Η ηηµή Null ζηελ Python δελ ηζνχηαη µε θαµία άιιε ηηµή παξά µφλν µε ηνλ εαπηφ ηεο θαη ν µφλνο ηξφπνο γηα λα αλαθεξζνχµε ζε απηή είλαη µέζσ ηεο ιέμεο θιεηδί None. Η ηηµή None είλαη ε ηηµή πνπ µαο επηζηξέθνπλ ζπλαξηήζεηο πνπ ηειηθά δελ επηζηξέθνπλ θάηη. Αθνχ φπσο είπαµε ε ηηµή None αληηπξνζσπεχεη ηελ έλλνηα ηνπ δελ ππάξρεη θάηη, ε ζπγθεθξηµέλε ζπµπεξηθνξά είλαη θάηη πνπ ϑα έπξεπε λα πεξηµέλνπµε. εκαληηθή ζεκείσζε Η ζπλάξηεζε ζα µπνξνχζε λα επηζηξέθεη ηελ ηηµή None. Σψξα φµσο είµαζηε ζηελ πεξίπησζε φπνπ επεηδή δελ επηζηξέθεηαη θάηη, ξίζθνπµε απηή ηελ ηηµή. Απηφ νδεγεί ζε µηα ζρεδηαζηηθή αξρή φπνπ ζπλήζσο, φηαλ νη ζπλαξηήζεηο επεξεάδνπλ ηα νξίζµαηα ηνπο, επηζηξέθνπλ ηελ ηηµή None έηζη ψζηε αθνχ ν ρξήζηεο λα ιέπεη εηά πσο ηα απνηειέζµαηα ηεο ζπλάξηεζεο απνζεθεχνληαη µέζα ζην αληηθείµελν. Page 132 of 253

133 Υώξνο Ολνµάησλ Ο ρψξνο νλνµάησλ νπζηαζηηθά αληηζηνηρεί ζε έλα πεξηβάιινλ γηα ηα αληηθείµελα πνπ πεξηέρεη θαη µαο επηηξέπεη λα αληηιεθζνχµε (θαη εµείο θαη ν ππνινγηζηήο) πνπ αλαθέξεηαη µηα µεηαβιεηή.ηελ Python, γηα λα απινπνηήζνπµε ηα πξάγµαηα, µπνξνχµε λα ζθεϕζνχµε φηη παξέρεηαη έλαο ρψξνο νλνµάησλ γηα θάζε αξρείν. Δηζη, φηαλ θάλνπµε: from file import* εηζάγνπµε φιεο ηηο µεηαβιεηέο απφ ην αξρείν python.py ζηνλ ρψξν νλνµάησλ. Απινπνηψληαο θάπνηα πξάγµαηα, µπνξνχµε λα ζθεθζνχµε φηη θάζε ϕνξά πνπ θάλνπµε ζηνίρεζε ζε θψδηθα πξνο ηα µέζα, δεµηνπξγείηαη έλαο θαηλνχξγηνο ρψξνο νλνµάησλ. ε απηφ ην ρψξν νλνµάησλ αλήθνπλ φιεο νη µεηαβιεηέο πνπ δειψλνληαη γηα πξψηε ϕνξά εθεί. Αλ θάπνηα µεηαβιεηή δε ξεζεί εθεί, ε αλαδήηεζε ζπλερίδεηαη ζην ρψξν νλνµάησλ πνπ ππάξρεη έλα επίπεδν πξηλ (µηθξφηεξε ζηνίρεζε πξνο ηα µέζα) µέρξη λα ϕζάζνπµε ζην ηέξµα αξηζηεξά επίπεδν. Δµβέιεηα Αιιε µηα ζεµαληηθή παξάµεηξνο σο πξνο ηηο µεηαβιεηέο πνπ πάληα πξέπεη λα έρνπµε ππφςε µαο είλαη ε εµβέιεηα ηνπο. def f(a): a = 5 Σρήκα 1 : Ο ρώξνο νλνµάηωλ (namespace) µεηά ηε δεµηνπξγία µίαο ιίζηαο. Σρήκα 2 : Ο ρώξνο νλνµάηωλ µεηά ηε δεµηνπξγία θαη µίαο δεύηεξεο ιίζηαο πνπ δείρλεη ζηελ πξώηε. Page 133 of 253

134 Σρήκα 3 : Η αιιαγή ηωλ ζηνηρείωλ αιιάδεη θαη ηηο δύν ιίζηεο. Σρήκα 4 : Ο ρώξνο νλνµάηωλ µεηά ηε δεµηνπξγία ελόο ιεμηθνύ πνπ πεξηέρεη ιίζηεο. ην παξαθάησ παξάδεηγµα, ην αληηθείµελν ιίζηαο L θαιείηαη θαηά αλαϕνξά. Δηζη, θαηά αξράο ην x δείρλεη ζηελ ίδηα δηεχζπλζε πνπ έδεηρλε θαη ην L. ηελ ζπλέρεηα φµσο, δεµηνπξγείηαη έλα θαηλνχξγην αληηθείµελν θαη ην x πιένλ δείρλεη ζε απηφ. Γηα απηφλ ην ιφγν θαη αιιάδεη ε δηεχζπλζε φπνπ δείρλεη πηα. Σέινο, ε ζπλάξηεζε ηεξµαηίδεη, θαη ην L δείρλεη πηα ζηελ αξρηθή ηνπ ζέζε, θαη έρεη ηηο ίδηεο ηηµέο µε πξηλ θιεζεί ε ζπλάξηεζε. Παξαηεξνχµε, µε άιια ιφγηα, πσο αξρηθά πεξληέηαη µηα αλαθνξά ηνπ αληηθεηµέλνπ µέζα ζηελ ζπλάξηεζε. Οµσο µέζα ζηελ ζπλάξηεζε δεµηνπξγείηαη έλα λέν αληηθείµελν αθνχ νη ιίζηεο δελ αλαθέξνληαη µε ςεπδψλπµα, θαη ην x ηψξα πηα δείρλεη ζε απηφ. Μφιηο ηεξµαηίζεη ε ζπλάξηεζε, ε µεηαβιεηή L πνπ ε ηηµή ηεο δελ έρεη αιιάμεη απφ ηελ θιήζε ηεο ζπλάξηεζεο foo() ζπλερίδεη λα δείρλεη ζην ίδην αληηθείµελν ην νπνίν θαη δελ έρεη ηξνπνπνηεζεί απφ ηελ ζπλάξηεζε. Page 134 of 253

135 Σψξα γίλεηαη αθφµα πην μεθάζαξν γηαηί ην φλνµα ηνπ νξίζµαηνο ζηελ ζπλάξηεζε δελ παίδεη θάπνην φιν θαη γηαηί ζα µπνξνχζαµε λα ην έρνπµε αληηθαηαζηήζεη µε νπνηαδήπνηε άιιε έγθπξε ηηµή, φπσο θαη µε ην L αθφµα. Δλαο πξαθηηθφο θαλφλαο γηα λα αλαγλσξίδνπµε ζε πνην L ζε απηή ηελ πεξίπησζε αλαθεξφµαζηε, είλαη ζην λα έρνπµε ππφςε µαο απηφ πνπ ξίζθεηαη πην θνληά. Αμίδεη λα ζεµεηψζνπµε πσο αλ ε foo() δελ έπαηξλε φξηζµα, θαη ηελ θαιν-χζαµε ρξεζηµνπνηψληαο µέζα ζην ζψµα ηεο ηελ µεηαβιεηή L, ηφηε ε python δελ ζα έιεγρε αλ ηπρφλ ππάξρεη απφ ην εμσηεξηθφ πεξηβάιινλ µηα µεηαβιεηή µε ην φλνµα L αιιά ζα έβγαδε error θαηεπζείαλ ιέγνληαο πσο δελ βξέζεθε µεηαβιεηή µε ην ζπγθεθξηµέλν φλνµα µέζα ζηελ εµβέιεηα ηεο ζπλάξηεζεο. Απηή ε αιιαγή ζε ζρέζε µε ηηο πξνεγνχµελεο εθδφζεηο ηεο Python ζπλέβε γηα ηελ απνθπγή δχζθνισλ πξνο εληνπηζµφ ιαζψλ πνπ ζα µπνξνχζαλ λα ζπµβνχλ µε απηφ ηνλ ηξφπν. Page 135 of 253

136 πλνςίδνληαο ινηπφλ µέρξη ζηηγµήο θαηαιήγνπµε ζην ζπµπέξαζµα φηη αλαζέζεηο ζε ηνπηθέο µεηαβιεηέο µέζα ζε µηα ζπλάξηεζε δελ επεξεάδνπλ ηηο ηηµέο ησλ µεηαβιεηψλ πνπ είλαη δεισµέλεο έμσ απφ απηή ηελ ζπλάξηεζε. Αληίζεηα φµσο, φπσο ιέπνπµε ζην αθφινπζν παξάδεηγµα, αλ µηα µεηαβιεηή αλαθέξεηαη ζε αληηθείµελν πνπ έρεη δεµηνπξγεζεί έμσ απφ ηελ ζπλάξηεζε πνπ ξηζθφµαζηε ηψξα, θαη εθφζνλ απηή ε αλαθνξά δελ αιιάδεη, νπνηαδήπνηε αιιαγή θάλνπµε ζε απηφ ην αληηθείµελν, επεξεάδεηαη θαη εμσηεξηθά ηεο ζπλάξηεζεο, αθνχ αλαθεξφµαζηε ζηηο αθξηβψο ίδηεο ζέζεηο µλήµεο. Page 136 of 253

137 Αληηγξαθή αληηθεηµέλσλ Αλάινγα µε ηνλ ηχπν ηνπ αληηθεηµέλνπ ν ηειεζηήο αλάζεζεο µπνξεί λα δεµηνπξγήζεη µφλν µηα θαηλνχξγηα αλαθνξά ζε µηα µεηαβιεηή θαη λα µελ αληηγξάςεη ηα πεξηερφµελα ηνπ αληηθείµελνπ. Αλ ζέινπµε θάηη ηέηνην, πξέπεη λα ρξεζηµνπνηήζνπµε ηε ζπλάξηεζε deepcopy. ην παξάδεηγµα πνπ αθνινπζεί ζα δνχµε πσο µπνξνχµε λα εθµεηαιιεπηνχµε ηελ επειημία πνπ µαο παξέρεη ε Python µε ηηο αλαθνξέο αιιά θαη φηαλ ρξεηαζηεί λα δεµηνπξγνχµε θαηλνχξγηα αληίγξαθα ησλ αληηθεηµέλσλ. Page 137 of 253

138 Πσο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : ηελ πξψηε ζπλάξηεζε access_trie() βιέπνπµε πσο ρξεζηµνπνηνχµε ηηο αλαθνξέο πνπ δεµηνπξγνχµε µε ηνλ ηειεζηή ηεο αλάζεζεο ψζηε λα µπνξέζνπµε λα πξνζπειάζνπµε θάζε εµθσιεπµέλν ιεμηθφ αθνχ έρνπµε πξψηα πξνζπειάζεη απηφ πνπ ην πεξηέρεη. Γηα παξάδεηγµα, αο ππνζέζνπµε πσο ην φξηζµα position είλαη None, πνπ ζεµαίλεη πσο ν θψδηθαο µέζα ζην if δελ εθηειείηαη πνηέ, επνµέλσο µπνξνχµε λα επηθεληξσζνχµε ζηηο ππφινηπεο δπν γξαµµέο ηνπ θψδηθα. Πξνζπειαχλνπµε αθνινπζηαθά θάζε ζηνηρείν ηεο αθνινπζίαο sequence θαη µε βάζε απηφ ην ζηνηρείν δεηθηνδνηνχµε έλα ιεμηθφ. Αξρηθά, ην ιεμηθφ πνπ δεηθηνδνηνχµε είλαη απηφ ην νπνίν έρνπµε πάξεη σο φξηζµα απφ ην πεξηβάιινλ ηεο ζπλάξηεζεο. Σν απνηέιεζµα πνπ µαο επηζηξέθεηαη είλαη µηα αλαθνξά ζε έλα άιιν ιεμηθφ πνπ πεξηέρεηαη ζην αξρηθφ. Απηή ε αλαθνξά απνζεθεχεηαη ζηε ηνπηθή µεηαβιεηή d ε νπνία θαη θξχβεη (hides) πιένλ ην φξηζµα πνπ είραµε δερζεί αθνχ έρνπλ ην ίδην φλνµα. Δηζη, νπνηαδήπνηε ηξνπνπνίεζε ηνπ d απφ εδψ θαη πέξα ζα έρεη ηζρχ µφλν ζην ηνπηθφ πεξηβάιινλ ηεο ζπλάξηεζεο θαη δελ ζα επεξεάζεη ηελ ηηµή ησλ Page 138 of 253

139 νξηζµάησλ ηεο. πλερίδνληαο ηελ ίδηα δηαδηθαζία ξίζθνπµε ην επηζπµεηφ απνηέιεζµα ην νπνίν θαη µπνξνχµε λα επηζηξέςνπµε ζην πεξηβάιινλ εθηέιεζεο ηεο ζπλάξηεζεο. Οζνλ αθνξά ηε δεχηεξε ζπλάξηεζε populate_trie ε ινγηθή πνπ αθνινπζείηαη είλαη παξφµνηα, φµσο επεηδή ζέινπµε λα ηξνπνπνηήζνπµε ην αληηθείµελν θαη λα ηνπ πξνζζέηνπµε θάπνηα άιια πξνθαζνξηζµέλα αληηθείµελα µαο δίλεηαη ε επθαηξία λα µειεηήζνπµε ηελ ζπλάξηεζε deepcopy. Η ινγηθή ζε απηφ ηε ζπλάξηεζε είλαη παξφµνηα µε ηελ πξνεγνχµελε. Σν ελδηαθέξνλ θνµµάηη αξρίδεη µφιηο ξνχµε ην µέξνο ηνπ ιεμηθνχ φπνπ ζέινπµε λα εµθσιεχζνπµε ην θαηλνχξγην αληηθείµελν. Αλ δελ αληηγξάθαµε ην embedded_obj εθεί, ζα είραµε εηζάγεη µηα αλαθνξά ζην ίδην αληηθείµελν ζε δηαθνξεηηθά ζεµεία. Με άιια ιφγηα ζα είραµε πάεη έλα επίπεδν πην µέζα ζηε δνµή θαη ζα είραµε εηζάγεη µέζα ζην embedded_obj µηα αλαθνξά ζην embedded_obj. Απηφ νλνµάδεηαη θπθιηθή δνµή. Αληηγξάθνληαο ινηπφλ ην αληηθείµελν, δεµηνπξγείηαη έλα θαηλνχξγην αληίγξαθν (δηαθνξεηηθφ απφ ην πξνεγνχµελν) ην νπνίν θαη εηζάγνπµε ζηε θαηάιιειε ζέζε. Δλα πην θιαζηθφ παξάδεηγµα θπθιηθήο δνµήο είλαη ην παξαθάησ : Αληηθείκελα θαη θιάζεηο-αληηθεηκελνζηξαθήο πξνγξακκαηηζκόο ια ηα πξνγξάκκαηα πνπ γξάςακε κέρξη ζηηγκήο, ηα ζρεδηάζακε κε ηε ρξήζε ζπλαξηήζεσλ, δειαδή κπινθ εληνιψλ πνπ ρεηξίδνληαη δεδνκέλα. Απηή ε κέζνδνο απνθαιείηαη δηαδηθαζηνζηξεθήο πξνγξακκαηηζκόο. Τπάξρεη θαη άιιε κέζνδνο ζπγγξαθήο πξνγξακκάησλ, ε νπνία ζπλδπάδεη δεδνκέλα θαη ιεηηνπξγηθφηεηα εκπεξηθιείνληαο ηα ζε έλα αληηθείκελν. Η κέζνδνο απηή νλνκάδεηαη αληηθεηκελνζηξεθήο πξνγξακκαηηζκόο. πλήζσο ε ρξήζε δηαδηθαζηνζηξεθνχο πξνγξακκαηηζκνχ αξθεί, αιιά αλ γξάθεηε κεγάια πξνγξάκκαηα ή αληηκεησπίδεηε έλα πξφβιεκα πνπ εμππεξεηείηαη θαιχηεξα Page 139 of 253

140 απφ απηή ηε κέζνδν, κπνξείηε λα ρξεζηκνπνηήζεηε ηερληθέο αληηθεηκελνζηξεθνχο πξνγξακκαηηζκνχ. Οη θιάζεηο θαη ηα αληηθείκελα είλαη νη δχν θχξηεο πηπρέο ηνπ αληηθεηκελνζηξεθνχο πξνγξακκαηηζκνχ. Μηα θιάζε δεκηνπξγεί έλα λέν ηχπν, φπνπ ηα αληηθείκελα είλαη ππνζηάζεηο (instances) ηεο θιάζεο. Μηα αλαινγία ζα ήηαλ κε κεηαβιεηέο ηνπ ηχπνπ int θαη κεηαθξάδεηαη αληίζηνηρα ιέγνληαο φηη νη κεηαβιεηέο πνπ απνζεθεχνπλ αθέξαηνπο αξηζκνχο είλαη ππνζηάζεηο (αληηθείκελα) ηεο θιάζεο int. Ακόμθ και οι ακζραιοι αρικμοί αντιμετωπίηονται ωσ αντικείμενα (τθσ κλάςθσ int). ε αντίκεςθ με τθ C++ και Java (πριν τθν ζκδοςθ 1.5), όπου οι ακζραιοι είναι αρχζγονοι ατόφιοι τφποι δεδομζνων (primitive native types) εντολι help(int) για περιςςότερεσ λεπτομζρειεσ ςχετικά με τθν κλάςθ. Σα αληηθείκελα απνζεθεχνπλ δεδνκέλα κε ηε ρξήζε θνηλψλ κεηαβιεηψλ πνπ αλήθνπλ ζην αληηθείκελν. Οη κεηαβιεηέο πνπ αλήθνπλ ζε έλα αληηθείκελν ή θιάζε αλαθέξνληαη σο πεδία (fields). Σα αληηθείκελα κπνξνχλ επίζεο λα είλαη ιεηηνπξγηθά κε ηε ρξήζε ζπλαξηήζεσλ πνπ αλήθνπλ ζε κηα θιάζε. Σέηνηεο ζπλαξηήζεηο απνθαινχληαη κέζνδνη ηεο θιάζεο. Η νξνινγία απηή είλαη ζεκαληηθή δηφηη καο επηηξέπεη λα μερσξίζνπκε αλεμάξηεηεο ζπλαξηήζεηο θαη κεηαβιεηέο απφ απηέο πνπ αλήθνπλ ζε έλα αληηθείκελν ή θιάζε. Καζνιηθά, ηα πεδία θαη νη κέζνδνη αλαθέξνληαη σο ηδηνραξαθηεξηζηηθά (attributes) απηήο ηεο θιάζεο. Σα πεδία είλαη δχν ηχπσλ κπνξεί λα αλήθνπλ ζηελ ππφζηαζε/αληηθείκελν ηεο θιάζεο ή ζηελ ίδηα ηελ θιάζε. Απνθαινχληαη κεηαβιεηέο ππόζηαζεο (instance variables) θαη κεηαβιεηέο θιάζεο αληίζηνηρα. Μηα θιάζε δεκηνπξγείηαη κε ηε ιέμε-θιεηδί class. Σα πεδία θαη νη κέζνδνη ηεο θιάζεο απαξηζκνχληαη ζε κηα πινθάδα θψδηθα ζε εζνρή. Σα βαζηθά ραξαθηεξηζηηθά πνπ παξαηεξνχµε θαηά ηνλ ζρεδηαζµφ θαη ηελ πινπνίεζε ελφο ηππηθνχ πξνγξάµµαηνο µέζσ αληηθεηµελνζηξέθεηαο είλαη: Κιάζε (Class): Καζνξίδεη ηα αζηθά ραξαθηεξηζηηθά (attributes) θαη ζπµπεξηθνξέο (methods) ησλ αληηθεηµέλσλ πνπ πεξηγξάθνληαη απφ απηή ηελ θιάζε. Δλα παξάδεηγµα ζα µπνξνχζε λα είλαη ε θιάζε «ζρνιή». Γεληθφηεξα Page 140 of 253

141 µπνξνχµε λα ζθεθηφµαζηε φηη αληηπξνζσπεχνπλ ηα αδξά ραξαθηεξηζηηθά πνπ ελππάξρνπλ ζε φια ηα ζηηγµηφηππα µηαο θιάζεο Αληηθείµελν (Object): Μηα ζπγθεθξηµέλε µνξθή µηαο θιάζεο, δειαδή έλα απφ ηα αληηθείµελα πνπ πεξηγξάθεη ε θιάζε πνπ ην ραξαθηεξίδεη. Γηα παξάδεηγµα «Σκήκα Μεραληθψλ Πιεξνθνξηθήο θαη Σειεπηθνηλσληψλ». ηηγµηόηππν (Instance): Η θαηάζηαζε ελφο αληηθείµελν θαηά ηελ εθηέιεζε ηνπ πξνγξάµµαηνο µέζα απφ ηελ ζπγθεθξηµελνπνίεζε ηνπ. Μέζνδνο (Method): Η ζπµπεξηθνξά θαη νη δπλαηφηεηεο ελφο αληηθεηµέλνπ. Κιεξνλνµηθόηεηα (Inheritance): Οηαλ µηα θιάζε απνηειεί εμεηδίθεπζε µηαο άιιεο, θαη έηζη έρεη φια ηα ραξαθηεξηζηηθά πνπ πεξηγξάθνπλ ηελ θιάζε απφ ηελ νπνία θιεξνλνµεί, θαζψο θαη θάπνηα ηδηαίηεξα πνπ πεξηγξάθνπλ εηδηθά ηελ ζπγθεθξηµέλε νµάδα αληηθεηµέλσλ. Γηα παξάδεηγµα ν θιάζε «ζρνιή» µπνξεί λα θιεξνλνµεί απφ µηα γεληθφηεξε θιάζε «ΑΔΙ». Η κεηαβιεηή self Οη κέζνδνη θιάζεο έρνπλ κηα ζπγθεθξηκέλε δηαθνξά απφ ηηο θνηλέο ζπλαξηήζεηο - πξέπεη λα έρνπλ έλα επηπιένλ φλνκα θαη πξέπεη λα πξνζηεζεί ζηελ αξρή ηεο ιίζηαο παξακέηξσλ, εζείο δε ρξεηάδεηαη λα νξίζεηε κηα ηηκή ζε απηή ηελ παξάκεηξν φηαλ θαιείηε ηε κέζνδν, ζαο ην παξέρεη ε Python. Απηή ε ζπγθεθξηκέλε κεηαβιεηή αλαθέξεηαη ζην ίδην ην αληηθείκελν θαη θαηά ζπλζήθε, ηεο απνδίδεηαη ην φλνκα self. Παξφιν πνπ κπνξείηε λα δψζεηε νπνηνδήπνηε φλνκα ζε απηή ηελ παξάκεηξν, ζπληζηάηαη ην φλνκα κεηαβιεηήο self -νπνηνδήπνηε άιιν φλνκα είλαη απαμησηηθφ. Τπάξρνπλ πνιιά πιενλεθηήκαηα γηα ηε ρξήζε ελφο πξφηππνπ νλφκαηνο κεηαβιεηήο -ν θάζε αλαγλψζηεο ηνπ θψδηθα ηνπ πξνγξάκκαηνο ζαο ζα ην αλαγλσξίζεη άκεζα. Αθφκε θαη γξαθηθά πεξηβάιινληα αλάπηπμεο ινγηζκηθνχ (Integrated Development Environments) ζα ζαο ζπλδξάκνπλ, αλ ρξεζηκνπνηείηε ην φλνκα κεηαβιεηήο self. Τν όλνκα κεηαβιεηήο self ζηελ Python ηζνύηαη κε ην δείθηε this ζηελ C++ θαη ηελ αλαθνξά this ζηελ Java θαη C. Πώο ε Python νξίδεη ηελ ηηκή γηα ηε self θαη γηαηί ζαο απαιιάζζεη από ηνλ ρεηξνθίλεην νξηζκό ηεο; Έλα παξάδεηγκα ζα ην μεθαζαξίζεη. Αο πνχκε φηη κηα θιάζε νλνκάδεηαη MyClass θαη κηα ππφζηαζε απηήο νλνκάδεηαη myobject. Αλ θαιέζεηε κηα κέζνδν απηνχ ηνπ αληηθεηκέλνπ myobject.method(arg1, arg2), κεηαηξέπεηαη απηφκαηα απφ ηελ Python ζε MyClass.method(myobject, arg1, arg2) -απηή είλαη θαη ε ηδηαηηεξφηεηα ηνπ νλφκαηνο κεηαβιεηήο self. Απηφ ζεκαίλεη επίζεο φηη εάλ έρεηε κηα κέζνδν ε Page 141 of 253

142 νπνία δελ ιακβάλεη νξίζκαηα, ηφηε ζα πξέπεη λα έρεη ηνπιάρηζηνλ έλα φξηζκα, ηε κεηαβιεηή self. Βαζηθέο Δλλνηεο Η πην απιή θιάζε πνπ ζα µπνξνχζαµε λα γξάςνπµε είλαη : class icte(): pass department_of_uowm = icte() φπνπ µε ηελ δήισζε class icte(): δεµηνπξγνχµε µηα λέα θιάζε icte ελψ ζηελ ζπλέρεηα, µε ηελ δήισζε department_of_uowm = icte() δεµηνπξγνχµε έλα αληηθείµελν απηήο ηεο θιάζεο. Αθνινπζεί έλα αθφκα παξάδεηγκα θιάζεο : Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Γεκηνπξγνχκε κηα λέα θιάζε κε ηελ εληνιή class θαη ην φλνκα ηεο θιάζεο. Απηή αθνινπζείηαη απφ κηα πινθάδα εληνιψλ ζε εζνρή πνπ απνηεινχλ ηνλ θνξκφ ηεο θιάζεο. ηελ πεξίπησζή καο έρνπκε κηα θελή πινθάδα θαη δειψλεηαη κε ηελ εληνιή pass. ηε ζπλέρεηα, δεκηνπξγνχκε έλα αληηθείκελν/ππφζηαζε απηήο ηεο θιάζεο κε ην φλνκα απηήο αθνινπζνχκελν απφ έλα δεπγάξη παξελζέζεσλ. Γηα επαιήζεπζε, Page 142 of 253

143 επηβεβαηψλνπκε ηνλ ηχπν ηεο κεηαβιεηήο κε απιή εθηχπσζε ζηελ νζφλε. Μαο αλαθέξεη φηη έρνπκε κηα ππφζηαζε ηεο θιάζεο Person ζην άξζξσκα main. Παξαηεξήζηε φηη ε δηεχζπλζε κλήκεο ηνπ ππνινγηζηή φπνπ απνζεθεχηεθε ην αληηθείκελν εθηππψλεηαη επίζεο. Η δηεχζπλζε ζα έρεη δηαθνξεηηθή ηηκή ζηνλ ππνινγηζηή ζαο δηφηη ε Python απνζεθεχεη ην αληηθείκελν φπνπ βξεη δηαζέζηκν ρψξν. Μέζνδνη αληηθεηκέλνπ Οη θιάζεηο/αληηθείκελα δέρνληαη κεζφδνπο φπσο θαη ζπλαξηήζεηο, εθηφο ηεο πξφζζεηεο κεηαβιεηήο self. 1 ν παξάδεηγκα : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Δδψ βιέπνπκε ηε κεηαβιεηή self ζε δξάζε. Παξαηεξήζηε πσο ε κέζνδνο saypython δε δέρεηαη παξακέηξνπο, αιιά εκπεξηθιείεη ηε κεηαβιεηή self ζηνλ νξηζκφ ηεο ζπλάξηεζεο. Page 143 of 253

144 2 ν παξάδεηγκα : Αμίδεη λα παξαηεξήζνπµε πσο, φπσο θαη νη ζπλαξηήζεηο, έηζη θαη νη µέζνδνη µηαο θιάζεο νξίδνληαη µε ηελ ιέμε θιεηδί def. Δπίζεο, θαηά ηελ θιήζε ηεο µεζφδνπ ελφο αληηθεηµέλνπ δελ ζέηνπµε εµείο θάπνηα ηηµή ζην φξηζµα self αιιά απηφ γίλεηαη απηφµαηα. Κάζε µέζνδνο µηαο θιάζεο πξέπεη λα έρεη σο πξψην φξηζµα ην self, έηζη ψζηε ζηελ ζπλέρεηα µέζσ απηνχ ηνπ νξίζµαηνο λα γίλεηαη γλσζηφ πην αληηθείµελν θάιεζε ηε µέζνδν. Με απιά ιφγηα, µηα θιάζε είλαη έλαο ηξφπνο θαηαζθεπήο ελφο αληηθεηµέλνπ. Δλα αληηθείµελν είλαη έλαο ηξφπνο λα ρεηξηδφµαζηε πην εχθνια ραξαθηεξηζηηθά θαη ζπµπεξηθνξέο νµαδνπνηεµέλα. Μπνξνχµε λα ζθεθζνχµε ηα αληηθείµελα ζαλ θάηη πνπ ππάξρεη ζηνλ πξαγµαηηθφ θφζµν, ελψ ηηο θιάζεηο έλαλ ηξφπν θαηαζθεπήο ηνπο θαη πξνζδηνξηζµνχ ησλ ηδηνηήησλ ηνπο. Η κέζνδνο init Τπάξρνπλ πνιιά νλφκαηα κεζφδσλ πνπ έρνπλ εηδηθή ζεκαζία ζηηο θιάζεηο Python. Σψξα ζα δνχκε ηε ζεκαζία ηεο κεζφδνπ init. Η κέζνδνο init εθηειείηαη κφιηο έλα αληηθείκελν κηαο θιάζεο αξρηθνπνηείηαη. Η κέζνδνο απηή είλαη ρξήζηκε γηα ηελ θαηάιιειε αξρηθνπνίεζε πνπ επηζπκείηε γηα ην αληηθείκελν ζαο. Παξαηεξήζηε ηηο δηπιέο θάησ παχιεο ζηελ αξρή θαη ζην ηέινο ηνπ νλφκαηνο. Page 144 of 253

145 Αθνινζνχλ παξαδείγκαηα : 1 ν παξάδεηγκα : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Δδψ νξίδνπκε ηε κέζνδν init λα ιακβάλεη σο παξάκεηξν ηελ name (καδί κε ηε γλσζηή self). Σψξα, δεκηνπξγνχκε έλα λέν πεδίν πνπ απνθαιείηαη επίζεο name. Πξνζέμηε φηη πξφθεηηαη γηα δχν δηαθνξεηηθέο κεηαβιεηέο παξφηη αλαθέξνληαη θαη νη δχν σο 'name'. Γελ πξφθεηηαη λα ππάξμεη ζχγρηζε εδψ δηφηη ν δηάζηηθηνο ζπκβνιηζκφο (dotted notation) self.name ζεκαίλεη φηη ππάξρεη πνπ ιέγεηαη "name" θαη είλαη κέξνο ηνπ αληηθεηκέλνπ πνπ ιέγεηαη "self" ελψ ην άιιν name είλαη κηα ηνπηθή κεηαβιεηή. Απνθεχγνπκε ηε ζχγρηζε κεηαμχ ησλ δχν, αθνχ ππνδεηθλχνπκε ξεηά ζε πνηφ name αλαθεξφκαζηε. Σν ζεκαληηθφηεξν, πξνζέμηε φηη δελ θαινχκε ξεηά ηε κέζνδν init, αιιά κεηαθέξνπκε ηα νξίζκαηα εληφο ησλ παξελζέζεσλ κεηά ην φλνκα ηεο θιάζεο, φηαλ δεκηνπξγνχκε κηα λέα ππφζηαζε ηεο θιάζεο. Απηή είλαη ε ηδηαίηεξε ζεκαζία ηεο κεζφδνπ. Μπνξνχκε πιένλ λα ρξεζηκνπνηήζνπκε ην πεδίν self.name ζηηο κεζφδνπο καο θαη παξνπζηάδεηαη ζηε κέζνδν sayhello. Page 145 of 253

146 2 ν παξάδεηγκα : Πσο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : Οπσο βιέπνπµε παξαπάλσ, γηα λα θαηαζθεπάζνπµε έλα αληηθείµελν ηχπνπ Person() πξέπεη λα ηνπ πεξάζνπµε ηα θαηάιιεια νξίζµαηα πνπ ζα πξνζδηνξίζνπλ ηηο ηδηφηεηεο ηνπ. Page 146 of 253

147 Η εηδηθή µέζνδνο πνπ θαιείηαη µφιηο θαηαζθεπάδνπµε ην αληηθείµελν είλαη ε init (). Σν φλνµα ηεο ζε θάζε θιάζε πξέπεη λα είλαη ην ζπγθεθξηµέλν. Η init () παίξλεη πάληα σο πξψην φξηζµα ηελ ιέμε self πνπ ζεµαίλεη φηη ε ζπµπεξηθνξά πνπ πξνζδηνξίδεηαη αθνξά ην αληηθείµελν απφ ην νπνίν θαιείηαη ή ζηελ πξνθεηµέλε πεξίπησζε, ην αληηθείµελν πνπ πάεη λα δεµηνπξγεζεί. Σα επφµελα νξίζµαηα είλαη γηα λα πξνζδηνξίζνπµε ηηο ηδηφηεηεο ηνπ αληηθεηµέλνπ. Μεηαβιεηέο θιάζεο θαη αληηθεηκέλνπ Έρνπκε ήδε κειεηήζεη ηε ιεηηνπξγηθφηεηα ησλ θιάζεσλ θαη αληηθεηκέλσλ (δειαδή κεζφδσλ), αο εμεηάζνπκε ηψξα ηα δεδνκέλα. Σα δεδνκέλα, δειαδή ηα πεδία, δελ είλαη παξά ζπλεζηζκέλεο κεηαβιεηέο θαη νξηνζεηνχληαη απφ ηνπο ρψξνπο νλνκάησλ (namespaces) ησλ θιάζεσλ θαη αληηθεηκέλσλ. Απηφ ζεκαίλεη πξαθηηθά φηη ηα νλφκαηα απηά είλαη έγθπξα κφλν εληφο απηψλ ησλ θιάζεσλ θαη αληηθεηκέλσλ. Γη' απηφ απνθαινχληαη name spaces. Τπάξρνπλ δχν ηχπνη πεδίσλ (fields) -κεηαβιεηέο θιάζεο θαη κεηαβιεηέο αληηθεηκέλσλ θαη νη νπνίεο ηαμηλνκνχληαη αλάινγα κε ηελ θιάζε ή αληηθείκελν πνπ ηηο θαηέρεη αληίζηνηρα. Οη κεηαβιεηέο θιάζεο είλαη θνηλφρξεζηεο -κπνξνχλ λα πξνζπειαζηνχλ απφ φιεο ηηο ππνζηάζεηο απηήο ηεο θιάζεο. Τπάξρεη κφλν έλα αληίγξαθν ηεο κεηαβιεηήο θιάζεο θαη φηαλ θάπνην αληηθείκελν ηξνπνπνηήζεη ηε κεηαβιεηή απηή, ε ηξνπνπνίεζε ζα είλαη εκθαλήο ζε φιεο ηηο ππνζηάζεηο. Οη κεηαβιεηέο αληηθεηκέλνπ αλήθνπλ κεκνλσκέλα ζε θάζε αληηθείκελν/ππφζηαζε ηεο θιάζεο. ηελ πεξίπησζε απηή, θάζε αληηθείκελν έρεη ην δηθφ ηνπ αληίγξαθν ηνπ πεδίνπ, δειαδή δελ είλαη θνηλφρξεζηεο θαη δελ ζρεηίδνληαη ζε θακία πεξίπησζε κε ην ζπλνλφκαην πεδίν ζε κηα δηαθνξεηηθή ππφζηαζε. Έλα παξάδεηγκα ζα καο βνεζήζεη ζηελ θαηαλφεζή ηνπ είλαη ην παξαθάησ : Δίλαη αξθεηά κεγάιν ην παξάδεηγκα αιιά βνεζά ζηελ θαηαλφεζε ηεο θχζεο ησλ κεηαβιεηψλ θιάζεσλ θαη αληηθεηκέλσλ. Page 147 of 253

148 Page 148 of 253

149 Σξέρνληαο ην παξαπάλσ πξφγξακκα, πξνθχπηεη : Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Η κεηαβιεηή population αλήθεη ζηελ θιάζε Robot θαη ζπλεπψο είλαη κηα κεηαβιεηή θιάζεο. Η κεηαβιεηή name αλήθεη ζην αληηθείκελν (έρεη αλαηεζεί κε ηε ρξήζε ηεο self) θαη είλαη κηα κεηαβιεηή αληηθεηκέλνπ. Άξα, αλαθεξφκαζηε ζηε κεηαβιεηή θιάζεο population σο Robot.population θαη φρη σο self.population. Αλαθεξφκαζηε ζηε κεηαβιεηή αληηθεηκέλνπ name κε ην ζπκβνιηζκφ self.name ησλ κεζφδσλ απηνχ ηνπ αληηθεηκέλνπ. ΠΡΟΟΥΗ ζε απηή ηελ απιή δηαθνξά κεηαμχ ησλ κεηαβιεηψλ θιάζεσλ θαη αληηθεηκέλσλ. Δπίζεο, κηα κεηαβιεηή αληηθεηκέλνπ κε ην ίδην φλνκα κηαο κεηαβιεηήο θιάζεο ζα απνθξχςεη ηε κεηαβιεηή θιάζεο! Σν πεδίν howmany είλαη πξάγκαηη κηα κέζνδνο πνπ αλήθεη ζηελ θιάζε θαη φρη ζην αληηθείκελν. Απηφ ζεκαίλεη φηη κπνξνχκε λα νξηζηεί είηε σο classmethod ή σο staticmethod, αλάινγα κε ην αλ ζα πξέπεη λα γλσξίδνπκε ζε πνηα θιάζε αλήθεη. Γεδνκέλνπ φηη δε ρξεηαδφκαζηε ηέηνηεο πιεξνθνξίεο, ζα επηιέμνπκε ηε staticmethod. o Θα είρακε επίζεο ην ίδην απνηέιεζκα κε ηε ρξήζε δηαθνζκεηψλ def howmany(): # τυπώνει τον τρϋχων πληθυςμό print('έχουμε {0:d} ρομπότ!'.format(robot.population)) Page 149 of 253

150 Μπνξνχκε λα θαληαζηνχκε ηνπο δηαθνζκεηέο σο ζπληνκεχζεηο γηα ηελ θιήζε κηαο ξεηήο εληνιήο (explicit statement), φπσο είδακε ζε απηφ ην παξάδεηγκα. Παξαηεξήζηε φηη ε κέζνδνο init ρξεζηκνπνηείηαη γηα ηελ αξρηθνπνίεζε ηεο ππφζηαζεο Robot κε έλα φλνκα. ε απηή ηε κέζνδν, ν αξηζκφο ηνπ πιεζπζκνχ population απμάλεηαη θαηά 1, πξνζζέηνληαο έλα αθφκε ξνκπφη. Παξαηεξήζηε επίζεο φηη νη ηηκέο ηεο θιάζεο self.name είλαη εηδηθέο γηα θάζε αληηθείκελν, γεγνλφο πνπ ππνδεηθλχεη ηε θχζε ησλ κεηαβιεηψλ αληηθεηκέλνπ. Θπκεζείηε φηη νθείιεηε λα αλαθέξεζηε ζηηο κεηαβιεηέο θαη κεζφδνπο ηνπ ηδίνπ αληηθεηκέλνπ απνθιεηζηηθά κε ηε ρξήζε ηεο κεζφδνπ self. Απηφ απνθαιείηαη σο αλαθνξά ηδηνραξαθηεξηζηηθνχ (attribute reference). ε απηφ ην πξφγξακκα, βιέπνπκε επίζεο ηε ρξήζε docstrings γηα θιάζεηο αιιά θαη γηα κεζφδνπο. Μπνξνχκε λα πξνζπειάζνπκε ηηο docstring ηεο θιάζεο ελφζσ ηξέρεη ην πξφγξακκα ρξεζηκνπνηψληαο ην Robot. doc θαη ηε κέζνδν docstring σο Robot.sayHi. doc Αθξηβψο φπσο ε κέζνδνο init, ππάξρεη ε εηδηθή κέζνδνο del θαη θαιείηαη φηαλ ηεξκαηίδεηαη έλα αληηθείκελν, δειαδή φηαλ απνδεζκεχεηαη θαη επηζηξέθεηαη ζην ζχζηεκα γηα επαλαρξεζηκνπνίεζε απηή ε πεξηνρή κλήκεο. ε απηή ηε κέζνδν, κεηψλνπκε ηνλ αξηζκφ ησλ ξνκπφη Robot.population θαηά 1. Η κέζνδνο del εθηειείηαη φηαλ ην αληηθείκελν δελ είλαη ζε ρξήζε πιένλ θαη δελ εγγπάηαη πφηε ζα εθηειεζηεί απηή. Αλ ζέιεηε λα ην δείηε ζε δξάζε, πξέπεη λα ρξεζηκνπνηήζεηε ηελ εληνιή del θαη ην έρνπκε ζε απηφ ην πξφγξακκα. ια ηα κέιε θιάζεο (class members) (ζπκπεξηιακβαλνκέλσλ θαη ησλ κειψλ δεδνκέλσλ (data members)) είλαη δεκφζηα (public) θαη φιεο νη κέζνδνη είλαη εηθνληθέο (virtual) ζηελ Python. Μηα εμαίξεζε: Γηα ηελ νλνκαζία κειψλ δεδνκέλσλ κε ηε ρξήζε ηνπ δηπινχ πξνζέκαηνο θάησ παχιαο (double underscore prefix), π.ρ privatevar, ε Python ρξεζηκνπνηεί θαηάηκεζε νλφκαηνο (name-mangling) γηα λα νξηζηεί ε κεηαβιεηή σο ηδησηηθή απνηειεζκαηηθά. Άξα, ε ζχκβαζε πνπ αθνινπζείηαη είλαη φηη ε ρξήζε κηαο κεηαβιεηήο εληφο απνθιεηζηηθά κηαο θιάζεο ή ελφο αληηθεηκέλνπ, νθείιεη λα μεθηλά κε κηα θάησ παχια θαη φηη φια ηα ππφινηπα νλφκαηα είλαη δεκφζηα (public) θαη κπνξνχλ λα ρξεζηκνπνηεζνχλ απφ άιιεο θιάζεηο/αληηθείκελα. Να ζπκάζηε φηη κηιάκε κφλν γηα κηα ζχκβαζε θαη δελ επηβάιιεηαη απφ ηελ Python (κε εμαίξεζε ην δηπιφ πξφζεκα θάησ παχιαο). Page 150 of 253

151 ηαηηθέο Μέζνδνη Μηα µέζνδνο πνπ έρεη δεισζεί σο ζηαηηθή, ιεηηνπξγεί ζην επίπεδν ηεο θιάζεο θαη φρη ζην επίπεδν ηνπ ζηηγµηφηππνπ ηεο. Δπνµέλσο, µηα ζηαηηθή µέζνδνο δελ µπνξεί λα αλαθέξεηαη ζε ζπγθεθξηµέλν ζηηγµηφηππν ηεο θιάζεο (δειαδή δελ µπνξεί λα αλαθέξεηαη ζην self). Γηα λα δειψζνπµε µηα ζηαηηθή µέζνδν ζε µηα θιάζε, ρξεζηµνπνηνχµε ηνλ δηαθνζµεηή φπσο είδαµε θαη ζην παξαπάλσ παξάδεηγµα. ηελ ζπλέρεηα, γηα λα ρξεζηµνπνηήζνπµε µηα ζηαηηθή µέζνδν, αξθεί λα αλαθεξζνχµε ζε πνηα θιάζε απηή αλήθεη, ή αλ ρξεζηµνπνηήζνπµε ζηηγµηφηππν θάπνηαο θιάζεο, ηφηε απηφ αγλνείηαη εθηφο απφ ηελ θιάζε ζηελ νπνία απηφ αλήθεη. Κιεξνλνκηθόηεηα (Inheritance) Έλα απφ ηα ζεκαληηθά νθέιε ηνπ αληηθεηκελνζηξεθνχο πξνγξακκαηηζκνχ είλαη ε επαλαρξεζηκνπνίεζε (reuse) ηνπ θψδηθα θαη έλαο απφ ηνπο ηξφπνπο πνπ επηηπγράλεηαη είλαη κέζσ ηνπ κεραληζκνχ ηεο θιεξνλνκηθφηεηαο.σελ πινπνίεζε ηεο θιεξνλνκηθφηεηαο κπνξνχκε λα ηε θαληαζηνχκε θαιχηεξα σο κηα ζπγγέλεηα ηχπνπ θαη ππνηχπνπ (type and subtype) κεηαμχ ησλ θιάζεσλ. Αο ππνζέζνπκε φηη ζέιεηε λα γξάςεηε έλα πξφγξακκα πνπ θαηαγξάθεη ηνπο θαζεγεηέο θαη ηνπο καζεηέο ελφο θνιιεγίνπ. Έρνπλ θάπνηα θνηλά ραξαθηεξηζηηθά - νλνκαηεπψλπκν, ειηθία θαη δηεχζπλζε θαηνηθίαο. Δπίζεο, έρνπλ ηδηαίηεξα ραξαθηεξηζηηθά - κηζζνδνζία, καζήκαηα θαη άδεηεο γηα ηνπο θαζεγεηέο, βαζκνινγία θαη δίδαθηξα γηα ηνπο καζεηέο. Μπνξείηε λα δεκηνπξγήζεηε δχν αλεμάξηεηεο θιάζεηο γηα θάζε ηχπν θαη λα ηηο επεμεξγαζηείηε, αιιά ε πξνζζήθε ελφο λένπ θνηλνχ ραξαθηεξηζηηθνχ ζα απαηηνχζε ηελ πξνζζήθε ηνπ θαη ζηηο δχν απηέο αλεμάξηεηεο θιάζεηο. Καηαληά δχζρξεζηε απηή ε πξνζέγγηζε. Η θιεξνλνµηθφηεηα µνηάδεη µε ην λα ρξεζηµνπνηνχµε σο µέινο µηαο θιάζεο A έλα αληηθείµελν b1 µηαο άιιεο θιάζεο B. Δηζη, ζα µπνξνχζαµε λα θαιέζνπµε νξηζµέλεο ζπλαξηήζεηο ηεο B ζηα αληηθείµελα ηεο A, µέζσ ηνπ αληηθεηµέλνπ b1 πνπ ππάξρεη ζε απηά. Η θιεξνλνµηθφηεηα µαο επηηξέπεη λα εϕαξµφδνπµε απεπζείαο απηέο ηηο ζπλαξηήζεηο ζηα αληηθείµελα ηεο θιάζεο B2. Οη άλζξσπνη δηαθξίλνπλ ηηο αθεξεµέλεο έλλνηεο ζε δπν δηαζηάζεηο: µέξνο-απφ (part-of) ή ζρέζε έρεη (has-a) θαη εμεηδίθεπζε ηνπ ή είλαη (is-a). Γηα παξάδεηγµα ε Python είλαη γιψζζα πξνγξαµµαηηζµνχ θαη έρεη δπλαµηθνχο ηχπνπο. Η ζρέζε έρεη ζπλήζσο ζεµαίλεη φηη πξέπεη λα ρξεζηµνπνηήζνπµε έλα αληηθείµελν σο µέξνο µηαο θιάζεο ελψ ε ζρέζε είλαη ζπλήζσο επηηάζζεη ηελ ρξήζε θιεξνλνµηθφηεηαο. Page 151 of 253

152 Μηα θαιχηεξε ιχζε ζα ήηαλ λα δεκηνπξγεζεί κηα θνηλή θιάζε κε ην φλνκα UniversityMember θαη θαηφπηλ νη θιάζεηο θαζεγεηέο θαη θνηηεηέο λα θιεξνλνκήζνπλ απφ απηή, δειαδή λα γίλνπλ ππνηχπνη απηνχ ηνπ ηχπνπ (θιάζε) θαη ζηε ζπλέρεηα λα πξνζζέζνπκε εηδηθά ραξαθηεξηζηηθά ζε απηνχο ηνπο ππνηχπνπο. Τπάξρνπλ πνιιά πιενλεθηήκαηα ζηελ πξνζέγγηζε απηή. Δάλ πξνζζέζνπκε/αιιάμνπκε θάπνηα ιεηηνπξγία ζηελ θιάζε UniversityMember, απηνκάησο ελεκεξψλνληαη θαη νη ππνηχπνη. Γηα παξάδεηγκα, έλα πεδίν αξηζκνχ ηαπηφηεηαο γηα ηνπο θνηηεηέο θαη ηνπο θαζεγεηέο είλαη εθηθηφ εχθνια κε ηελ πξνζζήθε ηνπ ζηελ θιάζε UniversityMember. Χζηφζν, νη αιιαγέο ζε έλαλ ππνηχπν δελ επεξεάδνπλ ηνπο άιινπο ππνηχπνπο. Έλα άιιν πιενλέθηεκα είλαη φηη εάλ κπνξνχκε λα αλαθεξζνχκε ζε έλα αληηθείκελν θαζεγεηή ή θνηηεηή σο αληηθείκελν UniversityMember, ζα καο θαλεί ρξήζηκν ζε θαηαζηάζεηο γηα ηνλ ππνινγηζκφ ηνπ ζπλνιηθνχ αξηζκνχ ησλ κειψλ ηνπ ηκήκαηνο ηνπ παλεπηζηεκίνπ. Η ηδηφηεηα απηή απνθαιείηαη πνιπκνξθηζκόο (polymorphism) φπνπ έλαο ππνηχπνο κπνξεί λα αληηθαηαζηαζεί ζε θάζε πεξίπησζε πνπ πεξηκέλνπκε έλα γνληθφ ηχπν, δειαδή ην αληηθείκελν κπνξνχκε λα ην ρεηξηζηνχκε ζαλ κηα ππφζηαζε ηεο γνληθήο θιάζεο. Παξαηεξήζηε επίζεο πψο επαλαρξεζηκνπνηνχκε ηνλ θψδηθα ηεο γνληθήο θιάζεο θαη δε ρξεηάδεηαη λα ηνλ επαλαιακβάλνπκε, ζε αληίζεζε κε ηελ πεξίπησζε πνπ ζα ρξεζηκνπνηνχζακε αλεμάξηεηεο θιάζεηο. Η θιάζε UniversityMember ζε απηή ηελ πεξίπησζε νλνκάδεηαη βαζηθή θιάζε (base class) ή ππεξθιάζε (superclass). Οη θιάζεηο Professor θαη Student απνθαινχληαη παξάγσγεο θιάζεηο (derived classes) ή ππνθιάζεηο (subclasses). Page 152 of 253

153 Αθνινπζεί παξάδεηγκα : Καη ηξέρνληάο ην, πξνθχπηεη : Page 153 of 253

154 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Γηα λα ρξεζηκνπνηήζνπκε θιεξνλνκηθφηεηα, κεηά ηνλ νξηζκφ ηνπ νλφκαηνο ηεο ππεξθιάζεο, πξνζδηνξίδνπκε ηα νλφκαηα ηεο ζε κηα πιεηάδα. ηε ζπλέρεηα, παξαηεξνχκε φηη ε κέζνδνο init ηεο ππεξθιάζεο θαιείηαη ξεηά κε ηε ρξήζε ηεο κεηαβιεηήο self γηα ηελ αξρηθνπνίεζε ηνπ ηκήκαηνο ηεο ππεξθιάζεο πνπ αληηζηνηρεί ζην αληηθείκελν. Δίλαη ζεκαληηθφ λα ζπκάζηε όηι η Python δεν καλεί αςηόμαηα ηον καηαζκεςαζηή ηηρ ςπεπκλάζηρ, ππέπει να κληθεί από εμάρ. Παξαηεξνχκε επίζεο φηη κπνξνχκε λα θαιέζνπκε κεζφδνπο ηεο ππεξθιάζεο κε πξφζεκα ζην φλνκα ηεο θιάζεο, φηαλ θαινχκε ηε κέζνδν θαη ζηε ζπλέρεηα πεξλά ε κεηαβιεηή self καδί κε ηπρφλ εληνιέο. Πξνζέμηε πψο κπνξνχκε λα κεηαρεηξηζηνχκε ηηο ππνζηάζεηο Professor ή Student σο απιέο ππνζηάζεηο ηεο θιάζεο UniversityMember, φηαλ ρξεζηκνπνηνχκε ηε κέζνδν tell ηεο θιάζεο UniversityMember. Δπίζεο, παξαηεξήζηε φηη θαιείηαη ε κέζνδνο tell ηνπ ππνηχπνπ θαη φρη ε κέζνδνο tell ηεο θιάζεο UniversityMember. Έλαο ηξφπνο γηα λα γίλεη θαηαλνεηφ είλαη φηη ε Python αξρίδεη λα ςάρλεη πάληα γηα κεζφδνπο ζηνλ πξαγκαηηθφ ηχπν, φπσο θαη θάλεη ζε απηή ηελ πεξίπησζε. Αλ δελ βξεη ηε κέζνδν, αξρίδεη λα αλαδεηά ζηηο κεζφδνπο πνπ αλήθνπλ ζηηο ππεξθιάζεηο κε ηε ζεηξά πνπ έρνπλ νξηζηεί ζηελ πιεηάδα. Μηα ζεκείσζε ζρεηηθά κε ηελ νξνινγία - αλ πεξηζζφηεξεο απφ κία θιάζεηο παξαηίζεληαη ζηελ πιεηάδα θιεξνλνκηθφηεηαο, απνθαιείηαη ηφηε πνιιαπιή θιεξνλνκηθφηεηα. ην ζπγθεθξηµέλν παξάδεηγµα, ε θιάζε Professor θιεξνλνµεί απφ ηελ ππεξθιάζε ηεο UniversityMember. Γηα λα πξνζδηνξίζνπµε µηα θιάζε απφ πνηα θιάζε θιεξνλνµεί, βάδνπµε σο φξηζµα ηεο θιάζεο Professor ηηο θιάζεηο απφ ηηο νπνίεο ζέινπµε λα θιεξνλνµεί (UniversityMember). ηελ ζπλέρεηα, µπνξνχµε λα θαιέζνπµε ζπλαξηήζεηο απφ ηελ ππεξθιάζε ηεο Professor θαη λα ζπµπιεξψζνπµε ζηα απνηειέζµαηα ηνπο ηελ επηπξφζζεηε ιεηηνπξγία πνπ απαηηείηαη. Με απηφ ηνλ ηξφπν ιέπνπµε πσο νη ππεξθιάζεηο απνηεινχλ έλα επίπεδν αθαίξεζεο ελψ απηέο πνπ θιεξνλνµνχλ απφ απηέο αθνξνχλ πην ζπγθεθξηµέλεο έλλνηεο. Δηζη, µπνξνχµε λα ρξεζηµνπνηνχµε ππεξθιάζεηο φηαλ ζέινπµε λα νµαδνπνηνχµε θνηλή ζπµπεξηθνξά αλάµεζα ζε θιάζεηο θαη ζηελ ζπλέρεηα ζε απηέο λα πινπνηνχµε µφλν φηη δηαθέξεη, επαλαρξεζηµνπνηψληαο έηζη φζν ην δπλαηφλ πεξηζζφηεξν θψδηθα µπνξνχµε θαη επηµέλνληαο ζηελ αξρή DRY Don t Repeat Yourself πνπ ζεµαίλεη λα µελ γξάθνπµε ηνλ ίδην θψδηθα μαλά θαη μαλά, πνιιαπιαζηάδνληαο έηζη ηα πηζαλά ιάζε πνπ απηφο µπνξεί λα ϕέξεη θαη θάλνληαο πην δχζθνιε ηελ ζπληήξεζή ηνπο (µηα Page 154 of 253

155 δηφξζσζε ζε έλα ζεµείν πξέπεη λα γίλεη μαλά θαη ζε φια ηα ζεµεία πνπ πηζαλψο ππάξρεη ν ίδηνο θψδηθαο). Δηδηθέο Μέζνδνη Μέζσ θιάζεσλ, µπνξνχµε λα πινπνηήζνπµε µεζφδνπο πνπ λα αληηζηνηρνχλ ζε εηδηθέο πεξηπηψζεηο (φπσο αξηζµεηηθνχο ηειεζηέο, ζχγθξηζε αληηθεηµέλσλ, δηαγξαθή ηνπο θ.α.). Απηέο νη µέζνδνη έρνπλ εηδηθά νλφµαηα πνπ αξρίδνπλ θαη ηειεηψλνπλ ζε. ηελ ζπλέρεηα, παξαζέησ νξηζµέλεο βαζηθέο ηέηνηεο µεζφδνπο. Αλ θάπνηνο είλαη εμνηθεησµέλνο µε άιιεο γιψζζεο πξνγξαµµαηηζµνχ, απηφο είλαη ν ηξφπνο ηεο Python γηα ππεξθφξησζε ηειεζηψλ operator overloading. init (self,... ): Απνηειεί µηα µέζνδν πνπ ήδε έρνπµε δεη. Δίλαη ν δεµηνπξγφο µηαο θιάζεο θαη θαιείηαη φηαλ δεµηνπξγνχµε έλα θαηλνχξγην αληηθείµελν. Αλ µηα ππεξθιάζε (base class) έρεη ηελ µέζνδν init (), ηφηε απηή πξέπεη λα πινπνηείηαη εηά θαη απφ φιεο ηηο ππνθιάζεηο ηεο. Δπηπιένλ, δελ µπνξεί ε µέζνδνο init () λα επηζηξέθεη θάπνηα ηηµή del (self): Καιείηαη φηαλ έλα αληηθείµελν θαηαζηξέθεηαη. Ολνµάδεηαη θαηαζηξνθέαο (destructor). Αληίζηνηρα µε ηνλ δεµηνπξγφ, θαη απηή πξέπεη λα θαιείηαη εηά αλ µηα ππεξθιάζε ηελ πινπνηεί. repr (self): Καιείηαη µέζσ ηεο repr() ζπλάξηεζεο έηζη ψζηε λα δεµηνπξγήζεη ηελ επίζεµε αλαπαξάζηαζε ζε αιθαξηζµεηηθφ ηνπ αληηθεηµέλνπ. Αλ είλαη δπλαηφ, πξέπεη λα επηζηξέθεηαη µηα έθθξαζε ζε Python πνπ λα δεµηνπξγεί έλα αληηθείµελν µε ηελ ίδηα ηηµή. πλήζσο ρξεζηµνπνηείηαη γηα ιφγνπο debugging. str (self): Καιείηαη µέζσ ηεο str() ζπλάξηεζεο ή φπνηε πξνζπαζνχµε λα ηππψζνπµε απεπζείαο ην αληηθείµελν µέζσ ηεο print(). Γηαθέξεη απφ ηελ repr () ζην φηη δελ ρξεηάδεηαη λα είλαη έθθξαζε. Πάληξα πξέπεη λα είλαη έλα αιθαξηζµεηηθφ. lt (self, other), le (self, other), eq (self, other), ne (self, o- ther), ne (self, other), gt (self, other), ge (self, other): Απνηεινχλ ηειεζηέο ζπγθξίζεηο θαη αληηζηνηρνχλ ζην µηθξφηεξν απφ (<), µηθξφηεξν ή ίζν (<=), ίζν µε (==), φρη ίζν µε (! =), µεγαιχηεξν απφ (>), µεγαιχηεξν ή ίζν απφ (>=). Οη παξαπάλσ ζπλαξηήζεηο θαινχλ-ηαη µέζσ ησλ ηειεζηψλ πνπ ιέπνπµε ζηηο παξελζέζεηο θαη είλαη αξθεηά ρξήζηµεο ζε πεξηπηψζεηο πνπ γηα παξάδεηγµα µπνξεί λα ϑέινπµε λα θάλνπµε ηαμηλφµεζε ζε αληηθείµελα πνπ δεµηνπξγήζαµε. Page 155 of 253

156 Δπίζεο, µπνξνχµε λα πινπνηήζνπµε µεζφδνπο πνπ αληηζηνηρνχλ ζε µαζεµαηηθέο πξάμεηο, µεξηθέο απφ ηηο νπνίεο βιέπνπµε παξαθάησ : add (self, other): Πξφζζεζε (+) sub (self, other): Αθαίξεζε ( ) mul (self, other): Πνιιαπιαζηαζµφο ( ) truediv (self, other): Γηαίξεζε (=) floordiv (self, other): Γηαίξεζε αθεξαίσλ (==) mod (self, other): Τπφινηπν (%) Πξνζνρή πξέπεη λα δνζεί ζην φηη πξέπεη λα απνθεχγνπµε λα δεµηνπξγνχµε δηθέο µαο ζπλαξηήζεηο πνπ αξρίδνπλ θαη ηειεηψλνπλ µε, παξά µφλν λα πινπνηνχµε ήδε ππάξρνπζεο, φπσο απηέο πνπ ϕαίλνληαη παξαπάλσ. ην παξάδεηγκα πνπ αθνινπζεί, πξνζπαζνχµε λα πξνζπειαχζνπµε έλα ζηνηρείν ηνπ ιεμηθνχ ην νπνίν αλ δελ ππάξρεη, ην δεµηνπξγνχµε εθείλε ηε ζηηγµή. Page 156 of 253

157 Αξρεία Ήξζε ε ψξα λα κειεηήζνπκε νξηζµέλεο βαζηθέο ιεηηνπξγίεο γηα ηε δηαρείξηζε ηνπ ζπζηήµαηνο αξρείσλ ζηνλ ππνινγηζηή µαο. Πξνζπέιαζε Πξνηνχ µπνξέζνπµε λα επηηειέζνπµε νπνηαδήπνηε ιεηηνπξγία πάλσ ζε έλα αξρείν, πξέπεη λα ην αλνίμνπµε, έηζη ψζηε λα ελεµεξψζνπµε ην ιεηηνπξγηθφ φηη πξφθεηηαη λα ην ρξεζηµνπνηήζνπµε θαη λα αλαιάβεη απηφ λα ην αλαζχξεη απφ ηνλ ζθιεξφ δίζθν. Γηα λα αλνίμνπµε έλα αξρείν, ρξεζηµνπνηνχµε ηελ ζπλάξηεζε open() µε φξηζµα ην φλνµα ηνπ αξρείνπ. Απηή, ζηελ ζπλέρεηα µαο επηζηξέθεη έλαλ πεξηγξαθέα γηα ην αξρείν, ηνλ νπνίν θαη ρξεζηµνπνηνχµε ψζηε λα ην πξνζπειάζνπµε. Δπεηηα µπνξνχµε λα εθαξµφζνπµε, ρξεζηµνπνηψληαο απηφλ ηνλ πεξηγξαθέα, δηάθνξεο ιεηηνπξγίεο πάλσ ζην αξρείν. Οη ηξφπνη αιιειεπίδξαζεο κε αξρεία, δειαδή νη ηξφπνη πνπ µπνξνχµε λα αλνίμνπµε έλα αξρείν µέζσ ηεο open() ϕαίλνληαη ζηνλ πίλαθα : Σξφπνο αλνίγκαηνο r w a Υξήζε Αλάγλσζε Δγγξαθή (Γηαγξαθή ηπρψλ πξνεγνχµελσλ πεξηερνµέλσλ) Πξνζζήθε (Γηαηήξεζε ηπρψλ πξνεγνχµελσλ πεξηερνµέλσλ) b Αξρείν δπαδηθήο µνξθήο + Πξνζζήθε δεδνµέλσλ ζην ηέινο ηνπ αξρείνπ r+ είλαη άλνηγµα αξρείνπ θαη γηα αλάγλσζε/εγγξαθή Απφ ηα r, w, a µφλν µηα ζεµαία ην πνιχ µπνξεί λα επηιερζεί. Αλ δελ επηιερζεί θαµία, ην αξρείν αλνίγεη σο πξνεπηινγή µφλν γηα αλάγλσζε (δειαδή ππνλνείηαη ε ζεµαία r. Βαζηθέο ζπλαξηήζεηο Γηάβαζµα από αξρείν Η θχξηα ζπλάξηεζε γηα δηάβαζµα απφ αξρείν είλαη ε read(). Υσξίο φξηζµα ζα δηαβάζεη µέρξη ην ηέινο ηνπ αξρείνπ, αιιηψο γηα ηνλ αξηζµφ bytes φπσο θαζνξίδεηαη απφ ην φξηζµα ηεο. Page 157 of 253

158 Η δηαθνξά πνπ ππάξρεη αλάµεζα ζηελ readlines θαη ζηελ read, είλαη φηη ε πξψηε δηαβάδεη µηα µηα ηηο γξαµµέο θαη ηηο επηζηξέθεη ζε µηα ιίζηα, ελψ ε δεχηεξε δηαβάδεη φιν ην αξρείν θαη επηζηξέθεη φ,ηη δηαβάζεη µέζα ζε µηα µεηαβιεηή. Σέινο, ε ζπλάξηεζε close() αλαιαµβάλεη λα θιείζεη ην αξρείν θαη λα απειεπζεξψζεη έηζη πφξνπο ηνπ ζπζηήµαηνο. Δγγξαθή ζε αξρείν Αληίζηνηρα µε ην δηάβαζµα απφ αξρείν, µπνξνχµε λα θάλνπµε ηελ εγγξαθή, µφλν πνπ ηψξα πξέπεη λα ην θαζνξίζνπµε, άδνληαο ην θαηάιιειν φξηζµα ζηελ ζπλάξηεζε open(). Πξνζνρή πξέπεη λα δνζεί µφλν ζην γεγνλφο φηη µε ηνλ ηξφπν πνπ αλνίγνπµε ηψξα ην αξρείν, νπνηαδήπνηε άιια πεξηερφµελα ηνπ δηαγξάθνληαη. Αλ ζέινπµε λα θξαηήζνπµε ηα πεξηερφµελα ελφο αξρείνπ, θαη λα πξνζζέζνπµε θάπνηα άιια, ηφηε πξέπεη λα αλνίμνπµε ην αξρείν µε ηελ εηδηθή ζεµαία γηα πξνζζήθε. Page 158 of 253

159 Γηάηξεμε ζε αξρεία Μπνξνχµε λα ρξεζηµνπνηήζνπµε βξφγρνπο for γηα λα δηαηξέμνπµε πάλσ ζε αξρεία (iterate), παίξλνληαο γηα παξάδεηγµα µηα µηα ηηο γξαµµέο. Αλ δνθηµάζνπµε ην παξαπάλσ παξάδεηγµα, ζα δηαπηζηψζνπµε πσο εθηππψλεηαη µηα θελή γξαµµή αλάµεζα ζε θάζε γξαµµή ηνπ αξρείνπ. Απηφ ζπµβαίλεη, γηαηί ζην ηέινο ηεο γξαµµήο θάζε αξρείνπ, ππνλνείηαη ν ραξαθηήξαο αιιαγήο γξαµµήο nn. Δηζη, φηαλ ηελ εθηππψλνπµε, εθηππψλεηαη θαη απηφο ν ραξαθηήξαο. Ο επηπιένλ ινηπφλ ραξαθηήξαο αιιαγήο γξαµµήο πξνέξρεηαη απφ ηελ print θαζψο φηαλ εθηππψλνπµε ην αιθαξηζµεηηθφ, ζην ηέινο ηππψλνπµε θαη έλαλ επηπξφζζεην ραξαθηήξα αιιαγήο γξαµµήο. Page 159 of 253

160 Δίζνδνο έμνδνο Θα ππάξμνπλ θαηαζηάζεηο φπνπ ην πξφγξακκά καο πξέπεη λα αιιειεπηδξάζεη κε ην ρξήζηε. Γηα παξάδεηγκα, ζα ζέιακε λα πάξνπκε είζνδν απφ ην ρξήζηε θαη κεηά λα ηππψζνπκε πίζσ κεξηθά απνηειέζκαηα. Μπνξνχκε λα ην επηηχρνπκε απηφ ρξεζηκνπνηψληαο αληίζηνηρα ηηο ζςναπηήζειρ input() και print(). Γηα έμνδν κπνξνχκε λα ρξεζηκνπνηήζνπκε ηηο δηάθνξεο κεζφδνπο ηεο θιάζεο str (string). Γηα παξάδεηγκα, κπνξνχκε λα ρξεζηκνπνηήζνπκε ηε κέζνδν rjust γηα λα πάξνπκε κηα ζπκβνινζεηξά, ε νπνία είλαη δεμηά ζηνηρηζκέλε (right justified) ζε έλα θαζνξηζκέλν εχξνο. [ help(str) γηα πεξηζζφηεξεο ιεπηνκέξεηεο]. Έλαο αθφκα ζπλεζηζκέλνο ηχπνο εηζφδνπ/εμφδνπ είλαη ν ρεηξηζκφο ησλ αξρείσλ (files). Η ηθαλφηεηα λα δεκηνπξγείηε, δηαβάδεηε θαη λα γξάθεηε αξρεία είλαη βαζηθή ζε πνιιά πξνγξάκκαηα θαη ζα ηελ αλαιχζνπκε παξαθάησ. Δίζνδνο από ην ρξήζηε Page 160 of 253

161 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Υξεζηκνπνηνχκε ηνλ ηεκαρηζκφ (θνκκάηηαζκα) γηα λα αλαζηξέςνπκε ην θείκελν. Έρνπκε ήδε δεη πψο κπνξνχκε λα θάλνπκε θνκκάηηα απφ αθνινπζίεο, ρξεζηκνπνηψληαο ηνλ θψδηθα seq[a:b], αξρίδνληαο απφ ηε ζέζε a κέρξη ηε ζέζε b. Μπνξνχκε επίζεο λα δψζνπκε έλα ηξίην φξηζκα ην νπνίν πξνζδηνξίδεη ην βήκα κε ην νπνίν γίλεηαη ην θνκκάηηαζκα. Σν πξνθαζνξηζκέλν βήκα είλαη ην 1 εμαηηίαο ηνπ νπνίνπ επηζηξέθεη έλα ζπλερέο ηκήκα ηνπ θεηκέλνπ. Γίλνληαο έλα αξλεηηθφ βήκα δει. -1, ζα επηζηξέςεη ην θείκελν αλάζηξνθα. Η ζπλάξηεζε input() παίξλεη κηα ζπκβνινζεηξά ζαλ φξηζκα θαη ην παξνπζηάδεη ζηνλ ρξήζηε.σφηε πεξηκέλεη ην ρξήζηε λα ηππψζεη θάηη θαη λα πηέζεη ην return. Άπαμ θαη ν ρξήζηεο έρεη εηζάγεη θάηη, ε ζπλάξηεζε input() ηφηε ζα επηζηξέςεη απηφ ην θείκελν. Παίξλνπκε απηφ ην θείκελν θαη ην αλαζηξέθνπκε. Δάλ ην απζεληηθφ θείκελν θαη ην αλεζηξακκέλν είλαη ίζα, ηφηε ην κείμενο είναι ένα παλίνδπομο. Αξρεία Μπνξείηε λα αλνίμεηε θαη λα ρξεζηκνπνηήζεηε αξρεία γηα δηάβαζκα ή γξάςηκν, δεκηνπξγψληαο έλα αληηθείκελν ηεο θιάζεο file θαη ρξεζηκνπνηψληαο ηηο κεζφδνπο ηεο, read, readline ή write θαηάιιεια γηα λα δηαβάζεη απφ ή λα γξάςεη ζην αξρείν. Η ηθαλφηεηα λα δηαβάδεη ή λα γξάθεη ζην αξρείν εμαξηάηαη απφ ηνλ ηξφπν (mode) πνπ έρεηε θαζνξίζεη γηα ην άλνηγκα ηνπ αξρείνπ. Σφηε ηειηθά, φηαλ ηειεηψζεηε κε ην αξρείν, θαιείηε ηε κέζνδν close, λα πεη ζηελ Python φηη ηειεηψζακε κε ηε ρξήζε ηνπ αξρείνπ. Αθνινπζεί παξάδεηγκα : Αξρείν Python_project.txt Page 161 of 253

162 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Αξρηθά αλνίγεηε έλα αξρείν ρξεζηκνπνηψληαο ηελ ελζσκαησκέλε ζπλάξηεζε open θαζνξίδνληαο ηελ νλνκαζία ηνπ αξρείνπ θαη ηνλ ηξφπν κε ηνλ νπνίν ζέινπκε λα αλνίγεη ην αξρείν. Ο ηξφπνο κπνξεί λα είλαη κε δηάβαζκα ('r', read mode), κε γξάςηκν ('w', write mode) ή κε πξφζζεζε ('a', append mode). Μπνξνχκε επίζεο λα ρεηξηζηνχκε έλα αξρείν θεηκέλνπ ('t', text file) ή έλα δπαδηθφ αξρείν ('b', binary file). ηελ πξαγκαηηθφηεηα ππάξρνπλ πάξα πνιινί ηξφπνη δηαζέζηκνη θαη ε help(open) ζα ζαο δψζεη πεξηζζφηεξεο ιεπηνκέξεηεο γη απηνχο. Απφ πξνεπηινγή ε open() ζεσξεί ην αξρείν σο αξρείν θεηκέλνπ ('t'ext file) θαη ην αλνίγεη κε ηνλ ηχπν 'r'ead. ε απηφ ην παξάδεηγκα, αξρηθά αλνίγνπκε ην αξρείν ζε εγγξαθή θαη ρξεζηκνπνηνχκε ηε κέζνδν write ηνπ αληηθεηκέλνπ ηνπ αξρείνπ, γηα λα γξάςνπκε ζην Page 162 of 253

163 αξρείν θαη ηφηε ηειηθά θιείλνπκε (close) ην αξρείν. Καηφπηλ αλνίγνπκε ην ίδην αξρείν πάιη γηα αλάγλσζε. Γε ρξεηάδεηαη λα θαζνξίζνπκε έλαλ ηχπν, γηαηί ε 'αλάγλσζε' είλαη ν πξνθαζνξηζκέλνο ηξφπνο. Γηαβάδνπκε θάζε γξακκή ηνπ αξρείνπ ρξεζηκνπνηψληαο ηε κέζνδν readline ζε βξφρν. Απηή ε κέζνδνο επηζηξέθεη κηα νινθιεξσκέλε γξακκή πεξηιακβάλνληαο ην ραξαθηήξα λέαο γξακκήο (newline character) ζην ηέινο ηεο γξακκήο. ηαλ κηα άδεηα ζπκβνινζεηξά επηζηξέθεηαη, ζεκαίλεη φηη έρνπκε θζάζεη ζην ηέινο ηνπ αξρείνπ θαη 'μεθεχγνπκε' (break) απφ ην βξφρν. Απφ πξνεπηινγή ε ζπλάξηεζε print() ηππψλεη ην θείκελν θαζψο θαη κηα απηφκαηε λέα γξακκή (newline) ζηελ νζφλε. Καηαζηέιινπκε ηε λέα γξακκή θαζνξίδνληαο end='', δηφηη ε γξακκή πνπ δηαβάδεηαη απφ ην αξρείν ήδε ηειεηψλεη κε έλα ραξαθηήξα λέαο γξακκήο. Σφηε, ηειηθά θιείλνπκε (close) ην αξρείν.διέγρσληαο ηα πεξηερφκελα ηνπ αξρείνπ Python_Project.txt (ην νπνίν έρσ παξαζέζεη παξαπάλσ),επηβεβαηψλεηαη φηη ην πξφγξακκα έρεη πξαγκαηηθά γξαθηεί θαη δηαβαζηεί απφ απηφ ην αξρείν. Δγγξαθή αληηθεηµέλσλ ζε αξρεία (ζεηξηνπνίεζε) Pickle Η Python παξέρεη έλα πξφηππν άξζξσκα πνπ νλνκάδεηαη pickle θαη ρξεζηκνπνηψληαο ην κπνξείηε λα απνζεθεχεηε νπνηνδήπνηε αληηθείκελν ηεο Python ζε έλα αξρείν θαη αξγφηεξα λα ην παίξλεηε πίζσ. Απηφ νλνκάδεηαη επίκνλε απνζήθεπζε ηνπ αληηθεηκέλνπ (persistently). Η ζεηξηνπνίεζε (serialization) ελόο αληηθεηµέλνπ, είλαη ε δηαδηθαζία µεηαηξνπήο ηνπ αληηθεηµέλνπ ζε µηα ζεηξά απφ bits µε ζθνπφ ηελ εγγξαθή ηνπ ζε θάπνην µέζν απνζήθεπζε (ζπλήζσο αξρεία) ή ηελ µεηαθνξά ηνπ µέζσ δηθηχνπ. Η ζεηξηνπνίεζε πξέπεη λα γίλεηαη µε ηέηνην ηξφπν ψζηε λα θαζίζηαηαη δπλαηή ε αλάθηεζε ηνπ αληηθεηµέλνπ ζηελ αξρηθή ηνπ µνξθή θαη µε ηηο ίδηεο ηδηφηεηεο πνπ ην ραξαθηήξηδαλ. Η ζεηξηνπνίεζε ζα ζαο ρξεηαζηεί εθφζνλ ζέιεηε έλα πξφγξαµµα πνπ έρεηε ϕηηάμεη λα απνζεθεχζεη νξηζµέλα δεδνµέλα απφ ηε µλήµε ζην ζθιεξφ (ζε ζπλήζσο αθαηαιαβίζηηθε µνξθή απφ ηνλ άλζξσπν) θαη ζηελ ζπλέρεηα ζέιεηε λα ηα αλαθηήζεηε. Γηα ηνλ ζθνπφ απηφ, ε Python ρξεζηµνπνηεί ην άξζξσµα (module) pickle. Σν pickle µπνξεί λα ρξεζηµνπνηήζεη δηάθνξνπο ηξφπνπο γηα λα απνζεθεχζεη ηα δεδνµέλα ζε αξρείν. Page 163 of 253

164 Σν pickle µπνξεί λα ρξεζηµνπνηήζεη δηάθνξνπο ηξφπνπο γηα λα απνζεθεχζεη ηα δεδνµέλα ζε αξρείν. Πξσηφθνιιν έθδνζεο 0: ε αξρηθή έθδνζε ηνπ πξσηνθφιινπ πνπ ηα δεδνµέλα απνζεθεχνληαη ζε αλαγλψζηµε µνξθή απφ ηνλ άλζξσπν Πξσηφθνιιν έθδνζεο 1: ε παιηά έθδνζε πνπ απνζήθεπε ηα δεδνµέλα ζε δπαδηθή µνξθή θαη δελ ρξεζηµνπνηείηαη πηα Πξσηφθνιιν έθδνζεο 2: ε έθδνζε πνπ ρξεζηµνπνηφηαλ ζηελ έθδνζε 2 ηεο Python Πξσηφθνιιν έθδνζεο 3: ε ηξέρνπζα έθδνζε πλήζσο ρξεζηµνπνηείηαη ε πην θαηλνχξγηα έθδνζε, παξαιείπνληαο ην αληίζηνηρν φξηζµα. Οηαλ αλαθηάηαη έλα αληηθείµελν απφ θάπνην αξρείν, επηιέγεηαη απηφµαηα ε ζσζηή έθδνζε ηνπ πξσηνθφιινπ. Αθνινπζεί έλα παξάδεηγκα κε pickle : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Γηα λα απνζεθεχζνπκε έλα αληηθείκελν ζε έλα αξρείν, πξέπεη αξρηθά λα αλνίμνπκε (open) ην αξρείν κε ηξφπν 'w'rite 'b'inary θαη κεηά λα θαιέζνπκε ηε ζπλάξηεζε dump ηνπ αξζξψκαηνο pickle. Απηή ε δηαδηθαζία νλνκάδεηαη pickling. Page 164 of 253

165 Καηφπηλ, αλαθηνχκε ην αληηθείκελν ρξεζηκνπνηψληαο ηε ζπλάξηεζε load ηνπ αξζξψκαηνο pickle, ε νπνία επηζηξέθεη ην αληηθείκελν. Απηή ε δηαδηθαζία νλνκάδεηαη unpickling. Φάθεινη Πνιιέο ϕνξέο, θάλνπµε δηάθνξα πξάγµαηα γηα ηα νπνία ρξεηαδφµαζηε γλψζε γηα θάπνηνπο ϕαθέινπο ηνπ ζπζηήµαηνο. Η python µπνξεί λα µαο βνεζήζεη πνιχ εχθνια ζε απηφ, αλαιαµβάλνληαο απφ µφλε ηεο ν θψδηθαο ηεο λα ηξέρεη αλεμαξηήησο πιαηθφξµαο. Σν µφλν πνπ έρνπµε λα θάλνπµε εµείο είλαη λα εηζάγνπµε ηελ βιβλιοθήκη os πνπ πεξηέρεη ηηο ζπγθεθξηµέλεο ζπλαξηήζεηο (πνπ πξνθαλψο πινπνηνχληαη δηαθνξεηηθά αλάινγα ην ζχζηεµα) θαη ζηελ ζπλέρεηα µε απιέο ζπλαξηήζεηο λα πάξνπµε ηηο απαξαίηεηεο πιεξνθνξίεο. Αλάθηεζε Πιεξνθνξηώλ Οη θχξηεο ζπλαξηήζεηο πνπ ρξεηάδνληαη γηα απηφλ ηνλ ζθνπφ είλαη: getcwd(): Δπηζηξέθεη ην φλνµα ηνπ ηξέρνληνο ϕαθέινπ. listdir(): Παξαζέηεη ηα αξρεία ηνπ ηξέρνληνο ϕαθέινπ. chdir(path): Αιιαγή ϕαθέινπ ζε απηφλ πνπ θαηαδεηθλχεηαη απφ ην path. Τν άξζξωµα (module) πνπ ρξεζηµνπνηνύµε γηα ηελ δηαρείξηζε αξρείωλ θαη ϕαθέιωλ είλαη θπξίωο ην os. Οη ζπλαξηήζεηο πνπ µαο παξέρεη είλαη ζηελ ζπληξηπηηθή ηνπο πιεηνςεθία cross-platform, µε εμαίξεζε νξηζµέλεο εμηδηθεπµέλεο πεξηπηψζεηο. Page 165 of 253

166 ην παξάδεηγµα πνπ αθνινπζεί βιέπνπµε βαζηθέο ιεηηνπξγίεο γηα ηνλ θαζνξηζµφ µηαο δηαδξνµήο ζην ζχζηεµα αξρείσλ. Οη ζπλαξηήζεηο os.path.split() θαη os.path.join() πξέπεη λα ρξεζηµνπνηνχληαη αλ ζέινπµε λα έρνπµε cross-platform εθαξµνγή, γηαηί ππάξρνπλ δηαθνξέο ζην πσο αλαπαξηζηψληαη νη δηαδξνµέο ζηηο δηάθνξεο πιαηθφξµεο. Γεµηνπξγία Φαθέισλ Γηα ηελ δεµηνπξγία ϕαθέισλ ππάξρνπλ δπν βαζηθέο ζπλαξηήζεηο : mkdir(path): Γεµηνπξγία ϕαθέινπ µε ην φλνµα path. makedirs(path): Γεµηνπξγία ηνπ ϕαθέινπ πνπ νξίδεηαη απφ ην path θαζψο θαη φισλ ησλ άιισλ ϕαθέισλ πνπ µπνξεί λα ρξεηάδεηαη λα δεµηνπξγεζνχλ, µέρξη λα ϕζάζνπµε ζε απηφλ. Page 166 of 253

167 Αθνινπζεί έλα παξάδεηγκα : Page 167 of 253

168 Δμαηξέζεηο Οη εμαηξέζεηο καο επηηξέπνπλ λα δηαρσξίζνπκε ηηο πεξηπηψζεηο φπνπ θαινχκαζηε λα δηαρεηξηζηνχκε κηα «εμαηξεηηθή» πεξίπησζε ελφο ζπκβάληνο(πρ ιείπεη θάπνην αξρέην) απφ ηελ ινγηθή ηνπ πξνγξάκκαηφο καο. Γηα παξάδεηγκα, ηη ζπκβαίλεη εάλ πξφθεηηαη λα δηαβάζεηε έλα αξρείν θαη ην αξρείν δελ ππάξρεη; Ή ηη ζπκβαίλεη εάλ ην δηαγξάςαηε θαηά ιάζνο φηαλ ην πξφγξακκα έηξερε; Σέηνηεο θαηαζηάζεηο ρεηξίδνληαη ρξεζηκνπνηψληαο ηηο εμαηξέζεηο. Παξνκνίσο, ηη ζπκβαίλεη εάλ ην πξφγξακκά ζαο είρε κεξηθέο άθπξεο εληνιέο; Απηφ ην ρεηξίδεηαη ε Python ε νπνία ζεθψλεη ηα ρέξηα ηεο θαη ζαο ιέεη φηη ππάξρεη έλα ζθάικα. Ο ρεηξηζµόο εμαηξέζεσλ είλαη µηα θαηαζθεπή ε νπνία µαο επηηξέπεη λα ρεηξηζηνχµε εηδηθέο ζπλζήθεο πνπ αιιάδνπλ ηελ ϕπζηνινγηθή ξνή ηνπ πξνγξάµµαηνο. Οπσο βιέπνπµε θαη απφ ηνλ παξαπάλσ νξηζµφ, ηηο εμαηξέζεηο ηηο ρξεζηµνπνηνχµε ζε εηδηθέο πεξηπηψζεηο πνπ ε ξνή ηνπ πξνγξάµµαηνο αιιάδεη απφ ηελ θπζηνινγηθή ιφγσ ηνπ φηη έρεη ζπµβεί έλα εμαηξεηηθφ ζπµβάλ, πνπ ζπλήζσο δελ γίλεηαη. Δλα παξάδεηγµα ζα µπνξνχζε λα είλαη ε πεξίπησζε φπνπ δελ µπνξέζαµε λα αλνίμνπµε έλα αξρείν θαη λα δηαβάζνπµε ηα πεξηερφµελα ηνπ. Γεληθά νη εμαηξέζεηο δεµηνπξγνχληαη φηαλ θάηη πάεη ζηξαβά, ή φηαλ θάηη παξεθθιίλεη ζπάληα απφ µηα ζπγθεθξηµέλε ξνή (πρ ππάξρεη µηα πνιχ πνιχ µηθξή πηζαλφηεηα λα ζπµβεί έλα γεγνλφο). Ο γεληθφηεξνο µεραληζµφο πνπ ιεηηνπξγνχλ νη εμαηξέζεηο είλαη: 1. Αλ θάηη πάεη ζηξαβά ε Python εγείξεη µηα εμαίξεζε. 2. Αλαγλσξίδνπµε ηελ θιάζε ηεο εμαίξεζεο (πρ NameError, TypeError, IndexError). 3. Δθηεινχµε εηδηθφ θψδηθα γηα απηή ηελ πεξίπησζε. 4. Αλ δελ ρεηξηζηνχµε µηα εμαίξεζε πνπ εγείξεηαη, ηφηε ην πξφγξαµµα µαο ζηαµαηάεη ηελ εθηέιεζε ηνπ. 5. Δμαηξέζεηο πνπ δελ έρνπλ ρεηξηζηεί, εµθαλίδνληαη ζην traceback, φπνπ θαη µαο ελεµεξψλεη ηη αθξηβψο ζπλέβε. Αμίδεη λα ζεµεηψζνπµε πσο φηαλ θάπνηα ελδερφµελα είλαη ζρεδφλ ηζνπίζαλν λα ζπµβνχλ, ή δελ απνηειεί ηδηάδσλ γεγνλφο ε πξαγµαηνπνίεζε θάπνηνπ απφ απηά, ηφηε είλαη θαιχηεξα λα ρξεζηµνπνηνχµε ηελ δνµή if... else..., εθφζνλ απηφ είλαη Page 168 of 253

169 δπλαηφ. Απηφ, γηαηί αλ ζπµβεί εμαίξεζε, ηφηε ν ρεηξηζµφο ηεο είλαη πνιχ πην αξγφο απφ ην λα πεγαίλαµε ζην θνµµάηη ηνπ else. Απφ ηελ άιιε, αλ πξφθεηηαη λα ρεηξηζηνχµε ζθάιµαηα ηφηε θαη ν θψδηθαο µαο γίλεηαη πην θαζαξφο αλ ρξεζηµνπνηνχµε εμαηξέζεηο, θαη πην γξήγνξνο φηαλ µέλεη ζηελ πξνθαζνξηζµέλε ηνπ ξνή θαη δελ ππάξρεη αλάγθε εθηέιεζεο ησλ δειψζεσλ ζηα µέξε ηνπ except. θάικαηα Έζησ κηα απιή θιήζε ηεο ζπλάξηεζεο print. Ση ζπκβαίλεη αλ γξάςσ Print αληί γηα ην ζσζηφ print; Παξαηεξήζηε ην θεθαιαίν P αληί γηα p. ε απηή ηελ πεξίπησζε ε Python αλαδεηθλχεη (raises) έλα ζπληαθηηθφ ζθάικα (syntax error). Παξαηεξήζηε φηη αλαδεηθλχεηαη έλα NameError θαζψο επίζεο ηππψλεηαη θαη ε ζέζε φπνπ αληρλεχεηαη ην ζθάικα. Απηφ είλαη πνπ θάλεη ν ρεηξηζηήο ζθάικαηνο (error handler) γηα απηφ ην ζθάικα. Θα δνθηκάζνπκε λα δηαβάζνπκε είζνδν απφ ην ρξήζηε. Πηέδνληαο ctrl-d θαη πξνθχπηεη : s = input('πληκτρολογόςτε κϊτι --> ') Πληκτρολογόςτε κϊτι --> Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> s = input('enter something --> ') EOFError: EOF when reading a line Page 169 of 253

170 Η Python αλαδεηθλχεη έλα ζθάικα, πνπ νλνκάδεηαη EOFError, πνπ βαζηθά ζεκαίλεη φηη βξήθε έλα ζχκβνιν end of file (πνπ αληηπξνζσπεχεηαη απφ ην ctrl-d), φηαλ δελ πεξηκέλεη λα ην δεη. Μπνξνχκε λα ρεηξηζηνχκε ηηο εμαηξέζεηο ρξεζηκνπνηψληαο ηελ εληνιή try..except. Βαζηθά, ηνπνζεηνχκε φιεο ηηο ζπλήζεηο εληνιέο κέζα ζηελ πινθάδα try θαη φινπο ηνπο ρεηξηζηέο ζθαικάησλ ζηελ πινθάδα except. Παξαηήξεζε : ζηελ εθηέιεζε ζηελ 2 ε πεξίπησζε ζηελ πξνηξνπή λα πιεθηξνινγήζσ θάηη πάηεζα ctrl d, ελψ ζηελ 3 ε πεξίπησζε ctrl c. Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Σνπνζεηνχκε φιεο ηηο εληνιέο, πνπ ίζσο αλαδεηθλχνπλ εμαηξέζεηο/ζθάικαηα κέζα ζηελ πινθάδα try θαη κεηά ηνπνζεηνχκε ηνπο ρεηξηζηέο γηα ηα θαηάιιεια ζθάικαηα/εμαηξέζεηο ζηελ πξφηαζε/πινθάδα except. Η πξφηαζε except κπνξεί λα Page 170 of 253

171 ρεηξηζηεί έλα θαη κφλν θαζνξηζκέλν ζθάικα ή εμαίξεζε, ή κηα ιίζηα ζθαικάησλ/εμαηξέζεσλ κέζα ζε παξέλζεζε. Δάλ δελ παξέρνληαη θαζφινπ νλνκαζίεο ζθαικάησλ ή εμαηξέζεσλ, ηφηε ε πξφηαζε except ζα ρεηξηζηεί φιεο ηηο εμαηξέζεηο θαη ηα ζθάικαηα. εκεηψζηε φηη πξέπεη λα ππάξρεη ηνπιάρηζηνλ κηα πξφηαζε except ζπλδεδεκέλε κε θάζε πξφηαζε try. Γηαθνξεηηθά γηα πνην ιφγν λα έρεηε κηα πινθάδα try; Δάλ νπνηνδήπνηε ζθάικα ή εμαίξεζε δελ ρεηξίδεηαη, ηφηε θαιείηαη ν πξνθαζνξηζκέλνο ρεηξηζηήο ηεο Python, ν νπνίνο ζηακαηάεη ηελ εθηέιεζε ηνπ πξνγξάκκαηνο θαη ηππψλεη έλα κήλπκα ζθάικαηνο. Μπνξείηε επίζεο λα έρεηε κηα πξφηαζε else ζπλδεδεκέλε κε κηα πινθάδα try..except. H πξφηαζε else εθηειείηαη εάλ δελ ζπκβαίλεη θακκία εμαίξεζε. Γηάθνξα είδε Δμαηξέζεσλ Τπάξρνπλ δηάθνξα είδε εμαηξέζεσλ πνπ µπνξνχµε λα ζπλαληήζνπµε, θαζψο θαη λα ϕηηάμνπµε ηα δηθά µαο. Δλα απιφ παξάδεηγµα εμαίξεζεο απνηειεί ε δηαίξεζε µε ην µεδέλ. Κάλνληαο δηαίξεζε µε ην µεδέλ ζην δηαδξαζηηθφ θέιπθνο (shell) ηεο Python, µπνξνχµε λα δνχµε ηη αθξηβψο ζπµβαίλεη µφιηο πξνθιεζεί µηα εμαίξεζε θαη δελ ηελ ρεηξηζηνχµε. ην παξάδεηγµα µαο, ϕαίλεηαη ζε πνην αξρείν ζπλέβε ε εμαίξεζε (<pyshell#0>, αθνχ γξάθαµε ζην πεξηβάιινλ ηνπ δηεξµελεπηή), ζε πνηα γξαµµή (γξαµµή 1), ε θιάζε ηεο εμαίξεζεο (ZeroDivisionError, πνπ ζεµαίλεη δηαίξεζε µε ην µεδέλ) θαζψο θαη έλα µήλπµα ζθάιµαηνο (int division or modulo by zero). Αθνχ έρνπµε αλαγλσξίζεη ινηπφλ ηελ εμαίξεζε πνπ ζπλέβε, µπνξνχµε πιένλ λα ηελ ρεηξηζηνχµε. Page 171 of 253

172 Γηα λα ηελ ρεηξηζηνχµε, ηνπνζεηνχµε ηηο γξαµµέο πνπ µπνξνχλ λα πξνθαιέζνπλ ηελ εμαίξεζε πνπ ζα ρεηξηζηνχµε µέζα ζε έλα µπινθ try θαη εϕφζνλ ζπµβεί µηα εμαίξεζε, ηφηε ζηαµαηάεη ε εθηέιεζε ησλ δειψζεσλ απηνχ ηνπ µπινθ θαη πεξλάµε θαηεπζείαλ ζην αληίζηνηρν µπινθ except. Αλ έρεη ζπµβεί µηα εμαίξεζε πνπ ρεηξίδεηαη ην ζπγθεθξηµέλν µπινθ (ζηελ πεξίπησζε µαο ZeroDivisionError), ηφηε εθηεινχµε ηηο δειψζεηο πνπ απηφ πεξηέρεη θαη ζεσξνχµε πσο έρνπµε ρεηξηζηεί ηελ εμαίξεζε. Δηζη ην πξφγξαµµα µαο δελ ζηαµαηάεη απφηνµα πηα ηελ εθηέιεζε ηνπ! Αιινη ηχπνη εμαηξέζεσλ πνπ ζα µπνξνχζαµε λα ζπλαληήζνπµε, ϕαίλνληαη ζηα παξαδείγµαηα πνπ αθνινπζνχλ: ην παξαπάλσ παξάδεηγκα πξνζπαζνχµε λα ρξεζηµνπνηήζνπµε ηνλ ηειεζηή ζε µηα µεηαβιεηή a ρσξίο φµσο πξψηα λα ηελ έρνπµε νξίζεη. Καηά απηφ ηνλ ηξφπν πξνθαιείηαη µηα εμαίξεζε θιάζεο NameError. Αλ απηή ε εμαίξεζε έγηλε απφ αβιεςία ηνπ πξνγξαµµαηηζηεί, ηφηε πξέπεη λα νξίζνπµε θαηάιιεια ηελ µεηαβιεηή a, αιιηψο µπνξνχµε λα ηελ ρεηξηζηνχµε µέζσ ελφο try... except... µπινθ, αθνχ ηψξα πηα έρνπµε αλαγλσξίζεη ηελ θιάζε ηεο εμαίξεζεο (NameError). Page 172 of 253

173 Αληίζηνηρν ζθάιµα µπνξνχµε λα παξαηεξήζνπµε θαη ζηελ πεξίπησζε πνπ πξνζπαζνχµε λα εθαξµφζνπµε µηα ζπλάξηεζε (ή ηειεζηή) ζε ηχπνπο πνπ δελ ππνζηεξίδνπλ απηή ηε ιεηηνπξγία. Σέινο, έλα αθφµε παξάδεηγµα γηα µηα εμαίξεζε πνπ ηνπιάρηζηνλ αξρηθά, πνιινί πξνγξαµµαηηζηέο ζπλαληνχλ, αθνξά ηα ζθάιµαηα εηζφδνπ εμφδνπ. Δδψ αμίδεη λα ζεµεηψζνπµε φηη ελψ ιφγσ ηεο δνµήο with, αλ είρε αλνίμεη ην αξρείν input?file.txt, ηφηε βγαίλνληαο απφ ηε δήισζε with, ζα είρε θιείζεη θαηάιιεια, αλ δελ θάλνπµε θαηάιιειν ρεηξηζµφ ηνπ ζθάιµαηνο, ηφηε θαη πάιη ζα πξνθιεζεί µηα εμαίξεζε ηελ νπνία δελ ζα έρνπµε ρεηξηζηεί. Σέινο, αμίδεη λα αλαθέξνπµε πσο φπσο ρεηξηδφµαζηε µηα θιάζε εμαηξέζεσλ ζε έλα µπινθ except, ζα µπνξνχζαµε λα ρεηξηδφµαζηε θαη πνιιέο θιάζεηο εμαηξέζεσλ µαδί, ρξεζηµνπνηψληαο µηα πιεηάδα πνπ λα πεξηέρεη ηηο θιάζεηο φισλ ησλ εμαηξέζεσλ πνπ ζέινπµε λα ρεηξηζηνχµε. except(runtimeerror, TypeError, NameError): Pass Page 173 of 253

174 Θα µπνξνχζαµε λα ρεηξηζηνχµε αθφµα θαη φιεο ηηο εμαηξέζεηο µαδί ρξεζηµνπνηψληαο έλα ζθέην except :, αλ θαη δελ ζπληζηάηαη σο µέζνδνο παξά µφλν ζε πνιχ &ze