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 ( ) θαη PEP 257 ( ). 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 θαη θάληε ηελ επηινγή ζαο. ( / 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. ( / 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 :, αλ θαη δελ ζπληζηάηαη σο µέζνδνο παξά µφλν ζε πνιχ ζπγθεθξηµέλεο πεξηπηψζεηο. Αλάδεημε ησλ εμαηξέζεσλ (Raising Exceptions) Μπνξείηε λα αλαδείμεηε εμαηξέζεηο ρξεζηκνπνηψληαο ηελ εληνιή raise, παξέρνληαο ηελ νλνκαζία ηνπ ζθάικαηνο/εμαίξεζεο θαη ην αληηθείκελν ηεο εμαίξεζεο είλαη πξφθεηηαη λα ζπκβεί. Σν ζθάικα ή ε εμαίξεζε πνπ κπνξείηε λα αλαδείμεηε, πξέπεη λα είλαη θιάζε, ε νπνία άκεζα ή έκκεζα πξέπεη λα είλαη παξάγσγε ηεο θιάζεο Exception. Page 174 of 253

175 Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Δδψ δεκηνπξγνχκε ην δηθφ καο ηχπν εμαίξεζεο. Απηφο ν λένο ηχπνο εμαίξεζεο νλνκάδεηαη ShortInputException. Έρεη δχν πεδία, ην length, ην νπνίν είλαη ην κήθνο ηεο δνζείζαο εηζφδνπ θαη ην atleast πνπ είλαη ην ειάρηζην κήθνο πνπ ην πξφγξακκα πεξίκελε. ηελ πξφηαζε except, αλαθέξνπκε ηελ θιάζε ηνπ ζθάικαηνο ε νπνία ζα απνζεθεχεηαη ζαλ (as) ην φλνκα κεηαβιεηήο ην νπνίν ζπγθξαηεί ην αληίζηνηρν αληηθείκελν ζθάικαηνο/εμαίξεζεο. Απηφ είλαη αλάινγν κε ηηο παξακέηξνπο θαη ηα νξίζκαηα ζε κηα θιήζε ζπλάξηεζεο. Μέζα ζε απηή ηελ εηδηθή πξφηαζε except, ρξεζηκνπνηνχκε ηα πεδία length θαη atleast ηνπ αληηθεηκέλνπ ηεο εμαίξεζεο, γηα λα ηππψζνπκε έλα θαηάιιειν κήλπκα ζην ρξήζηε. Try.. Finally Τπνζέζηε φηη δηαβάδεηε έλα αξρείν ζην πξφγξακκά ζαο. Πψο επηβεβαηψλεηε φηη ην αληηθείκελν ηνπ αξρείνπ έρεη θιεηζηεί θαλνληθά, είηε ε εμαίξεζε αλαδείρζεθε είηε φρη; Απηφ κπνξεί λα γίλεη ρξεζηκνπνηψληαο ηελ πινθάδα finally. Mπνξείηε λα ρξεζηκνπνηήζεηε κηα πξόηαζε except καδί κε ηελ πινθάδα finally γηα ηελ ίδηα αληηζηνηρνχζα πινθάδα try. Πξέπεη λα ελζσκαηψζεηε ηε κηα κέζα ζηελ άιιε, εάλ ζέιεηε λα ρξεζηκνπνηήζεηε θαη ηηο δχν. Page 175 of 253

176 Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Κάλνπκε ην ζχλεζεο δηάβαζκα αξρείνπ, αιιά απζαίξεηα έρνπκε εηζάγεη χπλσζε γηα 2 δεπηεξφιεπηα αθνχ ηππσζεί ε θάζε γξακκή, ρξεζηκνπνηψληαο ηε ζπλάξηεζε time.sleep έηζη ψζηε ην πξφγξακκα λα ηξέρεη αξγά (ε Python απφ ηε θχζε ηεο ηξέρεη πνιχ γξήγνξα!). Καζψο ην πξφγξακκα ηξέρεη αθφκα, πιέζηε ctrl-c για να διακότεηε/ακςπώζεηε ηο ππόγπαμμα. Παξαηεξήζηε φηη ζπκβαίλεη ε εμαίξεζε KeyboardInterrupt θαη ην πξφγξακκα εγθαηαιείπεηαη. Πάλησο, πξηλ ην πξφγξακκα εγθαηαιεηθζεί, ε πξφηαζε finally εθηειείηαη θαη ην αληηθείκελν ηνπ αξρείνπ πάληα θιείλεηαη. Η εληνιή with Η απφθηεζε ελφο πφξνπ ζηελ πινθάδα try θαη αθνινχζσο ε απειεπζέξσζε ηνπ πφξνπ ζηελ πινθάδα finally είλαη έλα ζπλεζηζκέλν κνηίβν. Γη' απηφ ην ιφγν ππάξρεη θαη ε εληνιή with, ε νπνία ην θάλεη ηθαλφ λα γίλεη κε θαζαξφ ηξφπν: Page 176 of 253

177 Πσο δνπιεχεη ην παξαπάλσ πξφγξακκα : Η έμνδνο ζα έπξεπε λα είλαη ίδηα κε ην πξνεγνχκελν παξάδεηγκα. Η δηαθνξά εδψ είλαη φηη ρξεζηκνπνηνχκε ηε ζπλάξηεζε open κε ηελ εληνιή with. Aθήλνπκε ην θιείζηκν ηνπ αξρείνπ λα γίλεη απηφκαηα κε ην with open. Απηφ πνπ ζπκβαίλεη παξαζθεληαθά είλαη φηη ππάξρεη έλα πξσηφθνιιν πνπ ρξεζηκνπνηείηαη κε ηελ εληνιή with. Φέξλεη ην αληηθείκελν πνπ επηζηξάθεθε απφ ηελ εληνιή open. Αο ην νλνκάζνπκε the_file ζε απηή ηελ πεξίπησζε. Πάληα θαιεί ηε ζπλάξηεζε thefile. enter πξηλ αξρίζεη ε πινθάδα ηνπ θψδηθα θάησ απφ απηφ, θαη πάληα θαιεί ην thefile. exit, αθνχ ηειεηψζεη ε πινθάδα ηνπ θψδηθα. Έηζη ν θψδηθαο πνπ ζα είρακε γξάςεη ζε κηα πινθάδα finally ζα έπξεπε λα θξνληίδεηαη απηφκαηα απφ ηε κέζνδν exit. Απηφ είλαη πνπ καο βνεζάεη λα απνθεχγνπκε λα ρξεζηκνπνηνχκε ξεηέο εληνιέο try..finally επαλεηιεκκέλσο. Γελλήηνξεο (generators) Οη γελλήηνξεο καο δίλνπλ ηε δπλαηφηεηα λα θάλνπκε ηε δνπιεηά πνπ ρξεηάδεηαη, ηε ζηηγκή πνπ ρξεηάδεηαη. Μπνξνχκε λα ηνπο ζθεθηνχκε σο ζπλαξηήζεηο, φπνπ φκσο παξάγνπλ ηκεκαηηθά ηελ έμνδφ ηνπο, αλάινγα κε ην ηη ηνπο δεηάκε. Oθέιε πνπ απηφ κπνξεί λα έρεη : δελ «θνιιάεη» πηα αλεμήγεηα έλα πξφγξακκα φηαλ ηνπ δεηάκε θάηη θαηλνκεληθά απιφ,ρξεζηκνπνηείηαη φζε κλήκε ρξεηάδεηαη. Page 177 of 253

178 Δπαλαιήπηεο (Iterators) Γηα λα θαηαιάβνπµε πσο ιεηηνπξγνχλ νη γελλήηνξεο, πξέπεη πξψηα λα θαηαιάβνπµε ηνπο επαλαιήπηεο (iterators). Οηαλ πξνζπειαχλνπµε ηα ζηνηρεία µηαο ιίζηαο έλα έλα, ρξεζηµνπνηνχµε επαλαιήπηεο. mylist = [1, 2, 3, 4, 5] for i in mylist : print (i) Δπαλαιήπηεο (iterator) είλαη ν φξνο πνπ ρξεζηµνπνηνχµε γηα λα θαηαδείμνπµε φηη έλα αληηθείµελν έρεη µηα next() µέζνδν. Πώο δνπιεύνπλ νη for βξόγρνη Οπνηε γξάθνπµε : for i in mylist: loop body Η Python θάλεη ηα αθφινπζα βήµαηα: 1) Παίξλεη έλα επαλαιήπηε γηα ηελ next(). Καιεί ηελ iter(mylist) ε νπνία επηζηξέθεη έλα αληηθείµελν µε ηελ µέζνδν next(). 2) Υξεζηµνπνηεί ηνλ επαλαιήπηε γηα λα δηαηξέμεη φια ηα αληηθείµελα ζηελ ιίζηα. Δηζη ην i παίξλεη επαλαιεπηηθά φιεο ηηο ηηµέο πνπ ξίζθνληαη ζηελ ιίζηα mylist. ηα λα γίλεη απηφ, θαιείηαη ζπλερψο ε ζπλάξηεζε next() ζηνλ επαλαιήπηε i πνπ επηζηξέθεηαη απφ ην πξψην ήµα. Η επηζηξεθφµελε ηηµή αλαηίζεηαη ζην i θαη ην ζψµα ηνπ βξφγρνπ εθηειείηαη. Δάλ ε εμαίξεζε StopIteration πξνθχςεη απφ ηελ next() ζεµαίλεη πσο δελ ππάξρνπλ άιιεο ηηµέο λα αλαθηεζνχλ απφ ηελ mylist θαη έηζη ν βξφγρνο ηεξµαηίδεη. Γεµηνπξγία γελλεηόξσλ Οη γελλήηνξεο (generators) δεµηνπξγνχληαη φηαλ ρξεζηµνπνηνχµε ηελ ιέμε θιεηδί yield αληί ηεο return. Μπνξνχµε λα ηηο αληηµεησπίζνπµε ζαλ ηηο θιαζηθέο ζπλαξηήζεηο µε µφλν µηα δηαθνξά. Δλαο γελλήηνξαο, επηζηξέθεη µηα ηηµή µε ηελ yield. Οηαλ μαλαθιεηζεί, ζπλερίδεη απφ ηελ θαηάζηαζε πνπ ήηαλ µφιηο θιήζεθε ε yield, µέρξη λα ϕζάζεη μαλά ζε θάπνην άιιν yield. Δηζη, µπνξεί λα ρξεζηµνπνηεζεί γηα λα παξάγνληαη δπλαµηθά ηηµέο, θαηαιαµβάλνληαο έηζη µηθξφηεξν ρψξν ζηελ µλήµε, αθνχ δελ ρξεηάδεηαη λα παξαρζνχλ φιεο θαη λα επηζηξαθνχλ. Page 178 of 253

179 Γελλήηνξαο µηα εηδηθή ζπλάξηεζε ε νπνία ρξεζηµνπνηείηαη γηα ηελ παξαγσγή iterators. Κάζε ϕνξά πνπ θαινχµε έλαλ γελλήηνξα, ζπλερίδεη ηελ εθηέιεζε ηνπ απφ ην ζεµείν πνπ είρε µείλεη ζηελ πξνεγνχµελε εθηέιεζε ηνπ. Δηζη, ε έμνδνο ηνπ παξάγεηαη ηµεµαηηθά. πλεπψο είλαη ηδηαίηεξα ρξήζηµνο φηαλ ε παξαγφµελε έμνδνο είλαη πνιχ µεγάιε θαη µπνξνχµε λα ηελ ηµεµαηνπνηήζνπµε. ην αθφινπζν παξάδεηγµα βιέπνπµε µηα ζπλάξηεζε ε νπνία δνπιεχεη ζαλ ηελ range() µε ηελ δηαθνξά φηη αλ ην δεχηεξν φξηζµα (end) είλαη µηθξφηεξν απφ ην πξψην (start), ηφηε ζα θάλεη ηελ πξάμε modulo µέρξη λα ϕζάζεη ζε απηφ. Ο έιεγρνο αλ start > end γίλεηαη µφλν µηα ϕνξά, φηαλ θαιείηαη γηα πξψηε ϕνξά ν παξαπάλσ γελλήηνξαο. ηελ ζπλέρεηα, ε yield ξίζθεηαη µέζα ζε έλαλ βξφγρν for. Απηφ πξαθηηθά ζεµαίλεη, φηη θάζε ϕνξά πνπ θαιείηαη ν γελλήηνξαο, ζα βξίζθεηαη πάληα µέζα ζε απηφλ ηνλ βξφρν, παξάγνληαο έηζη ηελ επφµελε ηηµή. Δλα άιιν παξάδεηγµα είλαη ε δεµηνπξγία ηεο αθνινπζίαο ησλ Fibonacci αξηζµψλ. Page 179 of 253

180 Μπνξνχµε λα δεµηνπξγήζνπµε γελλήηνξεο µέζσ εθθξάζεσλ γελλεηφξσλ ζε αληηζηνηρία µε ηηο lists comprehensions. Page 180 of 253

181 Δλα γελλήηνξαο, επνµέλσο, µπνξεί λα ζεσξεζεί σο έλα αληηθείµελν ζην νπνίν µπνξνχµε λα θαιέζνπµε ηελ ζπλάξηεζε next(). Κάζε θιήζε ηεο ζπλάξηεζεο next() πξνθαιεί ηελ επηζηξνθή ηνπ επφµελνπ αληηθεηµέλνπ µέρξη λα δεµηνπξγεζεί µηα εμαίξεζε ηχπνπ StopIteraton ε νπνία θαη ζεµαίλεη ην ηέινο ησλ αληηθεηµέλσλ ησλ νπνίσλ µπνξνχλ λα παξαρζνχλ απφ ηνλ ζπγθεθξηµέλν γελλήηνξα. Παξφηη ην αληηθείµελν ηνπ γελλήηνξα δεµηνπξγείηαη µφλν µηα ϕνξά, ν θψδηθαο ηνπ δελ ηξέρεη µφλν µηα ϕνξά. Κάζε ϕνξά ηξέρεη έλα µέξνο ηνπ θψδηθα ηνπ (µέρξη λα ζπλαληεζεί ην yield) θαη θξαηηέηαη ε θαηάζηαζε ηνπ ζηε µλήµε. Σελ επφµελε ϕνξά ζπλερίδεη ε εθηέιεζε απφ ην ίδην ζεµείν, απφ ηελ θαηάζηαζε πνπ είρε ζηαµαηήζεη µέρξη ην επφµελν yield. πγγξαθή θώδηθα θηιηθό πξνο ηνπο γελλήηνξεο Οξηζµέλα πιενλεθηήµαηα ησλ γελλήηνξσλ είλαη : 1. Μηθξφηεξε θαηαλάισζε µλήµεο φηαλ ρξεηάδεηαη λα παξαρζνχλ πνιιά θαη µεγάια αληηθείµελα. Αληί λα πξέπεη λα δεµηνπξγεζεί µηα ζπλάξηεζε πνπ ζα επηζηξέθεη µηα ηεξάζηηα ιίζηα γεµάηε αληηθείµελα, µπνξνχµε λα γξάςνπµε έλαλ γελλήηνξα ν νπνίν ζα παξάγεη ηα απαξαίηεηα αληηθείµελα φηαλ απηά ρξεηαζηνχλ (on the fly). Δηζη, µπνξνχµε λα παξάγνπµε ζεηξέο αληηθεηµέλσλ πνπ αιιηψο δελ ζα ρσξνχζαλ ζηε µλήµε. 2. Δίλαη έλαο πνιχ απνηειεζµαηηθφο ηξφπνο λα γίλεη parsing ζε µεγάια αξρεία ρσξίο λα ρξεηάδεηαη λα ηα ϕνξηψζνπµε νιφθιεξα ζηε µλήµε. ηα παξάδεηγµα µπνξνχµε λα ηα δηαβάδνπµε γξαµµή γξαµµή θαη λα ηα επεμεξγαδφµαζηε. 3. Απνηεινχλ έλαλ ϕπζηθφ ηξφπν λα πεξηγξαθνχλ άπεηξεο ζεηξέο δεδνµέλσλ. Παξαδείγµαηνο ράξε ζα µπνξνχζαµε λα δεµηνπξγήζνπµε έλαλ γελλήηνξα πνπ λα µπνξεί λα παξάγεη ζηγά ζηγά θάζε αξηζµφ Fibonacci. Πνιιέο ϕνξέο, ζπλαξηήζεηο πνπ γξάθνπµε πεξηµέλνπλ σο είζνδν θάπνηα ιίζηα ελψ ζα µπνξνχζαλ λα δερζνχλ θαη θάπνηνλ γελλήηνξα ζηελ ζέζε ηεο βειηηψλνληαο έηζη ηελ ρξήζε ηεο θχξηαο µλήµεο ηνπ πξνγξάµµαηνο. Γηα απηφ ηνλ ιφγν, αλ δελ απαηηείηαη ηπραία πξνζπέιαζε ζηα ζηνηρεία µηαο ιίζηαο αιιά αξθεί µηα δηάηξεμε π.ρ. µέζσ ελφο βξφγρνπ for, ηφηε θαιφ είλαη ν θψδηθαο µαο λα µπνξεί λα δνπιέςεη θαη µε ηνπο δχν ηχπνπο εηζφδνπ. ηα απηφ ην ιφγν ππάξρνπλ νξηζµέλνη θαλφλεο πνπ ζα µπνξνχζαµε λα αθνινπζνχµε: 1) Να µελ ρξεζηµνπνηείηαη ε ζπλάξηεζε len(). Πνιιέο ϕνξέο ηελ ρξεζηµνπνηνχµε µφλν θαη µφλν γηα λα πξνζδηνξίζνπµε πφηε ηειείσζε ε δηάηξεμε ηεο ιίζηαο (αληίζηνηρα ζα ήηαλ ε παξαγσγή ησλ αληηθεηµέλσλ απφ ηνλ γελλήηνξα) ελψ απηφ µπνξεί λα γίλεη απηφµαηα απφ ην for βξφγρν. Page 181 of 253

182 2) Να µελ δεηνχληαη απζαίξεηα ζηνηρεία (πρ ην έβδνµν ζηνηρείν) φηαλ ηειηθά ζα ηα πξνζπειαχζνπµε φια θαη δελ µαο ελδηαθέξεη ε ζεηξά ηνπο. Δλα θιαζηθφ παξάδεηγµα πνπ ζπλνςίδεη ηνπο παξαπάλσ θαλφλεο, είλαη ε απνθπγή ηνπ: for i in range(0, len (l)): e = l[i] θαη ε αληηθαηάζηαζε ηνπ µε: for i, e in enumerate (l): πνπ έρεη αθξηβψο ην ίδην απνηέιεζκα θαη είλαη πην θαινγξακκέλν. Πξόηππε βηβιηνζήθε Η πξφηππε βηβιηνζήθε ηεο Python πεξηέρεη έλαλ ηεξάζηην αξηζκφ ρξήζηκσλ αξζξσκάησλ θαη είλαη κέξνο θάζε πξφηππεο εγθαηάζηαζεο Python. Δίλαη ζεκαληηθφ λα εμνηθεησζείηε κε ηελ πξφηππε βηβιηνζήθε, επεηδή πνιιά πξνβιήκαηα κπνξνχλ λα ιπζνχλ γξήγνξα εάλ είζηε εμνηθεησκέλνη κε ην εχξνο ησλ πξαγκάησλ πνπ κπνξνχλ λα θάλνπλ νη βηβιηνζήθεο. Θα κειεηήζνπκε κεξηθά απφ ηα πην ζπλεζηζκέλα αξζξψκαηα ζε απηή ηε βηβιηνζήθε. Σν άξζξσκα sys Σν άξζξσκα sys πεξηέρεη ιεηηνπξγηθφηεηα εηδηθά γηα ην ζχζηεκα. Έρνπκε ήδε δεη φηη ε ιίζηα sys.argv πεξηέρεη ηα νξίζκαηα ηεο γξακκήο εληνιψλ. Τπνζέηνπκε φηη ζέινπκε λα ειέγμνπκε ηελ έθδνζε ηεο Python πνπ ρξεζηκνπνηεί ην ζχζηεκά καο.σν άξζξσκα sys καο δίλεη απηή ηε ιεηηνπξγία. Page 182 of 253

183 Πψο δνπιεχεη ην παξαπάλσ : Tν άξζξσκα sys έρεη ηελ πιεηάδα version_info πνπ καο δίλεη ηελ πιεξνθνξία γηα ηελ έθδνζε. Η πξψηε θαηαρψξεζε είλαη ε θχξηα έθδνζε. Απηφ κπνξνχκε λα ην ειέγμνπκε, γηα παξάδεηγκα, γηα λα επηβεβαηψζνπκε φηη ην πξφγξακκα ηξέρεη κφλν ππφ ηελ Python Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Υξεζηκνπνηνχκε έλα άιιν άξζξσκα απφ ηελ πξφηππε βηβιηνζήθε πνπ νλνκάδεηαη warnings, πνπ ρξεζηκνπνηείηαη γηα λα εκθαλίζεη πξνεηδνπνηήζεηο ζηνλ ηειηθφ ρξήζηε. Δάλ ην λνχκεξν ηεο έθδνζεο Python δελ είλαη ηνπιάρηζηνλ 3, εκθαλίδνπκε ηελ αληίζηνηρε πξνεηδνπνίεζε. Σν άξζξσκα logging Tη ζα θάλαηε εάλ ζέιαηε λα απνζεθεχνληαη θάπνπ κεξηθά κελχκαηα εθζθαικάησζεο ή άιια ζεκαληηθά κελχκαηα, έηζη ψζηε λα κπνξείηε λα ειέγμεηε εάλ ην πξφγξακκά ζαο έρεη ηξέμεη φπσο ζα πεξηκέλαηε; Πψο απνζεθεχεηε θάπνπ απηά ηα κελχκαηα; Απηφ κπνξεί λα επηηεπρζεί ρξεζηκνπνηψληαο ην άξζξσκα logging! Page 183 of 253

184 Πσο ιεηηνπξγεί ην παξαπάλσ πξφγξακκα : Υξεζηκνπνηνχκε ηξία αξζξψκαηα απφ ηελ πξφηππε βηβιηνζήθε - ην άξζξσκα os γηα αιιειεπίδξαζε κε ην ιεηηνπξγηθφ ζχζηεκα, ην άξζξσκα platform γηα πιεξνθνξίεο ζρεηηθά κε ηελ πιαηθφξκα, δειαδή ην ιεηηνπξγηθφ ζχζηεκα, θαη ην άξζξσκα logging γηα ηηο θαηαγξαθέο (log). Αξρηθά, ειέγρνπκε πνην ιεηηνπξγηθφ ζχζηεκα ρξεζηκνπνηνχκε, ειέγρνληαο ηε ζπκβνινζεηξά πνπ επηζηξέθεηαη απφ ηελ platform.platform() (γηα πεξηζζφηεξεο πιεξνθνξίεο, δείηε ηελ import platform; help(platform)). Δάλ είλαη Windows εκθαλίδνπκε ηνλ home drive, ην θάθειν home θαη ην φλνκα ηνπ αξρείνπ (filename) φπνπ ζέινπκε λα απνζεθεχζνπκε ηηο πιεξνθνξίεο. Σνπνζεηψληαο απηά ηα ηξία κέξε καδί, παίξλνπκε ηελ νινθιεξσκέλε ζέζε ηνπ αξρείνπ. Γηα άιιεο πιαηθφξκεο, απαηηείηαη λα μέξνπκε κφλν ην θάθειν home ηνπ ρξήζηε θαη παίξλνπκε ηελ πιήξε ζέζε ηνπ αξρείνπ.υξεζηκνπνηνχκε ηε ζπλάξηεζε os.path.join() γηα λα ηνπνζεηήζνπκε απηά ηα ηξία κέξε ηεο ζέζεο ηνπ αξρείνπ καδί. Ο ιφγνο γηα ηνλ νπνίν ρξεζηκνπνηνχκε κηα εηδηθή ζπλάξηεζε, αληί λα πξνζζέζνπκε απιά ηηο Page 184 of 253

185 ζπκβνινζεηξέο καδί, είλαη δηφηη απηή ε ζπλάξηεζε ζα επηβεβαηψζεη φηη ε πιήξεο ζέζε ηαηξηάδεη κε ην κνξθφηππν (format) πνπ αλακέλεηαη απφ ην ιεηηνπξγηθφ ζχζηεκα. Ρπζκίδνπκε ην άξζξσκα logging γηα λα γξάςνπκε φια ηα κελχκαηα ζε έλα ηδηαίηεξν κνξθφηππν ζην αξρείν πνπ έρνπκε θαζνξίζεη. Σειηθά, κπνξνχκε λα βάινπκε κελχκαηα πνπ πξννξίδνληαη είηε γηα εθζθαικάησζε, είηε γηα πιεξνθνξία, είηε γηα πξνεηδνπνίεζε, είηε θξίζηκα κελχκαηα. Άπαμ θαη ην πξφγξακκα έρεη ηξέμεη, κπνξνχκε λα ειέγμνπκε απηφ ην αξρείν θαη ζα γλσξίδνπκε ηη ζπλέβεη ζην πξφγξακκα, αθφκα θη αλ θακία πιεξνθνξία δελ εκθαλίζηεθε ζηνλ ρξήζηε πνπ ηξέρεη ην πξφγξακκα. Μεξηθέο ζεκαληηθέο επηπξόζζεηεο παξαηεξήζεηο ηαλ ζέινπκε λα επηζηξέςνπκε δχν δηαθνξεηηθέο ηηκέο απφ κηα ζπλάξηεζε,ην κφλν πνπ ρξεηάδεηαη είλαη λα ρξεζηκνπνηήζεηε κηα πιεηάδα. Παξαηεξνχκε φηη ε ρξήζε ηνπ a, b = <θάπνηα έθθξαζε> εξκελεχεη ην απνηέιεζκα ηεο έθθξαζεο σο κηα πιεηάδα κε δχν ηηκέο. Αλ ζέιεηε λα εξκελεχζεηε ηα απνηειέζκαηα σο (a, <νηηδήπνηε άιιν>), ηφηε απιά πξνζζέζηε έλα αζηεξίζθν, φπσο ζα θάλαηε θαη κε ηηο παξακέηξνπο κηαο ζπλάξηεζεο: Page 185 of 253

186 πλεπψο, ν πην γξήγνξνο ηξφπνο γηα λα αληαιιάμεηε ηηο ηηκέο δχν κεηαβιεησλ ζηελ Python είλαη: Πινθάδεο κνλαδηθώλ εληνιώλ Αλαθέξακε φηη θάζε πινθάδα εληνιψλ μερσξίδεηαη απφ ηηο ππφινηπεο απφ ην δηθφ ηεο επίπεδν εζνρήο ηνπ θψδηθα. κσο, ππάξρεη έλα κεηνλέθηεκα. Αλ ε πινθάδα ζαο πεξηέρεη κφλν κηα κνλαδηθή εληνιή, ηφηε κπνξείηε λα ηελ νξίζεηε ζηελ ίδηα γξακκή κε κηα ζπλζήθε ή έλα βξφρν, γηα παξάδεηγκα. Αθνινπζεί ζρεηηθφ παξάδεηγκα γηα θαιχηεξε θαηαλφεζε : Παξαηεξνχκε φηη ε κνλαδηθή εληνιή ρξεζηκνπνπνηείηαη ζηελ ίδηα ζέζε θαη φρη σο μερσξηζηή πινθάδα. Παξφηη κπνξείηε λα ην ρξεζηκνπνηήζεηε απηφ γηα λα θάλεηε ην πξφγξακκά ζαο "κηθξφηεξν", ζπληζηάηαη λα απνθχγεηε απηή ηε κέζνδν ζπληφκεπζεο, εθηφο φηαλ ειέγρεηε γηα ιάζε, θπξίσο γηαηί ζα είλαη πνιχ επθνιφηεξν λα πξνζζέζεηε κηα γξακκή θψδηθα αλ ρξεζηκνπνηείηε θαλνληθή εζνρή θψδηθα. Lambda Forms Η εληνιή lambda, γηα ηελ νπνία θάλακε κηα ζχληνκε αλαθνξά θαη παξαπάλσ(βιέπε αλψλπκεο ζπλαξηήζεηο) ρξεζηκνπνηείηαη γηα λα δεκηνπξγήζεη λέα αληηθείκελα ζπλαξηήζεσλ θαη λα ηα επηζηξέςεη θαηά ηελ εθηέιεζε. Page 186 of 253

187 Αθνινπζεί έλα παξάδεηγκα : Πψο δνπιεχεη ην παξαπάλσ πξφγξακκα : Δδψ ρξεζηκνπνηνχκε ηε ζπλάξηεζε make_repeater γηα λα δεκηνπξγήζνπκε θαηλνχξηα αληηθείκελα ζπλαξηήζεσλ θαηά ηελ εθηέιεζε θαη λα ηα επηζηξέςνπκε. Η εληνιή lambda ρξεζηκνπνηείηαη γηα λα δεκηνπξγήζεη ην αληηθείκελν ζπλάξηεζεο. Οπζηαζηηθά ε lambda δέρεηαη κηα παξάκεηξν αθνινπζνχκελε απφ κηα κνλαδηθή έθθξαζε ε νπνία γίλεηαη ην ζψκα ηεο ζπλάξηεζεο θαη ε ηηκή απηήο ηεο έθθξαζεο επηζηξέθεηαη απφ ηε λέα ζπλάξηεζε. εκεηψζηε φηη νχηε θαλ κηα εληνιή print δε κπνξεί λα ρξεζηκνπνηεζεί κέζα ζε κηα lambda, κφλν εθθξάζεηο. Η ζπλάξηεζε exec θαη ε ζπλάξηεζε eval Η ζπλάξηεζε exec ρξεζηκνπνηείηαη γηα λα εθηειέζεη εληνιέο ηεο Python νη νπνίεο είλαη απνζεθεπκέλεο ζε κηα ζπκβνινζεηξά ή ζε έλα αξρείν, αληί λα είλαη γξακκέλεο κέζα ζην ίδην ην πξφγξακκα. Γηα παξάδεηγκα, κπνξνχκε λα δεκηνπξγήζνπκε κηα ζπκβνινζεηξά πνπ λα πεξηέρεη θψδηθα Python θαηά ηελ εθηέιεζε, θαη λα εθηειέζνπκε απηέο ηηο εληνιέο ρξεζηκνπνηψληαο ηελ εληνιή exec. Page 187 of 253

188 Η ζπλάξηεζε eval ρξεζηκνπνηείηαη γηα λα απνηηκήζεη έγθπξεο εθθξάζεοη ηεο Python νη νπνίεο απνζεθεχνληαη ζε κηα ζπκβνινζεηξά. Παξαθάησ παξαζέησ έλα παξάδεηγκα : Η εληνιή assert Η εληνιή assert ρξεζηκνπνηείηαη γηα λα δειψζνπκε φηη θάηη είλαη αιεζέο. Γηα παξάδεηγκα, αλ είζηε απφιπηα ζίγνπξνη φηη έρεηε ηνπιάρηζηνλ έλα ζηνηρείν ζε κηα ιίζηα πνπ ρξεζηκνπνηείηε θαη ζέιεηε λα ην ειέγμεηε απηφ, θαη λα εγείξεηε έλα ζθάικα ζε αλ δελ είλαη αιεζέο, ηφηε ε εληνιή assert είλαη ηδαληθή γη' απηή ηελ πεξίπησζε. Αλ ε εληνιή assert απνηχρεη, ηφηε εγείξεηαη έλα ζθάικα AssertionError. Page 188 of 253

189 Η εληνιή assert ζα πξέπεη λα ρξεζηκνπνηείηαη πξνζεθηηθά. Σηο πεξηζζφηεξεο θνξέο είλαη θαιχηεξν λα αξπάδεηε ηηο εμαηξέζεηο θαη είηε λα ρεηξίδεζηε ην πξφβιεκα κε θάπνην ηξφπν, είηε λα ελεκεξψλεηε ην ρξήζηε γη' απηφ θαη λα ηεξκαηίδεηε ηελ εθαξκνγή. Η ζπλάξηεζε repr Η ζπλάξηεζε repr ρξεζηκνπνηείηαη γηα λα ιάβνπκε κηα θαλνληθνπνηεκέλε αλαπαξάζηαζε σο ζπκβνινζεηξάο ηνπ αληηθεηκέλνπ. Σν ελδηαθέξνλ κέξνο είλαη φηη ζα έρεηε eval(repr(object)) == object ηηο πεξηζζφηεξεο θνξέο. Η ζπλάξηεζε repr ρξεζηκνπνηείηαη γηα λα ιάβνπκε κηα επαλάγλσζηε θαη εθηππψζηκε αλαπαξάζηαζε ηνπ αληηθεηκέλνπ. Μπνξείηε λα ειέγμεηε ηη επηζηξέθνπλ νη θιάζεηο ζαο γηα ηε ζπλάξηεζε repr νξίδνληαο ηε κέζνδν repr ζηελ θιάζε. Καλνληθέο εθθξάζεηο Οη θαλνληθέο εθθξάζεηο απνηεινχλ έλα απφ ηα ζεκαληηθφηεξα εξγαιεία πνπ έρνπκε ζηε δηάζεζή καο φηαλ ζέινπκε λα βξνχκε θνκκάηηα θεηκέλνπ, ηα νπνία κπνξνχλ λα εθθξαζηνχλ είηε σο αιθαξηζκεηηθά πνπ έρνπκε δεη, είηε γεληθφηεξα σο θιάζεηο αιθαξηζκεηηθψλ (πρ φια ηα αιθαξηζκεηηθά πνπ αλαπαξηζηνπλ δεθαδηθνχο/αθέξαηνπο αξηζκνχο). Απηέο ηηο θιάζεηο αιθαξηζκεηηθψλ ηηο νλνκάδνπλ πξόηππα (pattern). Τπάξρνπλ δπν θχξηεο ρξήζεηο ησλ θαλνληθψλ εθθξάζεσλ ζηελ Python : ε αλαδήηεζε θαη ην ηαίξηαζµα. ηελ αλαδήηεζε, µαο ελδηαθέξεη λα βξνχµε ηελ πξψηε ϕνξά πνπ ζπλαληάµε έλα πξφηππν. ην ηαίξηαζµα, βξίζθνπµε φιεο ζέζεηο φπνπ µπνξεί λα βξίζθεηαη ην πξφηππν πνπ αλαδεηνχµε. Page 189 of 253

190 Αλαδήηεζε Υξεζηµνπνηψληαο ηηο ηεηξάγσλεο αγθχιεο µπνξνχµε λα νξίζνπµε µηα θιάζε απφ ραξαθηήξεο πνπ µπνξεί λα ηαηξηάμεη µε θάπνηνλ ραξαθηήξα. ην αθφινπζν παξάδεηγµα νξίδνπµε ηελ θιάζε µε ηνπο ραξαθηήξεο πνπ αληηζηνηρνχλ ζε αξηζµνχο. Αληίζεηα, φινη νη ραξαθηήξεο πνπ βξίζθνληαη εθηφο ησλ αγθπιψλ µπνξνχλ λα ηαηξηάμνπλ µφλν αλ βξεζεί αθξηβψο ν ίδηνο ραξαθηήξαο ζην αιθαξηζµεηηθφ ζην νπνίν ςάρλνπµε. ην παξάδεηγκα πνπ αθνινπζεί, ςάρλνπµε αξηζµνχο πνπ μεθηλάλε µε 9. Μπνξνχµε λα παξαηεξήζνπµε πσο ρξεζηµνπνηήζεθε ν εηδηθφο ραξαθηήξαο \b. Ο εηδηθφο απηφο ραξαθηήξαο ηαηξηάδεη φξηα ησλ ιέμεσλ. Καηά απηφ ηνλ ηξφπν, ζηγνπξεχνπκε φηη ζα βξνχµε αξηζµνχο πνπ αξρίδνπλ απφ 9 φπσο ην 9191 θαη φρη αξηζµνχο πνπ απιά πεξηέρνπλ ην 9 φπσο ην Αληίζηνηρα ιεηηνπξγεί θαη ε ζπλάξηεζε findall ε νπνία φµσο επηζηξέθεη φιεο ηηο πεξηπηψζεηο φπνπ βξέζεθε ζην αιθαξηζµεηηθφ ζην νπνίν ςάρλνπµε ην πξφηππν. ην παξαθάησ παξάδεηγµα, επηζηξέθνληαη φινη νη αξηζµνί πνπ βξίζθνληαη µέζα ζην αιθαξηζµεηηθφ. Page 190 of 253

191 GUI µε tkinter Με ηνλ φξν GUI αλαθεξφµαζηε ζηελ γξαθηθή δηεπαθή (Graphical User Interface) πνπ έρεη ε εθαξµνγή µαο µε ηνλ ρξήζηε. Γηα ηνλ ζθνπφ απηφ ππάξρνπλ αξθεηέο βηβιηνζήθεο πνπ ιεηηνπξγνχλ ζε δηαθνξεηηθέο πιαηθφξµεο ρσξίο αιιαγή ζηνλ θψδηθα ηνπο. Μεξηθέο απφ απηέο είλαη: wxpython pyqt PyGTK tkinter Σηο ηξεηο πξψηεο ίζσο λα ηηο γλσξίδεηε θαη απφ άιιεο γιψζζεο, θαζψο έρνπλ γίλεη νη απαξαίηεηεο ελέξγεηεο γχξσ απφ ηνλ θψδηθα ησλ αληίζηνηρσλ βηβιηνζεθψλ ψζηε λα µπνξνχλ λα ρξεζηµνπνηεζνχλ απφ ην πεξηβάιινλ ηεο γιψζζαο Python. Αληίζεηα, ε tkinter (= Tk interface) έξρεηαη µαδί µε ηελ Python, είλαη ζρεηηθά απιή ελψ θαη δελ ζα ρξεηαζηνχκε θαµία επηπιένλ βηβιηνζήθε γηα λα ηελ ρξεζηµνπνηήζνπκε. Υαξαθηεξίδεηαη γηα ηελ απιφηεηα ηεο θαη ζηεξίδεηαη πάλσ ζε Tcl/Tk. Σν tkinter πξνζθέξεη µηα αληηθεηµελνζηξαθή δηεπαθή πξνο ηελ εξγαιεηνζήθε Tcl/Tk. ην παξφλ project ζα εμεηάζνπκε ηελ tkinter. Tkinter Πξνγξακκαηηζκόο Η Tkinter είλαη ε πξφηππε βηβιηνζήθε GUI γηα ηελ Python. Η Python φηαλ ζπλδπάδεηαη κε ηελ Tkinter πξνζθέξεη έλα γξήγνξν θαη εχθνιν ηξφπν γηα ηε δεκηνπξγία GUI εθαξκνγψλ. Η Tkinter παξέρεη κηα ηζρπξή αληηθεηκελνζηξαθή δηεπαθή (object-oriented interface) ζηε Tk GUI εξγαιεηνζήθε. Σν λα δεκηνπξγήζεηο κηα GUI εθαξκνγή πνπ ρξεζηκνπνηεί Tkinter είλαη έλα εχθνιν έξγν. Σν κφλν πνπ ρξεηάδεηαη λα θάλεηε είλαη λα εθηειέζεηε ηα παξαθάησ βήκαηα: 1. Δηζαγσγή ηεο Tkinter κνλάδαο 2. Γεκηνπξγία θπξίνπ παξαζχξνπ ηεο εθαξκνγήο GUI. 3. Πξνζζήθε ελφο ή πεξηζζφηεξσλ απφ ηηο πξναλαθεξζείζεο widgets ζηελ εθαξκνγή GUI. 4. Δηζαγσή ηνπ θχξηνπ βξφγρνπ εθδήισζεο γηα λα αλαιάβεη δξάζε ελαληίνλ θάζε ζπκβάληνο πνπ ελεξγνπνηείηαη απφ ην ρξήζηε. Page 191 of 253

192 Σν πην απιφ πξφγξαµµα πνπ µπνξνχµε λα δεµηνπξγήζνπµε είλαη : Παξαηεξνχµε πσο αθνχ εηζάγνπµε απφ ηελ βηβιηνζήθε tkinter φ,ηη ρξεηαδφµαζηε, µπνξνχµε λα δεµηνπξγήζνπµε έλα απιφ παξάζπξν θαιψληαο ηνλ δεµηνπξγφ ηεο θιάζεο. ηελ ζπλέρεηα πξνζζέηνπµε µηα εηηθέηα (label) ηελ νπνία εµθαλίδνπµε µε ηελ ζπλάξηεζε pack(). Σέινο, ην πξφγξαµµα µαο εηζέξρεηαη ζε έλαλ βξφγρν (mainloop) φπνπ πεξηµέλεη απφ ηνλ ρξήζηε έλα θαηλνχξγην ζπµβάλ. Tkinter Widgets (Γξαθηθά ζηνηρεία) H Tkinter παξέρεη δηάθνξα ζηνηρεία ειέγρνπ, φπσο θνπκπηά, εηηθέηεο θαη πιαίζηα θεηκέλνπ, πνπ ρξεζηκνπνηνχληαη ζε κηα εθαξκνγή GUI. Οη έιεγρνη απηνί ζπλήζσο νλνκάδνληαη widgets (γξαθηθά ζηνηρεία). Τπάξρνπλ επί ηνπ παξφληνο 15 ηχπνη γξαθηθψλ ζηνηρείσλ (widgets) ζηελ Tkinter. Παξαζέησ απηά ηα γξαθηθά ζηνηρεία, θαζψο θαη κηα ζχληνκή πεξηγξαθή ζηνλ πίλαθα πνπ αθνινπζεί : Υεηξηζηήο Κνπκπί Κακβάο Checkbutton Πεξηγξαθή Σν widget θνπκπί ρξεζηκνπνηείηαη γηα λα εκθαλίζεηε ηα θνπκπηά ζηελ εθαξκνγή ζαο. Ο widget θακβάο ρξεζηκνπνηείηαη γηα ηε ζρεδίαζε ζρεκάησλ, φπσο γξακκέο, ειιείςεηο, πνιχγσλα, θαη νξζνγψληα, ζηελ εθαξκνγή ζαο. Σν Checkbutton widget ρξεζηκνπνηείηαη γηα λα εκθαλίζεη κηα ζεηξά απφ επηινγέο, φπσο πιαίζηα ειέγρνπ. Ο ρξήζηεο κπνξεί λα Page 192 of 253

193 επηιέμεη πνιιαπιέο επηινγέο ζε κηα ζηηγκή. Δίζνδνο Σν widget εηζφδνπ ρξεζηκνπνηείηαη γηα ηελ εκθάληζε κνλήο γξακκήο πεδίν θεηκέλνπ γηα ηελ απνδνρή ησλ ηηκψλ απφ έλα ρξήζηε. Πιαίζην Σν widget Frame ρξεζηκνπνηείηαη σο έλα widget δνρείν γηα λα νξγαλψζεη άιιεο κηθξνζπζθεπέο. Δπηγξαθή Η widget επηγξαθή ρξεζηκνπνηείηαη γηα λα παξέρεη κηα εληαία γξακκή ιεδάληα γηα άιια widgets. Μπνξεί επίζεο λα πεξηέρεη εηθφλεο. Listbox Σν widget πιαίζην ιίζηαο ρξεζηκνπνηείηαη γηα λα παξέρεη κηα ιίζηα επηινγψλ ζε έλα ρξήζηε. ΠιήθηξνMENU Σν widget πιήθηξν MENU ρξεζηκνπνηείηαη γηα λα εκθαλίδεη κελνχ ζηελ εθαξκνγή ζαο. Μελνύ Σν widget Menu ρξεζηκνπνηείηαη γηα λα παξέρεη δηάθνξεο εληνιέο ζε έλα ρξήζηε. Απηέο νη εληνιέο πεξηέρνληαη κέζα ζην πιήθηξν MENU. Μήλπκα Σν widget Μήλπκα ρξεζηκνπνηείηαη γηα ηελ εκθάληζε πνιιψλ γξακκψλ πεδία θεηκέλνπ γηα ηελ απνδνρή ησλ ηηκψλ απφ έλα ρξήζηε. RadioButton Σν widget RadioButton ρξεζηκνπνηείηαη γηα λα εκθαλίζεη κηα ζεηξά απφ επηινγέο, φπσο θνπκπηά επηινγήο. Ο ρξήζηεο κπνξεί λα επηιέμεη κφλν κία επηινγή ζε κηα ζηηγκή. Κιίκαθα Η θιίκαθα widget ρξεζηκνπνηείηαη γηα λα παξέρεη έλα widget slider. Κύιηζεο Η Scrollbar widget ρξεζηκνπνηείηαη γηα λα πξνζζέζεηε ηελ ηθαλφηεηα θχιηζεο ζε δηάθνξα widgets, φπσο ζηα πιαίζηα ιίζηαο. Κείκελν Σν widget θεηκέλνπ ρξεζηκνπνηείηαη γηα ηελ εκθάληζε θεηκέλνπ ζε πνιιαπιέο γξακκέο. Toplevel Σν γξαθηθφ toplevel ρξεζηκνπνηείηαη γηα λα παξέρεη έλα μερσξηζηφ window container. Spinbox Σν widget Spinbox είλαη κηα παξαιιαγή ηνπ πξνηχπνπ έλαξμεο Tkinter widget, ην νπνίν κπνξεί λα ρξεζηκνπνηεζεί γηα λα επηιέμεηε απφ έλα ζηαζεξφ αξηζκφ ηηκψλ. PanedWindow Έλα PanedWindow είλαη έλα widget container πνπ κπνξεί λα πεξηέρεη νπνηνδήπνηε αξηζκφ ησλ παινπηλάθσλ, πνπ LabelFrame δηνξγαλψλνληαη νξηδφληηα ή θάζεηα. Έλα labelframe είλαη έλα απιφ widget δνρείν. Πξσηαξρηθφο ζθνπφο ηνπ είλαη λα δξα σο δηαρσξηζηηθφ ή σο container γηα πνιχπινθεο δηαηάμεηο παξάζπξν. tkmessagebox Υξεζηκνπνηείηαη γηα ηελ εκθάληζε πιαηζίσλ κελπκάησλ ζε εθαξκνγέο ζαο. Page 193 of 253

194 Γηαρείξηζε Γεσκεηξίαο ια ηα Tkinter widgets έρνπλ πξφζβαζε ζε ζπγθεθξηκέλεο κεζφδνπο δηαρείξηζεο ηεο γεσκεηξίαο, πνπ έρνπλ σο ζθνπφ ηελ νξγάλσζε widgets ζε φιε ηελ πεξηνρή ηνπ widget γνλέα. Η Tkinter εθζέηεη ηηο αθφινπζεο θαηεγνξίεο δηαρείξηζεο γεσκεηξίαο : pack, grid, θαη place. Σν παθέην () Μέζνδνο - Απηφο ν δηαρεηξηζηήο γεσκεηξίαο νξγαλψλεη ηα widgets ζε ηεκάρηα πξηλ ηελ ηνπνζέηεζή ηνπο ζην widget γνλέα. Σν πιέγκα () Μέζνδνο - Απηφο ν δηαρεηξηζηήο γεσκεηξίαο νξγαλψλεη ηα widgets ζε έλαλ πίλαθα-φπσο δνκή ζην widget γνλέα. Η ζέζε () Μέζνδνο -Απηφο ν δηαρεηξηζηήο γεσκεηξίαο νξγαλψλεη ηα widgets κε ηελ ηνπνζέηεζε ηνπο ζε κηα ζπγθεθξηκέλε ζέζε ζην widget γνλέα. Αλαδπόµελα παξάζπξα δηαιόγνπ Σα αλαδπφµελα παξάζπξα δηαιφγνπ pop-up µπνξνχλ λα ρξεζηµνπνηεζνχλ γηα λα ελεµεξψζνπλ ηνλ ρξήζηε γηα έλα ζπµβάλ, ή γηα λα ηνπ δεηήζνπλ µηα απιή επηινγή. Μπνξνχµε λα ηα δνχµε ζαλ αληηθαηαζηάηεο ησλ print πνπ ρξεζηµνπνηνχλ ηα πξνγξάµµαηα ζε θνλζφια ψζηε λα ελεµεξψζνπλ ζε ζπληνµία γηα έλα γεγνλφο πνπ ζπλέβε (θαη ζπλήζσο δηαθφπηεη ηελ ξνή ηνπ πξνγξάµµαηνο). Δρνπµε ζηελ δηάζεζε µαο επηά δηαθνξεηηθνχο ηχπνπο ζπλεζηζµέλσλ παξαζχξσλ πνπ µπνξνχµε εχθνια λα ρξεζηµνπνηήζνπµε, αξθεί λα εηζάγνπµε ην tkinter.messagebox. Σν απνηέιεζµα ηνπο, εµθαλίδεηαη ζηελ αληίζηνηρε εηθφλα ηεο θάζε ζπλάξηεζεο πνπ αληηζηνηρεί ζηα αλαδπφµελα παξάζπξα. 1. showinfo() 2. askokcancel() 3. showwarning() 4. showerror() 5. askquestion() 6. askyesno() 7. askretrycancel() Σα νξίζµαηα πνπ µπνξνχµε λα πεξάζνπµε µε ζεηξά ζηηο παξαπάλσ ζπλαξηήζεηο είλαη: Σίηινο: Ο ηίηινο ηνπ παξαζχξνπ Μήλπµα: Σν θείµελν πνπ ϑα εµθαληζηεί σο µήλπµα Δπηινγέο: Πξναηξεηηθά. Υξεζηµνπνηείηαη γηα ηελ επηινγή εηθνληδίνπ, πνην θνπµπί λα είλαη πξνεπηινγή θαη άιια. Page 194 of 253

195 Αο δνύκε ζηελ πξάμε πσο εθαξκόδνληαη νη παξαπάλσ ζπλαξηήζεηο showinfo() askokcancel() Page 195 of 253

196 showwarning() showerror() askquestion() Page 196 of 253

197 askyesno() Page 197 of 253

198 askretycancel() Παξαηήξεζε ηα παξάζπξα φπνπ ν ρξήζηεο έρεη ηελ δπλαηφηεηα λα δηαιέμεη θάπνηα επηινγή (πρ ΟΚ, ή άθπξν), αλάινγα µε ην ηη δηαιέγεη επηζηξέθεηαη απφ ηελ ζπλάξηεζε ε ηηµή true ή false αληίζηνηρα. Standard attributes Αο κειεηήζνπκε ην πψο κεξηθά απφ ηα common attributes (φπσο ην κέγεζνο, ην ρξψκα θαη ε γξακκαηνζεηξά) νξίδνληαη. Dimensions (δηαζηάζεηο) Colors (ρξψκαηα) Fonts (γξακκαηνζεηξέο) Anchors (άγθπξεο) Relief styles (ζηπι αξσγήο) Bitmaps Cursors (θέξζνξεο) Page 198 of 253

199 Γηαζηάζεηο (Dimensions) Γηάθνξα κήθε, πιάηε, θαη άιιεο δηαζηάζεηο ησλ widgets κπνξνχλ λα πεξηγξαθνχλ ζε πνιιέο δηαθνξεηηθέο κνλάδεο. Αλ νξίζεηε κηα δηάζηαζε ζε έλαλ αθέξαην, ζεσξείηαη φηη απηφ είλαη ζε pixels. Μπνξείηε λα θαζνξίζεηε ηηο κνλάδεο κε ηε δηάζηαζε ζε έλα string πνπ πεξηέρεη έλαλ αξηζκφ αθνινπζνχκελν απφ : c centimeters i inches m milimeters p Printer's points (about 1/72") Η tkinter εθθξάδεη έλα κήθνο σο έλαλ αθέξαην αξηζκφ απφ pixels. Παξαθάησ δίλεηαη ε ιίζηα ησλ θνηλψλ επηινγψλ κήθνπο : borderwidth ην πιάηνο ησλ ζπλφξσλ ην νπνίν δίλεη κηα ηξηζδηάζηαηε φςε ζην widget. Highlightthickness ην πιάηνο ηνπ ηνληζκέλνπ νξζνγσλίν, φηαλ ην widget έρεη εζηίαζε. padx Pady Extra ρψξν ηα αηηήκαηα widget απφ ην δηαρεηξηζηή ηνπ ζρεδίνπ ηνπ πέξα απφ ην ειάρηζην πνπ ρξεηάδεηαη ην widget γηα λα εκθαλίζεη ηα πεξηερφκελά ηνπ ζηελ x θαη y. Selectborderwidth Πιάηνο ηνπ ηξηζδηάζηαην πεξίγξακκα γχξσ απφ επηιεγκέλα ζηνηρεία ηνπ widget. Wraplength Μέγηζην κήθνο γξακκήο γηα ηα widgets πνπ εθηεινχλ αλαδίπισζε ιέμεσλ. Height επηζπκεηφ χςνο ηνπ widget, πξέπεη λα είλαη κεγαιχηεξε απφ ή ίζν κε 1. Underline Γείθηεο ηνπ ραξαθηήξα γηα λα ππνγξακκίζεη ην θείκελν ηνπ widget (0 είλαη ν πξψηνο ραξαθηήξαο, 1 ην δεχηεξν, θαη νχησ θαζεμήο). Width Δπηζπκεηφ πιάηνο ηνπ widget Υξώκαηα (Colors) H Tkinter αληηπξνζσπεχεη ηα ρξψκαηα κε strings. Τπάξρνπλ δχν γεληθνί ηξφπνη γηα λα θαζνξίζεηε ηα ρξψκαηα ζηελ Tkinter: 1. Μπνξείηε λα ρξεζηκνπνηήζεηε έλα string δηεπθξηλίδνληαο ην πνζνζηφ ηνπ θφθθηλνπ, πξάζηλνπ θαη κπιε ζε δεθαεμαδηθά ςεθία. Γηα παξάδεηγκα, "# fff" είλαη ιεπθφ, "# " είλαη καχξν, "# 000fff000" είλαη θαζαξφ πξάζηλν, θαη "# 00ffff" είλαη θαζαξφ θπαλφ (πξάζηλν ζπλ κπιε). Page 199 of 253

200 2. Μπνξείηε επίζεο λα ρξεζηκνπνηήζεηε νπνηνδήπνηε ηνπηθά θαζνξηζκέλν πξφηππν φλνκα ρξψκαηνο. Γειαδή, ηα ρξψκαηα "ιεπθφ", "καχξν", "θφθθηλν", "πξάζηλν", "κπιε", "θπαλφ", "θίηξηλν" ζα είλαη πάληα δηαζέζηκα. Υξσκαηηθέο επηινγέο Οη θνηλέο επηινγέο ρξσκάησλ είλαη: αctivebackground ρξψκα θφληνπ γηα ην widget, φηαλ ην widget είλαη ελεξγφ. αctiveforeground Υξψκα πξνζθελίνπ γηα ην widget, φηαλ ην widget είλαη ελεξγφ. background ρξψκα θφληνπ γηα ην widget. Απηφ κπνξεί επίζεο λα παξαζηαζεί σο bg. disabledforeground Υξψκα πξνζθελίνπ γηα ην widget, φηαλ ην widget είλαη απελεπεξγνπνηεκέλν. foreground ν ρξψκα πξνζθελίνπ γηα ην widget. Απηφ κπνξεί επίζεο λα παξαζηαζεί σο fg. highlightbackground Υξψκα θφληνπ ηεο ηνληζκέλεο πεξηνρήο ηνλίδνπλ φηαλ ην widget έρεη εζηίαζε (focus). highlightcolor Υξψκα πξνζθελίνπ ηεο ηνληζκέλεο πεξηνρήο,φηαλ ην widget έρεη εζηίαζε. selectbackground ρξψκα θφληνπ γηα ηα επηιεγκέλα ζηνηρεία ηνπ widget. selectforeground Υξψκα πξνζθελίνπ γηα ηα επηιεγκέλα ζηνηρεία ηνπ widget. Γξακκαηνζεηξέο (fonts) Yπάξρνπλ έσο θαη ηξεηο ηξφπνη γηα λα πξνζδηνξίζεηε ην type style. 1) Simple Tuple Fonts (Απιέο γξακκαηνζεηξέο πιεηάδσλ) Χο κηα πιεηάδα ηεο νπνίαο ην πξψην ζηνηρείν είλαη ε νηθνγέλεηα γξακκαηνζεηξψλ,αθνινπζείηαη πξναηξεηηθά απφ έλα string πνπ πεξηέρεη έλα ή πεξηζζφηεξα απφ ηα style modifiers έληνλε, πιάγηα ή ππνγξάκκηζκέλε. Παξάδεηγκα : ("Times New Roman", "14") ("Consolas","20","bold italic") Page 200 of 253

201 2) Γξακκαηνζεηξέο αληηθεηκέλνπ font (Font object Fonts) Μπνξείηε λα δεκηνπξγήζεηε έλα "αληηθείκελν γξακκαηνζεηξά" απφ ηελ εηζαγσγή ηεο κνλάδαο tkfont θαη ρξεζηκνπνηψληαο Font θαηαζθεπαζηή ηεο θαηεγνξίαο: import tkfont font = tkfont.font(επιλογό,...) Δδψ είλαη ε ιίζηα ησλ επηινγψλ : Παξάδεηγκα : family : Σν φλνκα ηεο νηθνγέλεηαο γξακκαηνζεηξάο σο string. size : Σν χςνο ηεο γξακκαηνζεηξάο σο αθέξαηνο ζηα ζεκεία. Γηα λα πάξεηε κηα γξακκαηνζεηξά n pixels, ρξεζηκνπνηείηε -n. weight : "bold" γηα έληνλε γξαθή, «regular» γηα θαλνληθή. slant : "italic" γηα ηελ πιάγηα γξαθή, "roman" γηα unslanted. underline : 1 γηα ην ππνγξακκηζκέλo θείκελν, 0 γηα ηελ θαλνληθφ. overstrike : 1 γηα ην θείκελν overstruck, 0 γηα ηελ θαλνληθφ. Helv22 = tkfont.font(family="helvetica",size=22,weight="bold",slant= "italic") 3) X Window Fonts Αλ δνπιεχεηε ζε X Window System, κπνξείηε λα ρξεζηκνπνηήζεηε νπνηνδήπνηε απφ ηα νλφκαηα ησλ γξακκαηνζεηξψλ Υ. Υξεζηκνπνηήζηε ην xfontsel ππόγπαμμα,ην νπνίν ζα ζαο βνεζήζεη λα επηιέμεηε θαηάιιειεο θαη επράξηζηεο γξακκαηνζεηξέο. Anchors Οη άγθπξεο ρξεζηκνπνηνχληαη γηα λα θαζνξίζνπλ πνπ ηνπνζεηείηαη ην θείκελν ζε ζρέζε κε έλα ζεκείν αλαθνξάο. Αθνινπζεί ε ιίζπα απφ ηηο πηζαλέο ζηαζεξέο νη νπνίεο κπνξνχλ λα ρξεζηκνπνηεζνχλ γηα ην γλψξηζκα ηεο άγθπξαο(anchor attribute). NW CENTER SE N E NE SW W S Page 201 of 253

202 Οη ζηαζεξέο άγθπξεο (constant anchors) θαίλνληαη ζην παξαθάησ δηάγξακκα : Python Tkinter Relief styles Σν relief style ελφο widget αλαθέξεηαη ζε νξηζκέλεο πξνζνκνηψζεηο 3D εθέ γχξσ απφ ην εμσηεξηθφ ηνπ widget. Αθνινπζεί έλαο θαηάινγνο απφ πηζαλέο ζηαζεξέο νη νπνίεο κπνξνχλ λα ρξεζηκνπνηεζνχλ γηα ην relief attribute. FLAT SUNKEN GROOVE RIDGE RAISED Αθνινπζεί έλα παξάδεηγκα : Page 202 of 253

203 Python Tkinter Bitmaps Μπνξείηε λα ρξεζηκνπνηήζεηε απηφ ην ραξαθηεξηζηηθφ γηα λα εκθαληζηεί έλα bitmap. Τπάξρνπλ νη αθφινπζνη ηχπνη bitmaps δηαζέζηκνη : "error" "gray75" "gray50" "gray25" "gray12" "hourglass" "info" "questhead" "question" "warning" Αθνινπζεί παξάδεηγκα κε bitmaps. Python Tkinter Cursors Η Python Tkinter ππνζηεξίδεη έλα κεγάιν αξηζκφ δηαθνξεηηθψλ mouse cursors. Η αθξηβήο γξαθηθή απεηθφληζε κπνξεί λα δηαθέξεη αλάινγα κε ην ιεηηνπξγηθφ ζαο ζχζηεκα. Page 203 of 253

204 ηε ζπλέρεηα παξαηίζεηαη κηα ιίζηα κε ηα πην ελδηαθέξνληα mouse cursors : "arrow" "circle" "clock" "cross" "dotbox" "exchange" "fleur" "heart" "man" "mouse" "pirate" "plus" "shuttle" "sizing" "spider" "spraycan" "star" "target" "tcross" "trek" "watch" Αθνινπζεί έλα παξάδεηγκα κε mouse cursors : Παξαηήζεζε Αλ πιεζηάζνπκε ζηνλ θέξζνξα πάλσ ζην εηθνλίδην heart, απηφο παίξλεη ην ζρήκα θαξδηάο θαη πάλσ ζην spider, παίξλεη ην ζρήκα αξάρλεο. Page 204 of 253

205 ηε ζπλέρεηα ζα δνχκε ηελ δεκηνπξγία κηαο εθαξκνγήο ζε Python,ελφο ρξνλνκέηξνπ. Έλα απιφ κνλφ θνπκπί δελ είλαη θαη ηφζν ρξήζηκν.έλα ρξνλφκεηξν, ζα πξέπεη λα είλαη ζε ζέζε λα θαζνξίζεη πφηε ζα ζαο πξνεηδνπνηήζεη. Καη γη 'απηφ, ε θιίκαθα(scale) είλαη κηα θαιή επηινγή. αο δίλεη έλα slider πνπ κπνξείηε λα ρξεζηκνπνηήζεηε γηα λα επηιέμεηε πφζα ιεπηά ζέιεηε λα πεξηκέλεη ην ρξνλφκεηξν. Πξνζζέζηε απηέο ηηο δχν γξακκέο ζην script ζαο αθξηβψο πξηλ απφ ηε γξακκή φπνπ ζα δεκηνπξγήζεηε ην θνπκπί ζαο: scale = Scale(root, from_=1, to=20, orient=horizontal, length=500) scale.pack() Μπνξνχκε ινηπφλ λα αλαπηχμνπκε ηελ εθαξκνθή καο ΣΑΓΙΑΚΑ,πξνζζέηνληαο επηπιένλ δπλαηφηεηεο σο εμήο: 1 ν ζηάδην Page 205 of 253

206 2 ν ζηάδην 3 ν ζηάδην Page 206 of 253

207 εκείσζε Μπνξείηε επίζεο λα πξνζζέζεηε ζηνηρεία ειέγρνπ γηα λα έρεηε θαιχηεξε γξαθηθή αλαπαξάζηαζε. Γηα παξάδεηγκα, κπνξείηε λα πξνζζέζεηε κηα εηηθέηα ιίγν πξηλ ηε δεκηνπξγία ηεο θιίκαθαο,ε νπνία λα δηεπθξηλίδεη φηη ην ξπζκηζηηθφ ζεκαίλεη έλα ρξφλν ζε ιεπηά(minutes)[3 ν ζηάδην]. «Υηίζηκν» κηαο βαζηθήο GUI εθαξκνγήο(gui application) βήκα-βήκα ζε Python κε Tkinter Έλα widget είλαη έλα ζηνηρείν GUI (έλα θνπκπί, έλα πιαίζην ειέγρνπ, έλα ζήκα, κηα θαξηέια, έλα παξάζπξν). Η παξνχζα εθαξκνγή ζα έρεη 3 widgets: 1. Έλα πεδίν θεηκέλνπ ("Παξαθαιψ εηζάγεηε θείκελν..") 2. Έλα θνπκπί ("Πηέζηε απηφ ην θνπκπί!") 3. Έλα κπιε εηηθέηα («Γεηά ζνπ,απηή είλαη ε πξψηε κνπ GUI application!") Πσο ζέισ λα ιεηηνπξγεί ε εθαξκνγή κνπ : 1) ηαλ παηάκε ην ENTER ζην πεδίν θεηκέλνπ, ή θάλνπκε θιηθ ζην θνπκπί, ε κπιε εηηθέηα ζα εκθαλίδεη ην θείκελν πνπ έρεη εηζαρζεί. 2) Θέινπκε λα πεξηνξηζκφ αιιαγήο κεγέζνπο παξαζχξνπ, έηζη ψζηε ην παξάζπξν λα κπνξεί λα αιιάμεη ην κέγεζφο ηνπ νξηδφληηα. 3) Δάλ ην παξάζπξν έρεη αιιάμεη κέγεζνο, ην πεδίν θεηκέλνπ θαη θφθθηλν πεξίγξακκα ζα επεθηαζεί νξηδφληηα. 1 ν βήκα Γεκηνπξγία θιάζεο θαη θαηαζθεπαζηή-παξαθνινύζεζε γνλέα (parent) Παξαηεξήζεηο Δίλαη θαιφ θαη πξαθηηθφ λα ζέζνπκε ηελ εθαξκνγή καο ζε κηα θιάζε. tkinter.tk : είλαη ε βαζηθή θιάζε γηα πξφηππα παξάζπξα. Page 207 of 253

208 myapp_tk : πξνέξρεηαη απφ tkinter.tk, νπφηε ζα πξέπεη λα θαιέζνπκε ηνλ θαηαζθεπαζηή tkinter.tk ( tkinter.tk. init () ) Έλα γξαθηθφ πεξηβάιινλ GUI είλαη κηα ηεξαξρία αληηθεηκέλσλ: Έλα θνπκπί κπνξεί λα πεξηέρεηαη ζε έλα παξάζπξν,πνπ πεξηέρεηαη ζε έλα tab, ην νπνίν πεξηέρεηαη ζε έλα παξάζπξν, θ.ιπ. Έηζη, θάζε ζηνηρείν GUI έρεη έλα γνλέα(parent). Γηα απηφ θαη νη δχν θαηαζθεπαζηέο έρνπλ κηα παξάκεηξν γνλέα.η παξαθνινχζεζε ησλ γνλέσλ είλαη ρξήζηκε φηαλ έρνπκε λα εκθαλίζνπκε / απνθξχςνπκε κηα νκάδα widgets, λα ηα βειηηψζνπκε ηελ νζφλε ή απιά λα ηα θαηαζηξέςνπκε, φηαλ ηεξκαηίδεη ε εθαξκνγή. ε απηφ ην ζεκείν,ζεκεηψλεηαη φηη ην wx.frame αληηθείκελν (πνπ αξθεηνί πξνγξακκαηηζηέο python ρξεζηκνπνηνχ αληί ηνπ tkinter) έρεη δχν παξακέηξνπο: 1) ην id (έλα αλαγλσξηζηηθφ ηνπ widget) θαη 2) ηνλ ηίηιν (ν ηίηινο ηνπ παξαζχξνπ). Δίλαη κηα θαιή ζπλήζεηα, θαηά ηελ θαηαζθεπή θάζε είδνπο ζηνηρείνπ GUI,λα θξαηάκε κηα αλαθνξά ζην γνλέα(parent). 2 ν βήκα Αξρηθνπνίεζε ηεο GUI Γεκηνπξγία ηεο main Δίλαη ζπλήζσο θαιχηεξν λα έρνπκε ην ηκήκα ην θψδηθα ην νπνίν δεκηνπξγεί φια ηα GUI ζηνηρεία(θνπκπί,πεδία θεηκέλνπ ρσξηζηά απφ ηε ινγηθή ηνπ πξνγξάκκαηνο. Γη απηφ έρνπκε δεκηνπξγήζεη ηε κέζνδν initialize(). Με απηή ηε κέζνδν ζα δεκηνπξγήζνπκε φια ηα widgets. Γεκηνπξγνχκε κηα main πνπ εθηειείηαη φηαλ ην πξφγξακκα ηξέρεη απφ ηελ γξακκή εληνιψλ (command-line). ην tkinter δίλνπκε ππφζηαζε ζηελ ηάμε καο (app=myapp_tk()). Γε δίλνπκε γνλέα(parent) (None) επεηδή είλαη ην πξψην GUI ζηνηρείν πνπ ρηίδνπκε. Page 208 of 253

209 4 ν βήκα Loop Kάζε πξφγξακκα ζα θάλεη loop κε ηελ.mainloop () Ση ζεκαίλεη απηό; εκαίλεη φηη θάζε πξφγξακκα ζα θάλεη loop επ 'αφξηζηνλ, πεξηκέλνληαο γηα γεγνλφηα (λα παηήζεη ν ρξήζηεο έλα θνπκπί, ην πάηεκα ησλ πιήθηξσλ, ην ιεηηνπξγηθφ ζχζηεκα λα δεηήζεη έμνδν απφ ηελ εθαξκνγή καο θιπ). Σα Tkinter main loops ζα ιάβνπλ απηά ηα γεγνλφηα θαη ζα ηα ρεηξηζηνχλ αλαιφγσο. Απηή νλνκάδεηαη event-driven programming θιήζε(δπεηδή ην πξφγξακκα δελ ζα θάλεη ηίπνηα, αιιά λα πεξηκέλεη γηα ηα γεγνλφηα, θαη ζα αληηδξά κφλν φηαλ ιακβάλεη έλα γεγνλφο.) Με ηελ εθηέιεζε ηνπ πξνγξάκκαηνο εκθαλίδεηαη έλα άδεην παξάζπξν. Σν θιείλνπκε θαη πεγαίλνπκε ζηνλ θψδηθα γηα λα πξνζζέζνπκε widgets Page 209 of 253

210 5 ν βήκα Layout manager Τπάξρνπλ πνιινί ηξφπνη γηα λα βάινπκε widgets ζε έλα παξάζπξν: κπνξνχκε λα ηα πξνζζέζνπκε απφ ηελ πιεπξά ηεο ζειίδαο νξηδφληηα,θάζεηα θηιπ. Έηζη ππάξρνπλ δηαθνξεηηθέο ηάμεηο (πνπ νλνκάδνληαη layout managersδηαρεηξηζηέο δηάηαμεο) ηθαλέο λα ηνπνζεηήζνπλ ηα widgets ζηα δνρεία κε δηαθνξεηηθνχο ηξφπνπο.μεξηθέο είλαη πην επέιηθηεο απφ άιιεο. ην Tkinter, θαιψληαο self.grid () ζα δεκηνπξγήζνπκε απιά ην δηαρεηξηζηή δηάηαμεο ηνπ δηθηχνπ, θαη ζα πεη ζην παξάζπξν καο λα ην ρξεζηκνπνηήζεη. 6 ν βήκα Πξνζζέηνληαο ηελ είζνδν θεηκέλνπ Γηα λα πξνζζέζνπκε έλα widget,πξέπεη : Αξρηθά δεκηνπξγψ ην widget ην tkinter, δεκηνπξγνχκε ην widget εηζφδνπ σο εμήο (self.entry = Tkinter.Entry ()). εκείσζε εκεηψζηε φηη θξαηάκε κηα αλαθνξά(reference) ζε απηφ ην widget ζηελ ηάμε καο: self.entry = tkinter.entry(self). Απηφ ζπκβαίλεη γηαηί ρξεηάδεηαη λα έρνπκε πξφζβαζε ζε απηφ αξγφηεξα, ζε άιιεο κεζφδνπο. ηε ζπλέρεηα, ην πξνζζέησ ζε έλα layout manager. ην tkinter, θαινχκε ηε κέζνδν.grid() γηα ην widget. Τπνδεηθλχνπκε πνπ ην βάδνπκε ζην grid (column=0, row=0). ηαλ έλα θειί-ζηνηρείν γίλεηαη κεγαιχηεξν απφ ην widget πνπ ην πεξηέρεη, κπνξνχκε λα δεηήζνπκε απφ ην widget γηα λα «θνιιήζεη» ζε θάπνηα άθξα ηνπ θειηνχ. Δμνχ θαη ην «EW». Page 210 of 253

211 (E = αλαηνιηθά (αξηζηεξά), W = West (δεμηά), Ν = Βφξεηνο (επάλσ), S = South (θάησ)). Οξίδνπκε «EW», πνπ ζεκαίλεη φηη ην widget ζα πξνζπαζήζεη λα θνιιήζεη ζηα δχν αξηζηεξά θαη δεμηά άθξα ηνπ θειηνχ ηνπ.(απηφο είλαη έλαο απφ ηνπο ζηφρνπο καο: λα έρνπκε ηελ επέθηαζε εηζαγσγήο θεηκέλνπ φηαλ ην παξάζπξν αιιάδεη κέγεζνο.) Έρνπκε έλα παξάζπξν κε έλα πεδίν θεηκέλνπ ζην νπνίν κπνξνχκε λα πιεθηξνινγήζνπκε θάπνην θείκελν φπσο θαίλεηαη παξαπάλσ. 7 ν βήκα Πξνζζέηνληαο ην θνπκπί (button) Page 211 of 253

212 εκείσζε ε απηή ηελ πεξίπησζε, δελ ηεξνχληαη references ζην θνπκπί (επεηδή δελ ζα δηαβάζνπκε ή ζα ηξνπνπνηήζνπκε ηελ ηηκή[value] ηνπ αξγφηεξα. Αιιάδνληαο ηηο ηηκέο row θαη column κπνξνχκε λα ηξνπνπνηήζνπκε ηελ γξαθηθή αλαπαξάζηαζε ηεο εθαξκνγήο,αιιάδνληαο ηελ δηάηαμε ηνπ πεδίνπ θεηκέλνπ αιιά θαη ηνπ button. Κάλνπκε ηελ ηειηθή καο επηινγή κεηά απφ δνθηκέο θαη βιέπνληαο πσο θαίλεηαη αηζζεηηθά θαιχηεξε ε δηάηαμε ηνπ παξαζχξνπ.γηα παξάδεηγκα δίλνληαο column=0 θαη row=1 πξνθχπηεη : 8 ν βήκα Πξνζζήθε εηηθέηαο-πεξίγξακκα(label) Μπνξνχκε επίζεο λα δεκηνπξγήζνπκε θαη λα πξνζζέζνπκε κηα εηηθέηα. Απηφ είλαη έλα Label Object ζην tkinter. o Γηα ην ρξψκα: Υξεζηκνπνηνχκε κπιέ θείκελν ζε θφθθηλν θφλην. Πην ζπγθεθξηκέλα fg="blue",bg="red" o Γηα ηελ ζηνίρηζε θεηκέλνπ: anchor="w" ζεκαίλεη φηη ην θείκελν ζα πξέπεη λα έρεη αξηζηεξή ζηνίρηζε ζηελ εηηθέηα Page 212 of 253

213 o Γηα ηελ ζέζε ηεο εηηθέηαο ζην πιέγκα(grid): εδψ έρνπκε θαη πάιη ηελ.grid() κέζνδν, αιιά απηή ηε θνξά εθηεηλφκαζηε ζε δχν θειηά (έηζη ψζηε λα εκθαλίδεηαη θάησ απφ ην πεδίν θεηκέλνπ θαη ην θνπκπί.): Απηή είλαη ε columnspan = 2 παξάκεηξνο. o Γηα ηελ επέθηαζε εηηθέηαο (label expansion): Καη πάιη, ρξεζηκνπνηνχκε sticky = "EW". Μέρξη ζηηγκήο έρνπκε πξνζζέζεη 3 widgets ζηελ εθαξκνγή καο! 9 ν βήκα - Δλεξγνπνίεζε αιιαγήο κεγέζνπο (Enable resizing) ε απηφ ην ζεκείν ιέκε ζην δηαρεηξηζηή δηάηαμεο(layout manager) λα αιιάμεη ην κέγεζνο ησλ ζηειψλ θαη ησλ γξακκψλ ηνπ, φηαλ ην παξάζπξν αιιάδεη κέγεζνο. ρη ηηο ζεηξέο,κφλν ηελ πξψηε ζηήιε column(0). Βάδνπκε ζηνλ θψδηθα grid_columnconfigure () εκείσζε ππάξρνπλ πξφζζεηεο παξάκεηξνη. Γηα παξάδεηγκα, θάπνηα ζηήιε κπνξεί λα απμεζεί πεξηζζφηεξν απφ άιιεο, φηαλ αιιάμεη κέγεζνο. Γηα απηφ είλαη ε παξάκεηξνο ηνπ βάξνπο (weight parameter). ε απηή ηελ πεξίπησζε ζέηνπκε απιά weight =1. Page 213 of 253

214 Γνθηκάδνπκε λα αιιάμνπκε κέγεζνο ζην παξάζπξν.παξαηεξνχκε φηη ηα πεδία θεηκέλνπ θαη ε θφθθηλε εηηθέηα αιιάδνπλ θαηάιιεια κέγεζνο θαη πξνζαξκφδνληαη ζην κέγεζνο ηνπ παξαζχξνπ. Γηα λα απνηξέςνπκε ηελ θάζεηε αιιαγή κεγέζνπο ηνπ παξαζχξνπ,ρξεζηκνπνηνχκε.resizable(true,false). Παξαηεξνχκε φηη κε ηελ εθηέιεζε ηνπ πξνγξάκκαηνο δελ κπνξνχκε λα επεθηείλνπκε ην κέγεζνο ηνπ παξαζχξνπ θάζεηα. Page 214 of 253

215 10 ν βήκα - Πξνζζήθε ρεηξηζκνύ ζπκβάλησλ (event handlers) Οη ρεηξηζκνί ζπκβάλησλ (event handlers) είλαη κέζνδνη νη νπνίεο ζα θιεζνχλ φηαλ θάηη ζπκβαίλεη ζην GUI. Έρνπκε δεζκεχζεη ηνπο ρεηξηζκνχο ζπκβάλησλ ζε ζπγθεθξηκέλα widgets γηα ζπγθεθξηκέλα γεγνλφηα κφλν. Άξα πξέπεη λα θάλνπκε θάηη φηαλ παηεζεί ην θνπκπί ή φηαλ παηεζεί ην ENTER ζην πεδίν θεηκέλνπ. o Γεκηνπξγνχκε κηα OnButtonClick() κέζνδν ε νπνία ζα θαιείηαη φηαλ παηάκε ην θνπκπί. Δπίζεο δεκηνπξγνχκε κηα OnPressEnter() κέζνδν, ε νπνία θαιείηαη φηαλ παηάκε ην ENTER ζην πεδίν θεηκέλνπ. o ηε ζπλέρεηα, δεζκεχνπκε απηέο ηηο κεζφδνπο ζηα widgets o Γηα ην θνπκπί απιά ρξεζηκνπνηνχκε command=self.onbuttonclick Γηα ην πεδίν θεηκέλνπ Υξεζηκνπνηνχκε κηα.bind() κέζνδν. <Return> είλαη ην θιεηδί πνπ ζέινπκε λα δεζκεχζνπκε. Η self.onpressenter είλαη ε κέζνδνο πνπ πξνθαιείηαη φηαλ παηάκε ην πιήθηξν ENTER ζην πεδίν θεηκέλνπ. Γεκηνπξγνχκε κηα εηδηθή tkinter κεηαβιεηή (self.labelvariable = Tkinter.StringVar()) Έπεηηα ην δεζκεχππκε ζην widget (textvariable=self.labelvariable) ηε ζπλέρεηα ρξεζηκνπνηνχκε set() ή get() γηα λα νξίζνπκε ή λα δηαβάζνπκε ηηο ηηκέο ηνπ (self.labelvariable.set("παηήζαηε ην θνπκπί!")) Page 215 of 253

216 Κάζε θνξά πνπ ζέινπκε λα δηαβάζνπκε ή λα ζέζνπκε ηηκέο ζε έλα widget (text filed,label,checkbox,radio button θηιπ), πξέπεη λα δεκηνπξγνχκε κηα tkinter κεηαβιεηή ε νπνία ζα δεζκεχεηαη απφ ην widget. Τπάξρνπλ αξθεηνί tkinter ηχπνη κεηαβιεηψλ (StringVar, IntVar, DoubleVar, BooleanVar). Page 216 of 253

217 11 ν βήκα Δκθάληζε ηηκήο ε απηφ ην ζεκείν ζα δηαβάζνπκε ηελ ηηκή ηνπ πεδίνπ θεηκέλνπ θαη ζα ηελ εκθαλίζνπκε ζην θφθθηλν πεξίγξακκα. Θα δεκηνπξγήζνπκε κηα tkinter κεηαβιεηή ηελ self.entryvariable.get(). πσο έρνπκε κηα κεηαβιεηή θεηκέλνπ γηα λα έρνπκε πξφζβαζε ζην πεξηερφκελν ηνπ πεδίν θεηκέλνπ, κπνξνχκε επίζεο λα νξίζνπκε ηελ πξνεπηιεγκέλε ηηκή (("Πιεθηξνινγείζηε θείκελν εδψ...") θαη ("Γεηα!!!") Δθηειψληαο ην πξφγξακκα παξαηεξψ φηη εηζάγνληαο θάπνην θείκελν ζην πεδίν θεηκέλνπ θαη παηψληαο ENTER ή θάλνληαο θιηθ ζην θνπκπί, ην πεξίγξακκα(label) ζα εκθαλίζεη ην θείκελν πνπ πιεθηξνινγήζακε. Page 217 of 253

218 12 ν βήκα Απηόκαηε επηινγή ηνπ πεδίνπ θεηκέλνπ Page 218 of 253

219 o Σν πεδίν θεηκέλν επηιέγεηαη απηφκαηα φηαλ ν ρξήζηεο θάλεη θιηθ ζην θνπκπί ή παηήζεη ENTER, έηζη ψζηε ν ρξήζηεο λα κπνξεί λα πιεθηξνινγήζεη ακέζσο έλα λέν θείκελν(αληηθαζηζηψληαο ην ήδε ππάξρνλ). o Αξρηθά, ζέηνπκε focus ζε απηφ ην ζηνηρείν (focus_set() ή SetFocus()), θαη έπεηηα επηιέγνπκε φιν ην θείκελν (selection_range() ή SetSelection()). Παξαηήξεζε εκεηψλεηαη φηη φηαλ πιεθηξνινγήζνπκε έλα κεγάιν ή πνιχ κηθξφ θείκελν ζην πεδίν θεηκέλνπ θαη παηήζσ ENTER, ην παξάζπξν απηφκαηα κεγαιψλεη ή κηθξαίλεη αληηζηνηρα. Απηφ είλαη αηζζεηηθά σξαίν, αιιά δελ είλαη επηζπκεηή ζπκπεξθνξά ην παξάζπξν ηεο εθαξκνγήο λα κεγαιψλεη θαη λα κηθξαίλεη φιε ηελ ψξα, είλαη θάηη ην νπνίν δελ ζα αξέζεη ζην ρξήζηε. Γηα απηφ κπνξνχκε λα θαζνξίζνπκε ην κέγεζνο ηνπ παξαζχξνπ ζέησληαο σο κέγεζνο ηνπ παξαζχξνπ ην κέγεζφο ηνπ (self.geometry(self.geometry())). Με απηφ ηνλ ηξφπν ην tkinter ζα ζηακαηήζεη λα πξνζπαζεί λα πξνζαξκφδεη ην κέγεζνο ηνπ παξαζχξνπ φιε ηελ ψξα. Drawing in tkinter (ρξώκαηα,ζρήκαηα) Πραγματοποιείται ςτο widget Canvas. Ο Canvas είναι μια υψθλοφ επιπζδου δυνατότθτα ςτα γραφικά του tkinter. Μπορεί να χρθςιμοποιθκεί για τθν δθμιουργία γραφθμάτων,ςφνθκων widgets ι τθν δθμιουργία παιχνιδιϊν. Page 219 of 253

220 Υξώκαηα ( Colors ) Έλα ρξψκα είλαη έλα αληηθείκελν πνπ αληηπξνζσπεχεη έλα ζπλδπαζκφ ηνπ θφθθηλνπ, πξάζηλνπ θαη κπιε (RGB). Παξαζέησ έλα παξάδεηγκα θψδηθα, ζην νπνίν ζρεκαηίδνπκε 3 νξζνγψληα,ηα νπνία γεκίδνπκε κε ρξψκαηα. o Αξρηθά, δεκηνπξγνχκε ην canvas widget canvas = Canvas(self) o ηε ζπλέρεηα, δεκηνπξγνχκε έλα νξζνγψλην ζηνλ θακβά σο εμήο : create_rectangle() canvas.create_rectangle(30, 10, 120, 80, outline="#fb0", fill="#fb0") Οη ηέζζεξηο πξψηεο παξάκεηξνη είλαη νη x,y ζπληεηαγκέλεο ησλ δχν ζεκείσλ νξηνζέηεζεο(ην top-left θαη button-right).με ηελ παξάκεηξν πεξηγξάκκαηνο ειέγρνπκε ην ρξψκα ηνπ πεξηγξάκκαηνο ηνπ νξζνγσλίνπ. Οκνίσο ε παξάκεηξνο γεκίζκαηνο παξέρεη έλα ρξψκα γηα ην εζσηεξηθφ ηνπ νξζνγσλίνπ. Page 220 of 253

221 ρήκαηα ( shapes ) Μπνξνχκε λα ρξεζηκνπνηήζνπκε δηάθνξα ζρήκαηα πάλσ ζηνλ θακβά. ην παξάδεηγκα θψδηθα πνπ αθνινπζεί ζα δνχκε κεξηθά απφ απηά. Παξαηεξήζεηο : Page 221 of 253

222 Έρσ ζρεδηάζεη 5 δηαθνξεηηθά ζρήκαηα ζην παξάζπξν:έλα θχθιν, κηα έιιεηςε, έλα νξζνγψλην,έλα ηφμν θαη έλα πνιχγσλν. Έρσ δψζεη δηαθνξεηηθά ρξψκαηα ζην γέκηζκα θαη ζην πεξίγξακκα ( Σν πιάηνο ηνπ πεξηγξάκκαηνο είλαη 2px. canvas.create_oval(10, 10, 80, 80, outline="red", fill="blue", width=2) Γηα λα ζρεδηάζσ έλα θχθιν, ρξεζηκνπνηψ ηελ κέζνδν create_oval(). Οη ηέζζεξηο πξψηεο παξάκεηξνη είλαη νη ζπληεηαγκέλεο νξηνζέηεζεο ηνπ θχθινπ. Με άιια ιφγηα, είλαη νη x,y ζπληεηαγκέλεο ηνπ top-left θαη bottom-right ζεκείσλ, ζην νπνίν έρεη ζρεδηαζζεί ν θχθινο. canvas.create_rectangle(230, 10, 290, 60, outline="#11f", fill="#f11", width=2) ρεδηάδσ έλα νξζνγψλην. Οη ζπληεηαγκέλεο είλαη θαη πάιη ην πιαίζην νξηνζέηεζεο ηνπ νξζνγσλίνπ πνπ ζα ζρεδηαζζεί. canvas.create_arc(30, 200, 90, 100, start=0, extent=210, outline="#11f", fill="#f11", width=2) Απηφ ην θνκκάηη θψδηθα δεκηνπξγεί έλα ηφμν. Έλα ηφμν είλαη κέξνο ηεο πεξηθέξεηαο ηνπ θχθινπ. Η παξάκεηξνο start είλαη ε γσλία έλαξμεο ηνπ ηφμνπ. Η παξάκεηξνο extent είλαη ην κέγεζνο ηεο γσλίαο. points = [150, 100, 200, 120, 240, 180, 210, 200, 150, 150, 100, 200] canvas.create_polygon(points, outline='black', fill='purple', width=2) ε απηφ ην ζεκείν δεκηνπξγείηαη έλα πνιχγσλν. Δίλαη έλα ζρήκα κε πνιιαπιέο γσλίεο. Γηα λα δεκηνπξγήζνπκε έλα πνιχγσλν ζην tkinter, παξέρνπκε κηα ιίζηα απφ ζπληεηαγκέλεο πνιπγψλνπ ζηελ create_polygon() κέζνδν. Drawing text Θέινπκε λα ζρεδηάζνπκε θάπνηα καζήκαηα ηεο ζρνιήο ζην παξάζπξν. canvas.create_text(20, 30, anchor=w, font="purisa", text="operating Systems") Οη δχν πξψηεο παξάκεηξνη είλαη νη x, y ζπληεηαγκέλεο ηνπ θεληξηθνχ ζεκείνπ ηνπ θεηκέλνπ. Αλ βάινπκε ην ζηνηρείν θεηκέλνπ πξνο ηα δπηηθά, ην θείκελν μεθηλά απφ ηε ζέζε απηή. Η παξάκεηξνο font παξέρεη ηε γξακκαηνζεηξά ηνπ θεηκέλνπ θαη ε παξάκεηξνο text είλαη ην θείκελν πνπ ζα εκθαλίδεηαη. Page 222 of 253

223 Page 223 of 253

224 Python - Multithreading Σν λα ηξέρεηο δηάθνξα λήκαηα είλαη παξφκνην κε ηελ εθηέιεζε πνιιψλ δηαθνξεηηθψλ πξνγξακκάησλ ηαπηφρξνλα, αιιά κε ηηο αθφινπζεο παξνρέο: Πνιιαπιά threads(λήκαηα) κέζα ζε κηα δηαδηθαζία κνηξάδνληαη ηνλ ίδην ρψξν δεδνκέλσλ κε ην θχξην λήκα θαη κπνξνχλ λα κνηξαζηνχλ ζπλεπψο πιεξνθνξίεο ή λα επηθνηλσλήζνπλ κεηαμχ ηνπο πην εχθνια απφ φ, ηη αλ ήηαλ μερσξηζηέο δηαδηθαζίεο. Σα λήκαηα κεξηθέο θνξέο νλνκάδνληαη light-weight δηαδηθαζίεο θαη δελ απαηηνχλ πνιχ κλήκε. Πξνηηκνχληαη απφ ηηο δηεξγαζίεο γηαηί είλαη «θζελφηεξεο». Έλα λήκα (thread) έρεη κηα αξρή, κηα αθνινπζία εθηέιεζεο θη έλα ζπκπέξαζκα. Έρεη έλα δείθηε εληνιψλ (instruction pointer) πνπ παξαθνινπζεί ηελ πνξεία ηνπ ζηα πιαίζηα απηνχ πνπ βξίζθεηαη ζε ιεηηνπξγία. Μπνξεί λα είλαη pre-empted(δηαθφπηεηαη) Μπνξεί πξνζσξηλά λα ηεζεί ζε αλακνλή (επίζεο γλσζηή σο sleeping), ελψ άιια λήκαηα ηξέρνπλ - απηφ νλνκάδεηαη yielding. Ξεθηλώληαο έλα λήκα.. Γηα λα δεκηνπξγήζνπκε έλα άιιν λήκα, ζα πξέπεη λα θιέζνπκε ηελ αθφινπζε κέζνδν πνπ είλαη δηαζέζηκε ζην thread module : thread.start_new_thread ( function, args[, kwargs] ) Page 224 of 253

225 Η θιήζε ηεο κεζφδνπ επηηξέπεη έλα γξήγνξν θαη απνηειεζκαηηθφ ηξφπν γηα λα δεκηνπξγήζνπκε λέα λήκαηα ηφζν ζε Linux φζν θαη ζε Windows. Η θιήζε ηεο κεζφδνπ επηζηξέθεη ακέζσο θαη ην παηδί λήκα (child thread) αξρίδεη θαη θαιεί ηε ζπλάξηεζε κε ηελ πεξαζκέλε ιίζηα ησλ args. ηαλ ε ζπλάξηεζε επηζηξέθεη, ην λήκα ηεξκαηίδεηαη. Δδψ ηα args είλαη κηα πιεηάδα απφ arguments. Υξεζηκνπνηνχκε κηα θελή πιεηάδα γηα λα θαιέζνπκε ηε ζπλάξηεζε ρσξίο λα πθίζηαληαη θαλέλα argument. Σα kwargs είλαη έλα πξναηξεηηθφ ιεμηθφ ησλ arguments ιέμεσλ-θιεηδηψλ. Παξφιν πνπ ν παξαθάησ ηξφπνο είλαη πνιχ απνηειεζκαηηθφο γηα ρακεινχ επηπέδνπ threading, αιιά ην thread module είλαη πνιχ πεξηνξηζκέλν ζε ζχγθξηζε κε ην λεφηεξν module threading ζα δνχκε ακέζσο κεηά. Page 225 of 253

226 Μέηξεζε ρξόλνπ εθηέιεζεο Αξθεηά ζπρλά ζέινπκε λα κεηξήζνπκε ηνλ ρξφλν πνπ παίξλεη έλα ζπγθεθξηκέλν θνκκάηη ηνπ πξνγξάκκαηνο καο έηζη ψζηε λα πάξνπκε ηηο θαηάιιειεο πινπνηεηηθέο απνθάζεηο. Η ρξνλνκέηξεζε φκσο ηεο εθηέιεζεο ελφο πξνγξάκκαηνο είλαη αξθεηά πην πεξίπινθε δηαδηθαζία απφ φ,ηη ίζσο λα θαίλεηαη κε ηελ πξψηε καηηά. Σν λα γξάςνπµε µφλνη µαο µηα ζπλάξηεζε πνπ µεηξάεη ην ρξφλν εθηέιεζεο εµπεξηέρεη αξθεηέο δπζθνιίεο θαζψο είλαη µηα εμαηξεηηθά πεξίπινθε δηαδηθαζία. Γηα παξάδεηγµα, ζηα ζχγρξνλα ππνινγηζηηθά ζπζηήµαηα, ηξέρνπλ πνιιέο εθαξµνγέο παξάιιεια, αμηνπνηψληαο µηθξά θνµµάηηα επεμεξγαζηηθνχ ρξφλνπ. Πφζνο ινηπφλ είλαη ν πξαγµαηηθφο ρξφλνο εθηέιεζεο ηνπ πξνγξάµµαηνο µαο ; Δπίζεο, αλάινγα θαη µε ηνλ ηξφπν µέηξεζεο ηνπ ρξφλνπ µπνξεί λα ππάξρνπλ δηαθνξέο. Τπάξρεη ελδερφµελν λα θαιείηαη ν garbage collector ηελ ζηηγµή πνπ µεηξάµε ηνλ ρξφλν εθηέιεζεο ηνπ πξνγξάµµαηνο, θαη απηφ λα επεξεάδεη ην ζπλνιηθφ ρξφλν.γηα απηνχο θαη γηα άιινπο ιφγνπο, θαιφ είλαη λα έρνπµε έλα εληαίν πεξηβάιινλ µε ην νπνίν παίξλνπµε ηηο µεηξήζεηο ηνλ πξνγξαµµάησλ µαο. Η Python, ζχµθσλα θαη µε ηελ ϕηινζνθία ηεο φηη έξρεηαη µε ηηο µπαηαξίεο λα πεξηέρνληαη ήδε, µαο πξνζθέξεη αλάµεζα ζην ππφινηπν πινχζην ζχλνιν βηβιηνζήθσλ, θαη ην άξζξσµα timeit. Υξεζηµνπνηψληαο ην άπθπυµα timeit, δεµηνπξγείηαη έλα απνµνλσµέλν πεξηβάιινλ, µέζα ζην νπνίν µπνξνχµε λα πάξνπµε εχθνια ηηο µεηξήζεηο µαο. Δπίζεο, ην ζπγθεθξηµέλν άξζξσµα απνθξχπηεη ιεπηνµέξεηεο πνπ αθνξνχλ ηελ πιαηθφξµα ζηελ νπνία εθηειείηαη ν θψδηθαο µαο, παξέρνληαο µαο έλα εληαίν πεξηβάιινλ εξγαζίαο αλεμαξηήησο ιεηηνπξγηθνχ ζπζηήµαηνο. Μπνξνχµε λα ην ρξεζηµνπνηήζνπµε ηφζν µέζα ζηα πξνγξάµµαηα µαο, φζν θαη απφ ηελ δηεπαθή γξαµµήο εληνιψλ. Μέηξεζε Υξόλνπ Δθηέιεζεο Γειώζεσλ Η πην απιή είλαη ε πεξίπησζε φπνπ ζέινπµε λα µεηξήζνπµε µφλν θάπνηεο δειψζεηο θαη φρη νιφθιεξε ζπλάξηεζε. Δδψ δελ ρξεηάδεηαη λα αξρηθνπνηήζνπµε ην πεξηβάιινλ θαη µπνξνχµε απεπζείαο λα ρξνλνµεηξήζνπµε µεηξήζνπµε ηελ απφδνζε ηνπ πξνγξάµµαηνο µαο. Page 226 of 253

227 Αμίδεη λα ζεµεησζεί φηη ε ζπλάξηεζε timeit() ηξέρεη ηνλ θψδηθα ζηνλ νπνίν ζα πάξεη µεηξήζεηο ϕνξέο, επνµέλσο, γηα λα έρνπµε ηα ζσζηά απνηειέζµαηα πξέπεη ηνλ ρξφλν πνπ µαο βγάδεη σο έμνδν ζε δεπηεξφιεπηα λα ηνλ δηαηξνχµε µε ηνλ αξηζµφ ησλ ϕνξψλ πνπ εθηειείηαη. Αλ δελ ρξεηάδεηαη λα εθηειέζνπµε ηφζεο πνιιέο ϕνξέο ηνλ θψδηθα µαο, µπνξνχµε λα θαζνξίζνπµε επαθξηβψο ηνλ αξηζµφ ησλ ϕνξψλ εθηέιεζεο ζέηνληαο ην φξηζµα number ζηελ timeit(). Μέηξεζε Υξόλνπ Δθηέιεζεο πλάξηεζεο Γηα λα µεηξήζνπµε ηνλ ρξφλν εθηέιεζεο, θαηαξράο πξέπεη λα εηζάγνπµε ην άξζξσµα timeit. Ο πην απιφο ηξφπνο γηα λα µεηξήζνπµε ηνλ ρξφλν εθηέιεζεο µηα ζπλάξηεζεο είλαη λα ρξεζηµνπνηήζνπµε έλα αληηθείµελν Timer. ε απηφ ην αληηθείµελν µαο ελδηαθέξνπλ θπξίσο δπν νξίζµαηα. Σν πξψην είλαη νη δειψζεηο (statements) πνπ ζέινπµε λα εθηειέζνπµε ελψ ην δεχηεξν αλαθέξεηαη ζηελ αξρηθνπνίεζε ηνπ πεξηβάιινληνο ζην νπνίν ζα γίλεη ε µέηξεζε. ην παξαθάησ παξάδεηγκα : # νη δχν πξψηνη fibonacci αξηζκνί πνπ είλαη πάληα γλσζηνί a, b = 0, 1 #Βξίζθνπκε ηνπο 20 πξψηνπο fibonacci αξηζκνχο θαη ηνπο ηππψλνπκε for i in range (1, 20): a, b = b, a + b Page 227 of 253

228 Γηα λα µπνξέζνπµε λα εθηειέζνπµε ηελ ζπλάξηεζε fast_function(), πξέπεη λα ηελ εηζάγνπµε απφ ην πεξηβάιινλ ζην νπνίν αλήθεη. Γηα απηφ θαη ην δεχηεξν φξηζµα γηα ηελ αξρηθνπνίεζε ηνπ πεξηβάιινληνο είλαη απαξαίηεην. Πξνθεηµέλνπ λα έρνπµε αμηφπηζηα απνηειέζµαηα, απφ πξνεπηινγή ε ζπλάξηεζε fast_function πνπ ξίζθεηαη µέζα ζηνλ δεµηνπξγφ Timer ζα εθηειεζηεί 106 ϕνξέο, ψζηε λα πάξνπµε πνιιέο µεηξήζεηο θαη λα µελ έρνπµε ιαλζαζµέλα απνηειέζµαηα. Αλ ζέινπµε λα θαζνξίζνπµε θάηη δηαθνξεηηθφ,ζα πξέπεη ξεηά λα ην πξνζδηνξίζνπµε µεηά, θαηά ηε θιήζε t.timeit() φπνπ ζα πξέπεη σο φξηζµα λα εηζάγνπµε ηνλ αξηζµφ ησλ ϕνξψλ πνπ ζέινπµε λα επαλαιεθζεί ε εθηέιεζε ηεο fast_function. Γηα παξάδεηγµα, παξαθάησ ιέπνπµε πσο ζα µπνξνχζαµε λα εθηειέζνπµε ηνλ θψδηθα µφλν 1000 ϕνξέο. t = Timer ( " fast_function ( ) ",\ "from main import fast_function " ) t. timeit (1000) Γηα απηφ ηνλ ιφγν ινηπφλ, θαη ζην αξρηθφ παξάδεηγµα δηαηξνχµε ηνλ ρξφλν πνπ µαο επηζηξέθεηαη µε ην 106, αθνχ ηφζεο είλαη νη ϕνξέο πνπ εθηειείηαη ν θψδηθαο. Δλεξγνπνίεζε garbage collector πσο είπακε θαη παξαπάλσ, γηα αθξηβέζηεξεο µεηξήζεηο, θαηά ηελ εθηέιεζε ηεο µεζφδνπ timeit() απελεξγνπνηείηαη ν garbage collector. Αλ λνµίδνπµε πσο απηφο είλαη θξίζηµνο γηα ηελ αθξηβέζηεξε µέηξεζε ηνπ ρξφλνπ ηεο εθαξµνγήο µαο Page 228 of 253

229 µπνξνχµε λα ηνλ ελεξγνπνηήζνπµε σο αθνινχζσο, ρξεζηµνπνηψληαο ζην φξηζµα πνπ αθνξά ηελ αξρηθνπνίεζε ηνπ πεξηβάιινληνο εθηέιεζεο ην gc.enable(). Δθηέιεζε πλάξηεζεο µε Οξίζµαηα Δλα πην δχζθνιν παξάδεηγµα αθνξά ηελ ρξνλνµέηξεζε ζπλάξηεζεο πνπ δέρεηαη νξίζµαηα.γηα λα θαηαιάβνπµε πσο γίλεηαη απηφ,αο ζθεθζνχµε πξψηα πσο ρξνλνµεηξάηε ε ζπλάξηεζε. Γεµηνπξγείηαη έλα αληηθείµελν Timer() ην νπνίν δεµηνπξγεί έλα απνµνλσµέλν πεξηβάιινλ.γηα λα ην θάλεη απηφ θαιεί ηηο ζπλαξηήζεηο πνπ ππάξρνπλ ζην φξηζµα γηα ηελ αξρηθνπνίεζε απηνχ ηνπ πεξηβάιινληνο. Δπνµέλσο γηα λα εθηειέζνπµε µηα ζπλάξηεζε πνπ δέρεηαη νξίζµαηα, πξέπεη ζην πεξηβάιινλ πνπ δεµηνπξγείηαη λα ππάξρνπλ απηά ηα νξίζµαηα. Γηα απηφ ηνλ ιφγν θαινχµε µηα άιιε ζπλάξηεζε πξψηα ε νπνία επηζηξέθεη ηηο ηηµέο ησλ νξηζµάησλ πνπ ζα ρξεζηµνπνηήζνπµε ζην πεξηβάιινλ, θαη χζηεξα ηηο πεξλάµε ζηελ ζπλάξηεζε ηεο νπνίαο ζέινπµε λα µεηξήζνπµε ηελ απφδνζε. Page 229 of 253

230 Οπσο βιέπνπµε θαη ζην παξαθάησ παξάδεηγµα, µπνξνχµε θάιιηζηα λα έρνπµε πξνθαζνξηζµέλεο ηηµέο ησλ νξηζµάησλ, ή λα δεηάµε απφ ην ρξήζηε ηηο θαηάιιειεο ηηµέο. Γηεπαθή γξαµµήο εληνιώλ Αλ ζέινπµε λα δνθηµάζνπµε πφζν ρξφλν απαηηείηαη γηα ηελ εθηέιεζε ελφο ζπλφινπ δειψζεσλ, έλαο πνιχ γξήγνξνο ηξφπνο, αλ απηφ είλαη θάηη απιφ, είλαη λα ην θάλνπµε µέζα απφ ηε δηεπαθή ηεο γξαµµήο εληνιψλ. Τπάξρεη αληηζηνηρία µε απηά πνπ είδαµε παξαπάλσ, αιιά ην θχξην πνπ ρξεηάδεηαη λα ζπγθξαηήζεη θαλείο είλαη ε µνξθή πνπ ζα έρεη ε δήισζε µαο µέζσ γξαµµήο εληνιψλ θαη ε νπνία αθνινπζεί ην µνηίβν: python -mtimeit -s"setup_commands" "COMMAND_TO_BE_TIMED" Δλα απιφ παξάδεηγµα φπνπ µεηξάµε πφζν ρξφλν παίξλεη ε µεηαηξνπή θάπνησλ αξηζµψλ ζε νθηαδηθφ είλαη ην αθφινπζν, φπνπ µάιηζηα έρνπµε ελεξγνπνηήζεη θαη ηνλ ζσξεπηή απνξξηµάησλ. (Garbage Collector) python -mtimeit -s ' for i in range (10) : oct ( i ) ' ' gc.enable ( ) ' Δμαγσγή µεηξηθώλ (Profiling) Οηαλ πξνζπαζνχµε λα βειηηψζνπµε ηελ ηαρχηεηα µηαο εθαξµνγήο, ζεµαληηθφ φιν παίδεη λα βξνχµε ηα ζεµεία πνπ ηελ θαζπζηεξνχλ ηδηαίηεξα, θαζψο µηα βειηίσζε ζε απηά ζα επέθεξε µεγαιχηεξν θέξδνο. Μάιηζηα, ζηα νηθνλνµηθά ππάξρεη ν φξνο Νφµνο ησλ ϕζίλνπζσλ απνδφζεσλ (Law of diminishing returns). Ο λφµνο απηφο πεξηγξάθεη πσο ε βειηίσζε ελφο ζπγθεθξηµέλνπ παξάγνληα ζα πάςεη λα απνθέξεη θάπνην θέξδνο απφ έλα ζεµείν θαη µεηά, ηνπιάρηζηνλ ζε ζρέζε µε ηνλ θφπν πνπ θαηαβάιιεηαη. Ο ιφγνο είλαη φηη µπνξεί λα ππάξρνπλ θάπνηα άιια ζεµεία πνπ είλαη πην ζεµαληηθά θαη ζα πξέπεη λα επηθεληξψζνπµε ηηο πξνζπάζεηεο µαο ζε απηά. ηνλ πξνγξαµµαηηζµφ, ε δηαδηθαζία πξνζδηνξηζµνχ απηψλ ησλ ζεµαληηθψλ ζεµείσλ νλνµάδεηαη profiling θαη ε Python µαο βνεζάεη µέζσ ηνπ cprofile. Μπνξνχµε λα ην ηξέμνπµε απφ ηελ γξαµµή εληνιψλ δίλνληαο ηνπ σο είζνδν ην πξφγξαµµα πνπ ζέινπµε λα εμεηάζνπµε. Απηφ ζα ηππψζεη σο απνηέιεζµα πφζν ρξφλν παίξλεη ε θάζε ζπλάξηεζε πνπ θαιείηαη. Ο ηξφπνο πνπ µπνξνχµε λα ρξεζηµνπνηήζνπµε απηή ηε ιεηηνπξγία ϕαίλεηαη παξαθάησ: Python -m cprofile filename.py Χο απνηέιεζµα, βιέπνπµε ην ζπλνιηθφ αξηζµφ θιήζεσλ µηαο ζπλάξηεζεο, ζπλνιηθφ ρξφλν εθηέιεζεο, ρξφλν εθηέιεζεο αλά θιήζε θαη άιια. Page 230 of 253

231 The Python Profilers Δηζαγσγή ζηνπο Profilers Σν cprofile θαη ην profile παξέρνπλ ληεηεξκηληζηηθφ profiling ησλ πξνγξακκάησλ Python. Έλα πξνθίι(profile) είλαη έλα ζχλνιν ζηαηηζηηθψλ πνπ πεξηγξάθεη πφζν ζπρλά θαη γηα πφζν ρξφλν εθηεινχληαη δηάθνξα κέξε ηνπ πξνγξάκκαηνο. Οη ζηαηηζηηθέο απηέο κπνξνχλ λα κνξθνπνηνχληαη ζε αλαθνξέο(reports) κέζσ ηνπ pstats module. Η πξφηππε βηβιηνζήθε ηεο Python παξέρεη ηξεηο δηαθνξεηηθέο πινπνηήζεηο ηεο ίδηαο δηεπαθήο πξνθίι: 1. cprofile, ζπληζηάηαη γηα ηνπο πεξηζζφηεξνπο ρξήζηεο.δίλαη κηα επέθηαζε ηεο C κε ινγηθή επηβάξπλζε πνπ ην θαζηζηά θαηάιιειν γηα profiling long-running πξνγξακκάησλ. Βαζίδεηαη ζην lsprof (Brett Rosen θαη Σed Czotter). 2. profile, έλα θαζαξφ Python module ηνπ νπνίνπ δηεπαθή είλαη απνκίκεζε ηνπ cprofile, αιιά ε νπνία πξνζζέηεη ζεκαληηθή επηβάξπλζε ζηα profiled πξνγξάκκαηα. Δάλ πξνζπαζείηε λα επεθηείλεηε ην profiler θαηά θάπνην ηξφπν, ην ζα κπνξνχζε λα είλαη πην εχθνιε κε απηφ ην module.άιιαμε ζηελ έθδνζε 2.4 Σψξα αλαθέξεη επίζεο ην ρξφλν πνπ δαπαλάηαη ζε θιήζεηο πξνο ελζσκαησκέλεο ζπλαξηήζεηο θαη κεζφδνπο. 3. hotshot, ήηαλ κηα πεηξακαηηθή κνλάδα(module) ηεο C, πνπ επηθεληξψζεθε ζηελ ειαρηζηνπνίεζε ησλ overhead profiling, ζε βάξνο ησλ κεγαιχηεξνπ κήθνπο δεδνκέλσλ κεηάεπεμεξγαζίαο (post-processing). Γελ δηαηεξείηαη πιένλ θαη κπνξεί λα ππαξμεη ζε κειινληηθή έθδνζε ηεο Python.Άιιαμε ζηελ έθδνζε 2.5 Σα απνηειέζκαηα ζα πξέπεη λα είλαη πην νπζηαζηηθά απφ φ, ηη ζην παξειζφλ: ν ππξήλαο ρξνληζκνχ (timing core) πεξηείρε έλα θξίζηκν bug (critical bug). Σα profile θαη cprofile modules εμάγνπλ ην ίδην interface, έηζη ψζηε λα είλαη σο επί ην πιείζηνλ ελαιιάμηκα. Σν cprofile είλαη λεφηεξν θαη ελδέρεηαη λα κελ είλαη δηαζέζηκν ζε φια ηα ζπζηήκαηα.σν cprofile είλαη πξαγκαηηθά έλα ζηξψκα ζπκβαηφηεηαο ζηελ θνξπθή ηεο εζσηεξηθήο κνλάδαο _lsprof. Η hotshot κνλάδα(module) πξννξίδεηαη γηα εμεηδηθεπκέλε ρξήζε. Οι μονάδεσ profiler (profile modules) ζχουν ςχεδιαςτεί για να παρζχουν ζνα προφίλ εκτζλεςθσ για ζνα ςυγκεκριμζνο πρόγραμμα, όχι για ςκοποφσ ςυγκριτικισ αξιολόγθςθσ (γι 'αυτό, πάρχει timeit για αρκετά ακριβι αποτελζςματα). Αυτό ιςχφει ιδιαίτερα για τθ ςυγκριτικι αξιολόγθςθ Python κϊδικα και κϊδικα C: οι profilers ειςαγάγουν γενικά(overhead) για τον κϊδικα Python, αλλά όχι για C-επιπζδου ςυναρτιςεισ, και ζτςι ο κϊδικασ C κα φαίνεται πιο γριγοροσ από κάκε ζνα κϊδικα Python. Page 231 of 253

232 Γηα λα θάλνπκε profile ζε κηα ζπλάξηεζε πνπ παίξλεη κνλφ argument, ζα πξέπεη λα θάλνπκε ην εμήο: Χρθςιμοποιοφμε profile αντί cprofile, αν το τελευταίο δεν είναι διακζςιμο ςτο ςφςτθμά μασ. Page 232 of 253

233 Αλάιπζε απνηειεζκάησλ Η πξψηε γξακκή δείρλεη φηη 197 θιήζεηο ειέγρζεθαλ. Απφ απηέο ηηο θιήζεηο,νη 192 ήηαλ αξρέγνλεο(primitive),πξάγκα πνπ ζεκαίλεη φηη ε θιήζε δελ πξνθαιείηαη κέζσ αλαδξνκήο. Η επφκελε γξακκή Ordered by: πξφηππν φλνκα, δειψλεη φηη ε ζπκβνινζεηξά θεηκέλνπ ζηε δεμηά ζηήιε ρξεζηκνπνηήζεθε γηα λα ηαμηλνκήζνπκε ηελ έμνδν. Οη επηθεθαιίδεο ησλ ζηειψλ πεξηιακβάλνπλ: o ncalls γηα ηνλ αξηζκφ ησλ θιήζεσλ o tottime γηα ην ζχλνιηθφ ρξφλν πνπ δαπαλάηαη ζηελ ζπγθεθξηκέλε ιεηηνπξγία (θαη κε εμαίξεζε ην ρξφλν πνπ γίλνληαη θιήζεηο πξνο ππνιεηηνπξγίεο) o percall είλαη ην πειίθν tottime/ncalls o filename:lineno(function) παξέρεη ηα ζρεηηθά δεδνκέλα ηεο θάζε ιεηηνπξγίαο ηαλ ππάξρνπλ δχν αξηζκνί ζηελ πξψηε ζηήιε (γηα παξάδεηγκα 3/1),ζεκαίλεη φηη ε ιεηηνπξγία είλαη recursed(αλαδξνκηθή). Η δεχηεξε ηηκή είλαη ν αξηζκφο ησλ πξσηφγνλσλ θιήζεσλ θαη ε πξψηε είλαη ν ζπλνιηθφο αξηζκφο ησλ θιήζεσλ. εκεηψλνπκε φηη, φηαλ ε ιεηηνπξγία δελ ιεηηνπξγεί αλαδξνκηθά, νη δχν απηέο ηηκέο είλαη νη ίδηεο, θαη κφλν ην εληαίν ζρήκα(single figure) εθηππψλεηαη. Αληί γηα ηελ εθηχπσζε ηεο εμφδνπ, κπνξνχκε λα απνζεθεχζνπκε ηα απνηειέζκαηα ζε έλα αξρείν, θαζνξίδνληαο έλα φλνκα αξρείνπ ζηελ run()function: import cprofile import re cprofile.run('re.compile("foo bar")', 'restats') Η ηάμε pstats.stats δηαβάδεη ηα απνηειέζκαηα πξνθίι απφ έλα αξρείν θαη ηα δηακνξθψλεη κε δηάθνξνπο ηξφπνπο. Σν αξρείν cprofile κπνξεί επίζεο λα ρξεζηκνπνηεζεί σο έλα ζελάξην(script) ζην πξνθίι άιινπ ζελαξίνπ. Γηα παξάδεηγκα: python -m cprofile [-o output_file] [-s sort_order] myscript.py -o γξάθεη ηα απνηειέζκαηα ηνπ πξνθίι ζε έλα αξρείν αληί γηα ηελ θαλνληθή έμνδν -s θαζνξίδεη κηα απφ ηηο sort_stats() ηηκέο ηαμηλφκεζεο ζηελ ηαμηλφκεζε ηεο εμφδνπ. Απηφ ηζρχεη κφλν φηαλ ην -o δελ παξέρεηαη. Page 233 of 253

234 Σν pstats module ηεο Stats ηάμεο έρεη κηα πνηθηιία κεζφδσλ γηα ην ρεηξηζκφ θαη ηελ εθηχπσζε ησλ δεδνκέλσλ πνπ απνζεθεχνληαη ζε έλα αξρείν απνηειεζκάησλ πξνθίι (profile results file): import pstats p = pstats.stats('restats') p.strip_dirs().sort_stats(-1).print_stats() Η strip_dirs () κέζνδνο αθαηξεί ηελ εμσηεξηθή δηαδξνκή απφ φια ηα νλφκαηα ησλ modules. Η sort_stats () κέζνδνο ηαμηλφκεί φιεο ηηο θαηαρσξήζεηο ζχκθσλα κε ην πξφηππν κνλάδα / ζεηξά / φλνκα ζπκβνινζεηξάο πνπ εθηππψλεηαη. Η κέζνδνο print_stats () εθηππψλεη φια ηα ζηαηηζηηθά ζηνηρεία. Μπνξείηε λα δνθηκάζεηε ηηο παξαθάησ θιήζεηο ηαμηλφκεζεο: p.sort_stats('name') p.print_stats() Η πξψηε θιήζε ζα ηαμηλνκήζεη ηε ιίζηα κε βάζε ην φλνκα ηεο ιεηηνπξγίαοζπλάξηεζεο θαη ε δεχηεξε θιήζε ζα εθηππψζεη ηα ζηαηηζηηθά ζηνηρεία. Παξαθάησ ζα δνχκε κεξηθέο ελδηαθέξνληεο θιήζεηο κε ηηο νπνίεο ζα πεηξακαηηζηνχκε: p.sort_stats('cumulative').print_stats(10) Απηφ ηαμηλνκεί ην πξνθίι απφ ην ζπλνιηθφ ρξφλν ζε κηα ιεηηνπξγία, θαη ζηε ζπλέρεηα εθηππψλεη κφλν ηηο δέθα πην ζεκαληηθέο γξακκέο. Αλ ζέιεηε λα θαηαιάβεηε ηη αιγφξηζκνη παίξλνπλ ρξφλν, ε παξαπάλσ γξακκή είλαη απηφ πνπ ζα ρξεζηκνπνηήζεηε. Αλ ςάρλνπκε λα δνχκε ηη ιεηηνπξγίεο θάλνπλ loop, θαη θαηαιακβάλνπλ πνιχ ρξφλν, ζα θάλνπκε : p.sort_stats('time').print_stats(10) γηα λα ηαμηλνκήζεηε αλάινγα κε ην ρξφλν πνπ δαπαλήζεθε ζε θάζε ιεηηνπξγία, θαη ζηε ζπλέρεηα λα εθηππψζεηε ηα ζηαηηζηηθά ζηνηρεία γηα ηηο δέθα θνξπθαίεο ιεηηνπξγίεο. Μπνξείηε επίζεο λα δνθηκάζεηε: p.sort_stats('file').print_stats(' init ') Απηφ ζα ηαμηλνκήζεη φια ηα ζηαηηζηηθά ζηνηρεία κε βάζε ην φλνκα αξρείνπ, θαη ζηε ζπλέρεηα ζα εθηππψζεη ζηαηηζηηθά ζηνηρεία κφλν γηα ηελ θαηεγνξία ησλ κεζφδσλ init Page 234 of 253

235 (δεδνκέλνπ φηη γξάθεηαη κε init ζε απηά). Χο έλα ηειεπηαίν παξάδεηγκα, ζα κπνξνχζαηε λα δνθηκάζεηε: p.sort_stats('time', 'cum').print_stats(.5, 'init') Απηή ε γξακκή ηαμηλνκεί ηα ζηαηηζηηθά ζηνηρεία κε έλα πξσηεχνλ θιεηδί ηνπ ρξφλνπ, θαη έλα δεπηεξεχνλ θιεηδί ηνπ ζπλνιηθνχ ρξφλνπ, θαη κεηά εθηππψλεη κεξηθά απφ ηα ζηαηηζηηθά. Πην ζπγθεθξηκέλα, ε ιίζηα είλαη ε πξψηε πνπ επηιέγεηαη κέρξη θαη ην 50% (re:.5) ηνπ αξρηθνχ κεγέζνπο ηνπ, έπεηηα κφλν νη γξακκέο πνπ πεξηέρνπλ init δηαηεξνχληαη, θαη απηή ε ππν-ππν-ιίζηα ζα εθηππσζεί. profile and cprofile Module Reference Σφζν ην profile φζν θαη ην cprofile module παξέρνπλ ηηο αθφινπζεο ιεηηνπξγίεο: profile.run(command, filename=none, sort=-1) Απηή ε ζπλάξηεζε ιακβάλεη έλα κφλν argument πνπ κπνξεί λα πεξάζεη ζηελ exec() ζπλάξηεζε,θαη έλα πξναηξεηηθφ φλνκα αξρείνπ. ε φιεο ηηο πεξηπηψζεηο, απηή ε ξνπηίλα εθηειεί: exec(command, main. dict, main. dict ) θαη ζπγθεληξψλεη ζηαηηζηηθά ζηνηρεία ηνπ profiling απφ ηελ εθηέιεζε.δάλ δελ ππάξρεη ην φλνκα ηνπ αξρείνπ είλαη, ηφηε απηή ε ιεηηνπξγία δεκηνπξγεί απηφκαηα έλα Stats ζηηγκηφηππν θαη εθηππψλεη κηα απιή έθζεζε-αλαθνξά ηνπ profiling. Δάλ ε ηηκή ηαμηλφκεζεο θαζνξίδεηαη,απηφ πεξλάεη ζε απηφ ην Stats instance γηα λα γίλεη έιεγρνο πψο ηαμηλνκνχληαη ηα απνηειέζκαηα. profile.runctx(command, globals, locals, filename=none) Απηή ε ζπλάξηεζε είλαη παξφκνηα κε ηελ run(), κε πξφζζεηα arguments γηα ηελ πξνκήζεηα ησλ θαζνιηθψλ θαη ηνπηθψλ ιεμηθψλ γηα ηελ εληνιή string. Απηή ε ξνπηίλα εθηειεί: exec(command, globals, locals) θαη ζπγθεληξψλεη ζηαηηζηηθέο profiling φπσο ε run() ζπλάξηεζε παξαπάλσ. classprofile.profile(timer=none,timeunit=0.0,subcalls=true, builtins=true) Η ηάμε απηή ζπλήζσο ρξεζηκνπνηείηαη κφλν αλ απαηηείηαη αθξηβέζηεξνο έιεγρνο ζρεηηθά κε ην profiling, απ φηη ε cprofile.run() ζπλάξηεζε παξέρεη. Page 235 of 253

236 Έλα ζχλεζεο ρξνλφκεηξν κπνξεί λα παξέρεηαη γηα ηε κέηξεζε πφζνπ ρξφλνπ ρξεηάδεηαη ν θψδηθαο γηα λα ηξέμεη κέζσ ηνπ ρξνλνκέηξνπ argument. Απηφ πξέπεη λα είλαη κηα ζπλάξηεζε πνπ επηζηξέθεη έλαλ αξηζκφ πνπ αληηπξνζσπεχεη ηελ ηξέρνπζα ψξα.δάλ ν αξηζκφο είλαη έλαο αθέξαηνο, ν timeunit θαζνξίδεη έλαλ πνιιαπιαζηαζηή πνπ θαζνξίδεη ηελ δηάξθεηα ηεο θάζε κνλάδαο ηνπ ρξφλνπ. Γηα παξάδεηγκα, εάλ ην ρξνλφκεηξν επηζηξέθεη ρξφλνπο πνπ κεηξνχληαη ζε ρηιηάδεο δεπηεξφιεπηα, ε κνλάδα ρξφλνπ ζα είλαη.001. Άκεζα ρξεζηκνπνηψληαο ηελ Profile ηάμε ζαο επηηξέπεη λα επεμεξγάδεζηε ηα απνηειέζκαηα πξνθίι ρσξίο λα γξάςεηε ηα δεδνκέλα πξνθίι ζε έλα αξρείν: import cprofile, pstats, io pr = cprofile.profile() pr.enable()... do something... pr.disable() s = io.stringio() ps = pstats.stats(pr, stream=s) ps.print_results() o enable() : μεθηλάεη ηε ζπιινγή δεδνκέλσλ πξνθηι (profiling data) o disable() : ζηακαηά ηε ζπιινγή δεδνκέλσλ πξνθηι o create_stats() : ζηακαηά ηε ζπιινγή δεδνκέλσλ πξνθηι θαη θαηαγξάθεη ηα απνηειέζκαηα εζσηεξηθά σο ην ηξέρνλ πξνθίι o print_stats() : Γεκηνπξγεί έλα αληηθείκελν Stats κε βάζε ην ηξέρνλ πξνθηι θαη εθηππψλεη ηα απνηειέζκαηα ζηελ έμνδν o dump_stats() : γξάθεη ηα απνηειέζκαηα ηνπ ηξέρνληνο πξνθηι ζην φλνκα αξρείνπ o run(cmd) : πξνθηι ηνπ cmd κέζσ exec() o runctx(cmd,globals,locals) : πξνθίι ηνπ cmd κέζσ exec() κε ην θαζνξηζκέλν θαζνιηθφ θαη ηνπηθφ πεξηβάιινλ o runcall(func, *args, **kwargs) : profile func((*args, **kwargs) Page 236 of 253

237 Απνζθαικάησζε Γελ είλαη ιίγεο νη ϕνξέο πνπ θαινχµαζηε λα αληηµεησπίζνπµε µηα ηδηάδνπζα πεξίπησζε ζην πξφγξαµµα µαο, ε νπνία φµσο μεθεχγεη απφ ηνλ απζηεξφ ζηφρν φζνλ αθνξά ην πξφβιεµα πνπ έρνπµε λα ιχζνπµε θαη έρεη λα θάλεη θπξίσο µε ηελ δηαρεηξηζηηθή επίιπζε πεξηπηψζεσλ φπσο ε απνπζία ελφο αξρείνπ. Δίδε ζθαιµάησλ πληαθηηθά ζθάιµαηα Σν ζπληαθηηθφ αλαθέξεηαη ζηε δνµή ελφο πξνγξάµµαηνο θαη ζηνπο θαλφλεο απηήο. Δλα πξφγξαµµα πνπ δελ ηεξεί ην ζπληαθηηθφ ηεο γιψζζαο δελ µπνξεί λα εθηειεζηεί. Αλ πξνζπαζήζνπµε λα εθηειέζνπµε έλα πξφγξαµµα πνπ παξαβηάδεη απηνχο ηνπο θαλφλεο, ν δηεξµελέο ή ν µεηαθξαζηήο ζα παξαπνλεζνχλ γηα ζπληαθηηθά ιάζε. Απηφ ην είδνο πξνβιεµάησλ είλαη θαη ηα πην απιά ζρεηηθά θαη µε ηηο ηξεηο θαηεγνξίεο, γηαηί ν δηεξµελεπηήο ή ν µεηαγισηηηζηήο µπνξεί λα µαο ελεµεξψζεη ζε πνηα γξαµµή αθξηβψο εληνπίδεηαη ην ζθάιµα. θάιµαηα ρξόλνπ εθηέιεζεο Σα ζθάιµαηα ρξφλνπ εθηέιεζεο (run time errors) εµθαλίδνληαη µφλν ζηελ εθηέιεζε ηνπ πξνγξάµµαηνο µαο γηαηί έρεη ζπµβεί θάηη εμαηξεηηθφ (ηειείσζε ε µλήµε, δελ έγηλε ζσζηφο ρεηξηζµφο µηαο εμαίξεζεο θνθ). Λνγηθά ζθάιµαηα Απηά είλαη ηα ζθάιµαηα πνπ ελψ εθηειείηαη ην πξφγξαµµα µαο, παξάγνληαη δηαθνξεηηθά απφ ηα επηζπµεηά απνηειέζµαηα. Απνηεινχλ ηελ δπζθνιφηεξε θαηεγνξία ζθαιµάησλ. Αλ ν ππνινγηζηήο µαο µπνξνχζε λα ηα δηνξζψζεη, ζα µπνξνχζε λα πξνγξαµµαηίζεη θαη µφλνο ηνλ εαπηφ ηνπ! Python Debugger Δλα απφ ηα πην ρξήζηµα εξγαιεία γηα ηελ ζπγγξαθή ελφο πξνγξάµµαηνο µεζαίνπ ή µεγαιχηεξνπ µεγέζνπο είλαη έλαο debugger. Η Python έρεη έλαλ debugger ν νπνίνο είλαη δηαζέζηµνο µε ηελ µνξθή ελφο module, ηνπ pdb. πλήζσο, νη µφλεο ζηηγµέο πνπ ρξεζηµνπνηνχµε θάπνηνλ debugger είλαη φηαλ θάηη πεγαίλεη ζηξαβά θαη νη ζπλεζηζµέλεο µαο ηαθηηθέο (print, log messages) αδπλαηνχλ λα βξνπλ ηε ξίδα ηνπ πξνβιήµαηνο. Δπηπρψο γηα εµάο, ε Python πεξηιαµβάλεη ζηελ βαζηθή ηεο βηβιηνζήθε έλαλ δηαδξαζηηθφ απνζθαιµαησηή (debugger). Page 237 of 253

238 Γηα λα ρξεζηµνπνηήζνπµε ηνλ debugger, πξέπεη λα εηζάγνπµε ην θαηάιιειν άξζξσµα : import pdb Ο δηαδξαζηηθφο debugger εθηειεί ηνλ θψδηθα µε έλαλ ειεγρφµελν ηξφπν. Δπηηξέπεη αλάµεζα ζε άιια λα : Δμεηάδνπµε έλα θνµµάηη θψδηθα αλά γξαµµή θάζε ϕνξά. Καινχµε θαη λα επηζηξέθνπµε απφ ζπλαξηήζεηο. Οξίδνπµε ζεµεία δηαθνπήο ξνήο ηνπ πξνγξάµµαηνο (breakpoints). Υξεζηµνπνηνχµε απεπζείαο ηελ δχλαµε ηνπ θειχθνπο ηεο Python. Βεµαηηθή εθηέιεζε πξνγξάκκαηνο Γηα ηελ βεµαηηθή εθηέιεζε ηνπ πξνγξάµµαηνο, ρξεζηµνπνηνχµε ηελ ζπλάξηεζε pdb.set_trace(): Απφ ην ζεµείν φπνπ ρξεζηµνπνηείηαη ε pdb.set_trace(), εθηεινχµε ηελ επφµελε δήισζε µέζσ ηεο εληνιήο n ζην δηαδξαζηηθφ θέιπθνο πνπ παξνπζηάδεηαη µεηά ηελ εθηέιεζε ηνπ πξνγξάµµαηνο. Μεηά ηελ πξψηε ϕνξά πνπ ρξεζηµνπνηνχµε ην n, µπνξνχµε λα εθηεινχµε θάζε ϕνξά ηελ επφµελε δήισζε παηψληαο ην πιήθηξν enter θαζψο έηζη επαλαιαµβάλεηαη ε ηειεπηαία εληνιή απνζθαιµάησζεο. Page 238 of 253

239 Γηα επηζηξέςνπµε απφ ην πεξηβάιινλ ηνπ debugger ρξεζηµνπνηνχµε ην q πνπ ηεξµαηίδεη ηνλ debugger ή ην c πνπ επηηξέπεη ηελ θαλνληθή ζπλέρηζε ηεο εθηέιεζεο ηνπ πξνγξάµµαηνο. πλαξηήζεηο Οπνηε πξνρσξάµε πξνο ηελ επφµελε πξνο εθηέιεζε εληνιή µε ην n, ηφηε ν debugger ζπµπεξηθέξεηαη ζε θάζε δήισζε µε ηνλ ίδην ηξφπν, αλεμάξηεηα αλ θαιεί θάπνηα ζπλάξηεζε ή φρη. Αλ λνµίδνπµε πσο ην πξφβιεµα βξίζθεηαη εληφο θάπνηαο ζπλάξηεζεο ηφηε µπνξνχµε λα πξνρσξάµε µε ην s. Η ζςµπεπιθοπά ηος είναι ακπιβώρ η ίδια µε ηο n, µε ηελ εμαίξεζε φηη µφιηο ζπλαληά µηα ζπλάξηεζε πνπ έρνπµε γξάςεη εµείο, ηφηε ζπλερίδεηαη ε βεµαηηθή εθηέιεζε γηα θάζε γξαµµή ηνπ θψδηθα απηήο ηεο ζπλάξηεζεο. Αλ ζέινπµε λα επηζηξέςνπµε απφ µηα ζπλάξηεζε πνπ θνηηάµε βεµαηηθά µέζσ ηεο s, ηφηε µπνξνχµε λα ρξεζηµνπνηήζνπµε ηελ r. Με απηή, ζπλερίδεηαη ε εθηέιεζε ηνπ θψδηθα ρσξίο δηαθνπή µέρξη ηελ δήισζε return ηεο ζπγθεθξηµέλεο ζπλάξηεζεο (ή µέρξη ην ηέινο ηεο αλ απηή ε δήισζε απνπζηάδεη). Πνιχ ρξήζηµεο είλαη νη εληνιέο l θαη p. Με ηελ l µπνξνχµε λα δνχµε ηηο επφµελεο γξαµµέο ηνπ θψδηθα απφ ην ζεµείν ζην νπνίν βξηζθφµαζηε, ελψ µε ηελ p αθνινπζνχµελε απφ ην φλνµα µηαο µεηαβιεηήο, µπνξνχµε λα ηππψζνπµε ηα πεξηερφµελα ηεο. Δπηπξφζζεηα ζε απηά, παπέσεηαι η δςναηόηηηα να γπάτοςµε απεςθείαρ κώδικα ζε Python µέζα από ηο πεπιβάλλον ηος αποζθαλµαηυηή. Δηζη, µπνξνχµε γξήγνξα λα ζέζνπµε ηηµέο ζε µεηαβιεηέο ψζηε λα δνχµε αλ φλησο απηέο επζχλνληαη γηα θάπνην ζθάιµα ψζηε λα ην δηνξζψζνπµε ζηελ ζπλέρεηα, ή µπνξνχµε λα δνθηµάζνπµε απεπζείαο ηελ ιχζε πνπ λνµίδνπµε φηη ζα ιχζεη ην πξφβιεµα ρσξίο λα ρξεηάδεηαη λα αλαηξέρνπµε ζην αξρείν ηνπ πεγαίνπ θψδηθα γηα ιίγεο γξαµµέο µφλν θαη µφλν γηα λα δνθηµάζνπµε ηελ ιχζε µαο. Αλ ηχρεη θαη έρεηε νλνµάζεη θάπνηα µεηαβιεηή ζαο µε έλα φλνµα πνπ αληηζηνηρεί ζε θάπνηα εληνιή, ηφηε µάιινλ ζα αληηµεησπίζεηε πξνβιήµαηα µε ηελ ζπγγξαθή θψδηθα απεπζείαο ζε Python. Γηα λα ην απνθχγεηε ινηπφλ, µπνξείηε λα αξρίζεηε ηηο εληνιέο ζαο µε έλα ζαπµαζηηθφ (!) ππνδειψλνληαο έηζη ζηνλ debugger φηη ε πξνο εθηέιεζε εληνιή είλαη Python θαη φρη άµεζε εληνιή πξνο ηνλ ίδην. Page 239 of 253

240 Ο πίλαθαο πνπ παξαηίζεηαη παξαθάησ παξνπζηάδεη ζπλνπηηθά ηηο βαζηθέο ιεηηνπξγίεο πνπ µπνξνξχµε λα επηηειέζνπµε ζηνλ debugger. Δληνιή Import pdb pdb.set_trace() <Enter> Q P C L S R Λεηηνπξγηθφηεηα Δηζαγσγή αξζξψκαηνο debugger Δθθίλεζε απνζθαικαησηή Δπαλάιεςε ηειεπηαίαο εληνιήο Έμνδνο (quit) Δθηχπσζε ηηκήο κεηαβιεηήο (print) πλέρηζε θαλνληθήο εθηέιεζεο (continue) Δθηχπσζε πξνο εθηέιεζε θψδηθα(listing) Βεκαηηθή εθηέιεζε ππνξνπηίλαο(step into) Δπηζηξνθή απφ ππνξνπηίλα (return) GCI Programming Η Common Interface Gateway, ή CGI, είλαη έλα ζχλνιν θαλφλσλ πνπ θαζνξίδεη ηνλ ηξφπν κε ηνλ νπνίν αληαιιάζζνληαη πιεξνθνξίεο κεηαμχ ηνπ web server θαη έλα ζχλεζνπο ζελαξίνπ. Σα CGI specs ζήκεξα ζπληεξνχληαη απφ ηελ NCSA θαη ε NCSA νξίδεη ηε CGI έρεη σο εμήο: Η Common Interface Gateway, ή CGI, είλαη έλα πξφηππν γηα εμσηεξηθέο πχιεο πξνγξακκάησλ γηα ηε δηαζχλδεζε κε servers πιεξνθνξηψλ, φπσο νη HTTP servers. Web Browsing Γηα λα θαηαλνήζνπκε ηελ έλλνηα ηεο CGI, αο δνχκε ηη ζπκβαίλεη φηαλ θάλνπκε θιηθ ζε έλαλ ππεξζχλδεζκν γηα λα αλαδεηήζνπκε κηα ζπγθεθξηκέλε ηζηνζειίδα ή URL. o Ο πεξηεγεηήο (browser)καο επηθνηλσλεί κε ηνλ HTTP web server θαη δεηά ην URL ie.filename. o Ο δηαθνκηζηήο Web ζα αλαιχζεη ηε δηεχζπλζε URL θαη ζα ςάμεη γηα ην φλνκα ηνπ αξρείνπ, εάλ εληνπίζεη απηφ ην αξρείν,ην ζηέιλεη πίζσ ζηνλ browser δηαθνξεηηθά ζηέιλεη έλα κήλπκα ζθάικαηνο πνπ ππνδεηθλχεη φηη έρνπκε δήηήζεη έλα ιάζνο αξρείν. o O Web Browser παίξλεη απάληεζε απφ ηνλ web server θαη εκθαλίδεη είηε ην αξρείν πνπ έρεη ιεθζεί είηε κήλπκα ιάζνπο. Page 240 of 253

241 Χζηφζν, είλαη δπλαηφ λα εγθαζηδξχζεηε ηνλ HTTP server, έηζη ψζηε θάζε θνξά πνπ έλα αξρείν ζε έλα ζπγθεθξηκέλν θαηάινγν θάλεη αίηεκα φηη ην αξρείν δελ έρεη απνζηαιεί πίζσ. Αλη'απηνχ εθηειείηαη σο πξφγξακκα θαη φπνηα θη αλ είλαη ε έμνδνο ηνπ πξνγξάκκαηνο, απνζηέιιεηαη πίζσ ζηνλ browser καο γηα λα εκθαληζηεί. Απηή ε ιεηηνπξγία νλνκάδεηαη Common Gateway Interface ή CGI θαη ηα πξνγξάκκαηα νλνκάδνληαη CGI scripts. Απηά ηα CGI πξνγξάκκαηα κπνξεί λα είλαη έλα Python script, έλα Perl Script, Shell Script, C ή C + + πξφγξακκα θιπ. Γηάγξακκα CGI Αξρηηεθηνληθήο (CGI Architecture Diagram) Τπνζηήξημε θαη Γηακόξθσζε Web Server (Web Server Support & Configuration) Πξηλ πξνρσξήζνπκε κε ηνλ CGI πξνγξακκαηηζκφ, πξέπεη λα βεβαησζνχκε φηη ν Web Server καο ππνζηεξίδεη CGI θαη έρεη ξπζκηζηεί γηα λα ρεηξίδεηαη πξνγξάκκαηα CGI. ια ηα CGI πξνγξάκκαηα γηα λα εθηειεζηνχλ απφ ηνλ εμππεξεηεηή HTTP, θπιάζζνληαη ζε έλα πξνξπζκηζκέλν θαηάινγν. Απηφο ν θαηάινγνο νλνκάδεηαη CGI Directory θαη θαηά ζπλζήθε, απηφ νλνκάδεηαη σο / var / www / cgi-bin. Καηά ζχκβαζε ηα αξρεία CGI ζα έρνπλ σο επέθηαζε.cgi, αιιά κπνξνχκε λα θξαηήζνπκε ηα αξρεία καο κε ηελ επέθηαζε python (.py). Απφ πξνεπηινγή, ην Linux server έρεη ξπζκηζηεί λα ηξέρεη κφλνλ ηα ζελάξηα ζηνλ θαηάινγν cgi-bin in / var / www. Δάλ ζέινπκε λα θαζνξίζνπκε νπνηνδήπνηε άιιν θαηάινγν γηα λα ηξέμνπλ CGI scripts καο, ζα πξέπεη λα ζρνιηάζνπκε ηηο αθφινπζεο γξακκέο ζην αξρείν httpd.conf: Page 241 of 253

242 <Directory "/var/www/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> <Directory "/var/www/cgi-bin"> Options All </Directory> Παξαδείγκαηα Python CGI Οξηζκέλεο εθαξκνγέο πνπ ηξέρνπλ ζε έλα δηαθνκηζηή Web αλάθηεζε θαη επεμεξγαζία δεδνκέλσλ απφ έλα ρξήζηε, ηφηε λα δεκηνπξγήζεη θαη λα κεηαθέξεηε δεδνκέλα πίζσ ζην πξφγξακκα πεξηήγεζεο ζην Web ηνπ ρξήζηε. Απηέο νη εθαξκνγέο βαζίδνληαη ζε CGI, ή Common- Πχιε- Interface, πξσηφθνιια λα θάλνπκε πίζσ απφ ηα παξαζθήληα έξγν ηνπο. CGI είλαη έλα World Wide Web πξφηππν πνπ θαζνξίδεη ην πψο server εθαξκνγψλ κπνξνχλ λα δηαζπλδεζνχλ κε ην δηαθνκηζηή Web. Η Python είλαη κηα γεληθήο ρξήζεο, scripting γιψζζα πνπ κπνξεί λα ρξεζηκνπνηεζεί γηα ηνλ πξνγξακκαηηζκφ εθαξκνγψλ CGI. Η γιψζζα πξνγξακκαηηζκνχ Python πεξηιακβάλεη έλα " cgi " ελφηεηα ηεο βηβιηνζήθεο πνπ θαζηζηά δπλαηή γηα λα απνζπάζνπλ πιεξνθνξίεο απφ HTML - HyperText Markup Language - έληππα, λα αλαιχζεη θαη λα δεκηνπξγήζνπλ λέν θψδηθα HTML θαη ην παξφλ απηφο ν θψδηθαο γηα ηνλ web server. CGI ππνζηήξημε ηεο Python είλαη ηφζν πιήξεο, κπνξείηε λα δεκηνπξγήζεηε ην δηθφ ζαο απιφ δηαθνκηζηή Web κε κφιηο επηά γξακκέο θψδηθα Python. Ο θψδηθαο πνπ αθνινπζεί απφ ηελ ηζηνζειίδα Python.org πινπνηεί έλα πνιχ βαζηθφ δηαθνκηζηή Web ζε Python. Page 242 of 253

243 Η ελφηεηα " cgi " Python καο δίλεη ηε δπλαηφηεηα λα εμάγεη ηα δεδνκέλα πνπ απνζηέιινληαη απφ κηα θφξκα Web πνπ απνζηέιινληαη ρξεζηκνπνηψληαο ε "GET " ή ηε κέζνδν " POST". Απηή ε ελφηεηα πεξηέρεη ηε κέζνδν " cgi.fieldstorage ( ), " ε νπνία εμάγεη φιεο ηηο πιεξνθνξίεο πνπ απνζηέιινληαη απφ ηε θφξκα. Μπνξείηε λα αλαδεηήζεηε απηά ηα δεδνκέλα γηα πιεξνθνξίεο ή κπνξείηε λα έρεηε πξφζβαζε άκεζα ηελ ηηκή πνπ απνδίδεηαη ζε έλαλ ζπγθεθξηκέλν ηνκέα κε βάζε ην φλνκα. Γηα παξάδεηγκα, ν θψδηθαο Python κπνξεί λα πάξεη ηα δεδνκέλα απφ ηα πεδία ηεο θφξκαο πνπ νλνκάδεηαη " firstname " θαη " επψλπκν " θαη λα επηζηξέςεη έλα πξνζσπηθφ κήλπκα ζηνλ browser ηνπ ρξήζηε. Η " Python.org " ηζηνζειίδα δηαζέηεη πνιιέο επηηπρεκέλεο εθαξκνγέο πνπ βαζίδνληαη Python. Η " Journyx Timesheet " είλαη έλα παξάδεηγκα ελφο online εθαξκνγή πνπ αλαθηά θαη επεμεξγάδεηαη πνιχπινθα δεδνκέλα θφξκαο Web. Η Python θψδηθα CGI κπνξεί λα λα ρξεζηκνπνηεζεί γηα ηελ αλάθηεζε ζηαηηθέο ηζηνζειίδεο είλαη απνζεθεπκέλα σο αξρεία ζε έλα δηαθνκηζηή θαη λα πεξάζεη ηνπο καδί κε ην δηαθνκηζηή Web γηα ηελ εθπνκπή. Μπνξείηε επίζεο λα δεκηνπξγήζνπλ λέεο, δπλακηθέο ηζηνζειίδεο. Γηα παξάδεηγκα, έλα ζελάξην Python κπνξεί λα δηαβάζεη ηα cookies ηνπ πξνγξάκκαηνο πεξηήγεζεο πνπ απνζεθεχνληαη ζηνλ ππνινγηζηή ζαο θαη λα δεκηνπξγήζεηε κηα ηζηνζειίδα πνπ θαίλεηαη λα έρνπλ δεκηνπξγεζεί εηδηθά γηα εζάο - κε ην φλνκά ζαο, ηελ ηειεπηαία ζειίδα πνπ επηζθεθηήθαηε, κηα ιίζηα κε αληηθείκελα πνπ αγνξάζαηε ηειεπηαία απφ ηελ ηζηνζειίδα ή ηα ζηνηρεία πνπ ζα ζέιαηε. Python κπνξεί λα ρξεζηκνπνηεζεί γηα λα δεκηνπξγήζεη νιφθιεξε ηζηνζειίδεο, blogs ή λα δηαηεξήζνπλ εζσηεξηθά έγγξαθα ελφο νξγαληζκνχ. Python.org αλαθέξεη ην χζηεκα Γηαρείξηζεο Πεξηερνκέλνπ EZRO σο παξάδεηγκα κηαο Python -based εθαξκνγή πνπ ρξεζηκνπνηείηαη γηα ηε δεκηνπξγία, ηε δηαλνκή θαη ηε δηαηήξεζε ησλ εγγξάθσλ ζηελ ηνπηθή ή δίθηπα επξείαο πεξηνρήο. Με ηελ πξνζζήθε κηαο ειεχζεξεο, ελφηεηα open-source πνπ νλνκάδεηαη MySQLdb,κπνξείηε λα δεκηνπξγήζεηε Python scripts CGI πνπ έρνπλ πξφζβαζε θαη λα ρεηξηζηνχλ ηηο βάζεηο δεδνκέλσλ. Σα αληηθείκελα θαη νη κέζνδνη ζηε κνλάδα MySQLdb δψζεη Python πξνγξακκαηηζηέο ηα άγθηζηξα πνπ απαηηνχληαη γηα λα ζπλδεζείηε, ην εξψηεκα, ηε δεκηνπξγία, αλάγλσζε θαη εγγξαθή δεδνκέλσλ ζε βάζεηο δεδνκέλσλ MySQL. Χο έλα εχθνιν ζηε ρξήζε, γεληθή γιψζζα ζθνπφο, Python επεθηείλεη ηε δχλακε ηνπ ινγηζκηθνχ βάζεσλ δεδνκέλσλ. Η ηζηνζειίδα Python.org παξαζέηεη ην Web ηεο εηαηξείαο Gusto σο παξάδεηγκα έλα online εηαηξεία πνπ ρξεζηκνπνηεί κε επηηπρία ηελ ηθαλφηεηα επεμεξγαζίαο δεδνκέλσλ ηεο Python. Gusto επηθαιείηαη Python κε ηε δηθή κνπ γηα πιεξνθνξίεο ζηηο βάζεηο δεδνκέλσλ ηεο πνπ κπνξνχλ λα βνεζήζνπλ ηελ εηαηξεία ηελ θαιχηεξε εμππεξέηεζε ησλ κειψλ ηνπ ηαμηδηνχ - θνηλσληθή ππεξεζία ηνπ δηθηχνπ ηεο. Page 243 of 253

244 Πώο λα κεηαηξέςσ UTF8 Python ζε Unicode Η Python είλαη κηα εξκελεπηηθή, γιψζζα πξνγξακκαηηζκνχ αλνηθηνχ θψδηθα πνπ ρξεζηκνπνηεί κηα δηαηζζεηηθή object-oriented πιαίζην. Καηά ηνλ πξνγξακκαηηζκφ ζε Python, κπνξεί λα ρξεηαζηεί λα αιιάμεηε ην θείκελν απφ ην UTF - 8, κηα κνξθή θσδηθνπνίεζεο 8 -bit, ζε Unicode, κηα κνξθή θσδηθνπνίεζεο 16 - bit. Γηα παξάδεηγκα, πνιινί ρξεηάδνληαη λα κεηαηξέςνπλ UTF - 8 θείκελν, ην νπνίν ππνζηεξίδεη κφλν αγγιηθνχο ραξαθηήξεο, ζε Unicode πνπ κπνξεί λα ρεηξηζηεί γαιιηθή ηφλνπο ή ηεο Ρσζίαο κε ηελ θπξηιιηθή γξαθή. Αλνίγσ ην πξφγξακκα επεμεξγαζίαο Python. Γεκηνπξγψ κηα κνξθή UTF - 8 Unicode, πιεθηξνινγψληαο ηα εμήο :. Unicode ( «stringtext», ' utf - 8' ) Παηάσ "Enter ".Η Python επηζηξέθεη ηα εμήο : u'stringtext «ε απηφ ην παξάδεηγκα, ε Python κεηαηξέπεη ην UTF - 8 ζπκβνινζεηξάο θεηκέλνπ ζε Unicode. ε απηφ ην ζεκείν, κπνξείηε λα πξνζζέζεηε ηφλνπο θαη άιινπο ραξαθηήξεο ζηε ζπκβνινζεηξά Unicode. Bioinformatics Programming in Python ε απηφ ην ζεκείν ζα εμεηάζνπκε κηα ππνθαηεγνξία ηεο Python, ηελ Biopython κε ηελ νπνία ζέιεζα λα κειεηήζσ καζαίλνληαο Python δηφηη ηελ ζεσξψ άθξσο ελδηαθέξνπζα θαη ζεκαληηθή γηα φζνπο επηζπκνχλ λα αζρνιεζνπλ κε Biomedical Engineering ή Bioinformatics. ην παξνλ project ζα θάλνπκε κηα εηζαγσγή, φπνηνο επηζπκεί λα αζρνιεζεί εθηελέζηεξα ζην δηαδίθηπν ππάξρεη κηα πιεζψξα πεγψλ γηα εληξχθηζε ζην ζπγθεθξηκέλν θιαδν. Η Biopython δηεπθνιχλεη ηνπο κεραληθνχο πνπ αζρνινχληαη κε Bioinformatics γηαηί δελ αλεζπρείο γηα ηα παξαθάησ : Παξάμελα ζχκβνια (~=, <>, eq, '\n', {}...) Δλαιιαθηηθή ζχληαμε γηα λα θάλεη ηελ ίδηα ιεηηνπξγία Οξηζκφο ηχπνο κεηαβιεηψλ Γηαρείξηζε κλήκεο IO, call by reference/value θηι Page 244 of 253

245 Σην δηάγξακκα πνπ αθνινπζεί βιέπνπκε ηελ αλαινγία ηωλ γιωζζώλ πξνγξακκαηηζκνύ πνπ ρξεζηκνπνηνύληαη ζηνλ θιάδν ηεο Βηνπιεξνθνξηθήο Η BioPython είλαη κηα ζπιινγή ηππνπνηεκέλσλ libraries ζε python γηα ηε βηνπιεξνθνξηθή. Υαξαθηεξηζηηθά : o Αλνηρηνχ θψδηθα (Open Source,) o Cross platform : Linux, Windows, Mac OS X o πλαθή projects: BioPerl, BioRuby, BioJava Πλεονεκηήμαηα σπήζηρ open sourcelibraries : Αλαπαξαγσγηκφηεηα Δπθνιία ζχγθξηζεο απνηειεζκάησλ Ληγφηεξα ιάζε Ληγφηεξνο ρξφλνο πινπνίεζεο Δθαξκνγέο ηεο Biopython 1. Γηαρείξηζε θαη επεμεξγαζία αθνινπζηψλ 2. BLAST (ηνπηθή θαη online) Page 245 of 253

246 3. Web databases ( NCBI s EUtils) 4. Δπηινγήcommand lineδηεπαθψλ (e.g. clustalw) 5. Οκαδνπνίεζε (Bio.Cluster) 6. Φπινγελεηηθή(Bio.Nexus) 7. Γνκή Πξσηετλψλ(Bio.PDB) 8. Τπνζηήξημε βάζεσλ (Bio.SQL) 9. Γελεηηθή Πιεζπζκνχ (Bio.PopGen) Δπηπιένλ modules NumPy N-dimensional κεηξψα πλαξηήζεηο γξακκηθήο άιγεβξαο Μεηαζρεκαηηζκνχο Fourier Γελλήηνξεο ηπραίσλ αξηζκψλ SciPy ηαηηζηηθά παθέηα Αξηζκεηηθή νινθιήξσζε Γξακκηθή άιγεβξα Δπεμεξγαζία ζεκάησλ Δπεμεξγαζία εηθφλαο Γελεηηθνχο αιγφξηζκνπο Δπηιπηέο Γηαθνξηθψλ εμηζψζεσλ Matplotlib Δίλαη βηβιηνζήθε γηα ην ζρεδηαζκφ 2D θαη 3Dδηαγξακκάησλ. Πιενλεθηήκαηα Δπθνιία ρξήζεο Documentationθαη tutorials Απνδνηηθφ visualization. Page 246 of 253

247 Άιιεο εθαξκνγέο θαη βηβιηνζήθεο Django ( Web frameworks) Plone (Content ManagementSystem ) ReportLab ( PDF generation ) MPI for Python ( Παξάιιεινο Πξνγξακκαηηζκφο ) SymPy ( πκβνιηθά Μαζεκαηηθά ) Python/R interface ( ζηαηηζηηθή αλάιπζε) SWIG( Simplified Wrapper and Interface Generator) Pygr (βάζε δεδνκέλσλ γξαθηθψλ ) PysCeS ( Πξνζνκνίσζε ησλ θπηηαξηθψλ ζπζηεκάησλ ) SloppyCell ( Πξνζνκνίσζε βηνκνξηαθψλ δηθηχσλ ) Page 247 of 253

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP

ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP ΑΛΛΑΓΗ ΟΝΟΜΑΣΟ ΚΑΙ ΟΜΑΔΑ ΕΡΓΑΙΑ, ΚΟΙΝΟΥΡΗΣΟΙ ΦΑΚΕΛΟΙ ΚΑΙ ΕΚΣΤΠΩΣΕ ΣΑ WINDOWS XP ηότοι εργαζηηρίοσ ην πιαίζην ηνπ ζπγθεθξηκέλνπ εξγαζηεξίνπ ζα παξνπζηαζηνύλ βαζηθέο ιεηηνπξγίεο ησλ Windows XP πνπ ζρεηίδνληαη

Διαβάστε περισσότερα

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2

TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΠΡΟΑΡΜΟΓΗ: ΒΑΛΚΑΝΙΩΣΗ ΔΗΜ. ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 TOOLBOOK ΜΑΘΗΜΑ 2 TOOLBOOK (μάθημα 2) Δεκηνπξγία βηβιίνπ θαη ζειίδσλ ΕΚΠΑΙΔΕΤΣΙΚΟ ΠΕ19 1 Δημιουργία σελίδων και βιβλίων Έλα θαηλνύξην βηβιίν πεξηέρεη κία άδεηα ζειίδα κε έλα άδεην background. Δελ κπνξνύκε λα μερσξίζνπκε

Διαβάστε περισσότερα

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ.

Απαντήσεις θέματος 2. Παξαθάησ αθνινπζεί αλαιπηηθή επίιπζε ησλ εξσηεκάησλ. Απαντήσεις θέματος 2 Απηά πνπ έπξεπε λα γξάςεηε (δελ ρξεηαδόηαλ δηθαηνιόγεζε εθηόο από ην Γ) Α return a*b; Β 0:acegf2, 1: acegf23, 2: acegf234, 3:acegf2345, 4:acegf23456, 5:acegf234567, 6:acegf2345678,

Διαβάστε περισσότερα

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report.

Case Study. Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report. Case Study Παξαθάηω παξνπζηάδνπκε βήκα - βήκα κε screenshots έλα παξάδεηγκα ππνβνιήο κηαο εξγαζίαο θαη ηελ παξαγωγή ηνπ Originality Report. Βήκα 1 ο : Login ζηο Turnitin. Κάλεηε είζνδν ζην Turnitin κε

Διαβάστε περισσότερα

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress.

Αιγόξηζκνη Γνκή επηινγήο. Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο. Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ. introcsprinciples.wordpress. Αιγόξηζκνη 2.2.7.3 Γνκή επηινγήο Πνιιαπιή Δπηινγή Δκθωιεπκέλεο Δπηινγέο Δηζαγωγή ζηηο Αξρέο ηεο Δπηζηήκεο ηωλ Η/Υ 1 Πνιιαπιή Δληνιή Δπηινγήο Αν ζπλζήθε_1 ηόηε εληνιέο_1 αλλιώς_αν ζπλζήθε_2 ηόηε εληνιέο_2...

Διαβάστε περισσότερα

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο

ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ. Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ Οξηδόληηα θαη θαηαθόξπθε κεηαηόπηζε παξαβνιήο 1 ε Δξαζηεξηόηεηα Αλνίμηε ην αξρείν «Μεηαηόπηζε παξαβνιήο.ggb». Με ηε καύξε γξακκή παξηζηάλεηαη ε γξαθηθή παξάζηαζε ηεο f(x)=αx 2 πνπ ζα ηελ

Διαβάστε περισσότερα

Ενδεικτικά Θέματα Στατιστικής ΙΙ

Ενδεικτικά Θέματα Στατιστικής ΙΙ Ενδεικτικά Θέματα Στατιστικής ΙΙ Θέματα. Έζησ όηη ζε δείγκα 35 θαηνηθηώλ πνπ ελνηθηάδνληαη ζε θνηηεηέο ζηελ Κνδάλε βξέζεθε ην κέζν κεληαίν κίζζσκα ζηα 5 επξώ, ελώ ζην Ζξάθιεην ην κέζν κεληαίν κίζζσκα ζε

Διαβάστε περισσότερα

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) 30.04.67 FritzBox Fon WLAN 7140 - Annex B (30.04.67)

Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) 30.04.67 FritzBox Fon WLAN 7140 - Annex B (30.04.67) Hellas online Προεπιλεγμένες ρσθμίσεις για FritzBox Fon WLAN 7140 (Annex B) 30.04.67 FritzBox Fon WLAN 7140 - Annex B (30.04.67) Γηα λα επαλαθέξεηε ην FritzBox Fon WLAN 7140 ζηηο πξνεπηιεγκέλεο ηνπ ξπζκίζεηο

Διαβάστε περισσότερα

Διιεληθά Σειρά Moov Δγτειρίδιο τρήζηη Δνημέρφζης ταρηών Web Αλαζεώξεζε: R00 (2010/05) Πώς να ενημερώζφ ηοσς τάρηες; Υπάξρνπλ ηέζζεξα βήκαηα γηα ηελ ελεκέξσζε ηνπ ράξηε. Βήκα

Διαβάστε περισσότερα

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code)

Μορθές Κακόβοσλοσ Κώδικα (Malicious Code) Μορθές Κακόβοσλοσ Κώδικα (Malicious Code) Page 1 Υποπλοίαρτος Ν. Πεηράκος ΠΝ Αηδένηα Γνύξεηνη Ίππνη (Trojan Horses) Ινί (Viruses) Worms Root-kit Page 2 Γνύξεηνο Ίππνο (Trojan Horse) Οξηζκόο: Πξόγξακκα

Διαβάστε περισσότερα

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD

Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD Οδηγίες τρήζης για λειηοσργία μεηαθοράς καναλιών ζε υηθιακό δέκηη OST-7060 HD Γηα ηε δηεπθόιπλζή ζαο θαηά ην switch-off ηεο πεξηνρήο ηεο Πεινπνλλήζνπ έρνπκε πξνζζέζεη ζηνπο ςεθηαθνύο καο δέθηεο κία λέα,

Διαβάστε περισσότερα

Κεθάλαιο 1. Ενόηηηα 2 Πλάνο Μάρκεηινγκ. Εξγαιεία Μάξθεηηλγθ. Dr. Andrea Grimm Dr. Astin Malschinger

Κεθάλαιο 1. Ενόηηηα 2 Πλάνο Μάρκεηινγκ. Εξγαιεία Μάξθεηηλγθ. Dr. Andrea Grimm Dr. Astin Malschinger Κεθάλαιο 1 Ενόηηηα 2 Πλάνο Μάρκεηινγκ Εξγαιεία Μάξθεηηλγθ Dr. Andrea Grimm Dr. Astin Malschinger ΠΕΡΙΕΧΟΜΕΝΑ ΕΝΟΤΗΤΑ 2 ΠΛΑΝΟ ΜΑΡΚΕΤΙΝΓΚ Κεθάιαην 1: Εξγαιεία Μάξθεηηλγθ Σπγγξαθείο: Δξ. Andrea Grimm, Δξ.

Διαβάστε περισσότερα

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΥΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2011-12 Ρέππα Μαξγαξίηα FORMAT, UNFORMAT Format format , όποσ = a:, b: Μνξθνπνηεί, δειαδή πξνεηνηκάδεη

Διαβάστε περισσότερα

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε.

Δπηιέγνληαο ην «Πξνεπηινγή» θάζε θνξά πνπ ζα ζπλδέεζηε ζηελ εθαξκνγή ζα βξίζθεζηε ζηε λέα ρξήζε. ΑΝΟΙΓΜΑ ΝΔΑ ΥΡΗΗ 1. Γεκηνπξγείηε ηε λέα ρξήζε από ηελ επηινγή «Παξάκεηξνη/Παξάκεηξνη Δηαηξίαο/Γηαρείξηζε Δηαηξηώλ». Πιεθηξνινγείηε ηνλ θσδηθό ηεο εηαηξίαο ζαο θαη παηάηε Enter. Σηελ έλδεημε «Υξήζεηο» παηάηε

Διαβάστε περισσότερα

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird

1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird 1. Οδηγίερ εγκαηάζηαζηρ και σπήζηρ έξςπνυν καπηών και τηθιακών πιζηοποιηηικών με σπήζη ηος λογιζμικού Μοzilla Thunderbird 1.1 Εγκαηάζηαζη ηυν οδηγών ηηρ έξςπνηρ κάπηαρ ζηο λογιζμικό Mozilla Thunderbird

Διαβάστε περισσότερα

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν 2011-12

Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν 2011-12 Απνηειέζκαηα Εξσηεκαηνινγίνπ 2o ηεηξάκελν 11-12 Project 6: Ταμίδη κε ηε Μεραλή ηνπ Φξόλνπ Υπεύζπλνη Καζεγεηέο: Ε. Μπηιαλάθε Φ. Αλησλάηνο Δρώηηζη 3: Πνηα από ηα παξαθάησ ΜΜΕ ηεξαξρείηε από πιεπξάο ζεκαζίαο;

Διαβάστε περισσότερα

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ

Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ Αιγόξηζκνη 2.2.7.4 Γοκή επαλάιευες Δληοιές Όζο & Μέτρης_όηοσ Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Υ 1 Άζθεζε 34 ζει 53 Έλα ςεθηαθό θσηνγξαθηθό άικπνπκ έρεη απνζεθεπηηθό ρώξν N Mbytes. Να αλαπηύμεηε

Διαβάστε περισσότερα

Οργάνωση και Δομή Παρουσιάσεων

Οργάνωση και Δομή Παρουσιάσεων Οργάνωση και Δομή Παρουσιάσεων Οη παξνπζηάζεηο κε βνήζεηα ηνπ ππνινγηζηή γίλνληαη κε πξνγξάκκαηα παξνπζηάζεσλ, όπσο ην OpenOffice.org Impress [1] θαη ην Microsoft Office PowerPoint [2]. Απηά ηα πξνγξάκκαηα

Διαβάστε περισσότερα

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS

ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS ηότοι εργαζηηρίοσ ΡΤΘΜΙΕΙ ΔΙΚΣΤΟΤ ΣΑ WINDOWS ην πιαίζην ηνπ ζπγθεθξηκέλνπ εξγαζηεξίνπ ζα παξνπζηαζηεί ε δηαδηθαζία ηωλ ξπζκίζεωλ δηθηύνπ ζε ιεηηνπξγηθό ζύζηεκα Windows XP. Η δηαδηθαζία ζε γεληθέο γξακκέο

Διαβάστε περισσότερα

Η αξρή ζύλδεζεο Client-Server

Η αξρή ζύλδεζεο Client-Server Η αξρή ζύλδεζεο Client-Server Δηαθνκηζηήο (Server) Πξνζθέξεη ππεξεζίεο ζηνπο Πειάηεο (Client) Μεγάινη ππνινγηζηέο γηα ηηο ππεξεζίεο Internet (π.ρ. WWW, FTP) Λακβάλεη εξσηήζεηο θαη δίδεη απαληήζεηο Πειάηεο

Διαβάστε περισσότερα

ISO/IEC 27001:2005 Certificate No: IS Aegate Ltd 2011 All rights reserved

ISO/IEC 27001:2005 Certificate No: IS Aegate Ltd 2011 All rights reserved ISO/IEC 27001:2005 Certificate No: IS 567140 (1) (2) Βήκα 1. Επηιέγεηε «Τποζςζηήμαηα» Βήκα 2. Επηιέγεηε «Πωλήζειρ και Αγοπέρ» (3) (4) Βήκα 3. Επηιέγεηε «Διασείπιζη Παπαζηαηικών» Βήκα 4. Επηιέγεηε «Επεξεπγαζία

Διαβάστε περισσότερα

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2

Α. Εηζαγσγή ηεο έλλνηαο ηεο ηξηγσλνκεηξηθήο εμίζσζεο κε αξρηθό παξάδεηγκα ηελ εκx = 2 ΣΡΙΓΩΝΟΜΔΣΡΙΚΔ EΞΙΩΔΙ Πνηα παξαδείγκαηα εμηζώζεσλ ή θαη πξνβιεκάησλ πηζηεύεηαη όηη είλαη θαηάιιεια γηα ηελ επίιπζε ηνπο θαηά ηελ δηάξθεηα ηεο δηδαθηηθήο δηαδηθαζίαο κέζα ζηελ ηάμε; 1 ε ΓΙΓΑΚΣΙΚΗ ΩΡΑ Α.

Διαβάστε περισσότερα

ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών

ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών Πανεπιζηήμιο Κπήηηρ Τμήμα Επιζηήμηρ Υπολογιζηών www.csd.uoc.gr Επγαζηήπιο Υπηπεζιών Μεηαζσημαηιζμού www.tsl.gr ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών http://efront.tsl.gr Τπίηη Διάλεξη Python: το ππώτο

Διαβάστε περισσότερα

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ

ΚΕΦ. 2.3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ ΚΕΦ..3 ΑΠΟΛΤΣΗ ΣΘΜΗ ΠΡΑΓΜΑΣΘΚΟΤ ΑΡΘΘΜΟΤ Οπιζμόρ απόλςηηρ ηιμήρ: Σηνλ άμνλα ησλ πξαγκαηηθώλ αξηζκώλ ζεσξνύκε έλαλ αξηζκό α πνπ ζπκβνιίδεηαη κε ην ζεκείν Α. Η απόζηαζε ηνπ ζεκείνπ Α από ηελ αξρή Ο, δειαδή

Διαβάστε περισσότερα

Constructors and Destructors in C++

Constructors and Destructors in C++ Constructors and Destructors in C++ Σύνθεζη Πνιύ ζπρλά ζηε C++ κία θιάζε κπνξεί λα πεξηέρεη ζαλ κέιεδεδνκέλα αληηθείκελα άιισλ θιάζεσλ. Πνηα είλαη ε ζεηξά κε ηελ νπνία δεκηνπξγνύληαη θαη θαηαζηξέθνληαη

Διαβάστε περισσότερα

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο :

ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ. Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη Εήηημα 1 ο : ΓΗΑΓΩΝΗΣΜΑ ΣΤΑ ΜΑΘΖΜΑΤΗΚΑ Ον/μο:.. Γ Λσκείοσ Ύλη: Μιγαδικοί-Σσναρηήζεις-Παράγωγοι Θεη.-Τετν. Καη. 11-1-11 Εήηημα 1 ο : Α. Γηα ηελ ζπλάξηεζε f, λα βξείηε ην δηάζηεκα ζην νπνίν είλαη παξαγσγίζηκε θαζώο θαη

Διαβάστε περισσότερα

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην ζαο

ΒΗΜΑ 2. Εηζάγεηε ηνλ Κωδηθό Πξόζβαζεο πνπ ιακβάλεηε κε SMS & δειώλεηε επηζπκεηό Όλνκα Πξόζβαζεο (Username) θαη ην  ζαο Δίζνδνο ζηελ Υπεξεζία Αλ είζηε ήδε εγγεγξακκέλνο ρξήζηεο ζηελ ππεξεζία, γηα ηελ είζνδν ζαο (login) ζηελ ππεξεζία e-bill, εηζάγεηαη ην Όλνκα Φξήζηε (username) θαη ηνλ Κωδηθό Πξόζβαζεο (password) πνπ είραηε

Διαβάστε περισσότερα

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα!

Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα! Cpyright 2013 Λόγος & Επικοινωνία // All rights Reserved Παιχνίδι γλωζζικής καηανόηζης με ζχήμαηα! Αυηό ηο παιχνίδι έχει ζηόχους: 1. ηελ εθγύκλαζε ηεο αθνπζηηθήο κλήκεο ησλ παηδηώλ 2. ηελ εμάζθεζε ζηελ

Διαβάστε περισσότερα

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ

ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ ΠΑΡΑΡΣΗΜΑ Δ. ΔΤΡΔΗ ΣΟΤ ΜΔΣΑΥΗΜΑΣΙΜΟΤ FOURIER ΓΙΑΦΟΡΩΝ ΗΜΑΣΩΝ Εδώ ζα ππνινγίζνπκε ην κεηαζρεκαηηζκό Fourier κεξηθώλ αθόκα ζεκάησλ, πξνζπαζώληαο λα μεθηλήζνπκε από ην κεηαζρεκαηηζκό Fourier γλσζηώλ ζεκάησλ

Διαβάστε περισσότερα

Η/Υ A ΤΑΞΕΩΣ ΑΕ 2010-2011. Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ

Η/Υ A ΤΑΞΕΩΣ ΑΕ 2010-2011. Συστήματα Αρίθμησης. Υποπλοίαρχος Ν. Πετράκος ΠΝ Συστήματα Αρίθμησης Υποπλοίαρχος Ν. Πετράκος ΠΝ 1 Ειζαγωγή Τν bit είλαη ε πην βαζηθή κνλάδα κέηξεζεο. Είλαη κία θαηάζηαζε on ή off ζε έλα ςεθηαθό θύθισκα. Άιιεο θνξέο είλαη κία θαηάζηαζε high ή low voltage

Διαβάστε περισσότερα

Άσκηση 1 - Μοπυοποίηση Κειμένου

Άσκηση 1 - Μοπυοποίηση Κειμένου Άσκηση 1 - Μοπυοποίηση Κειμένου Σηηο παξαθάησ γξακκέο εθαξκόζηε ηε κνξθνπνίεζε πνπ πεξηγξάθνπλ Γξακκή κε έληνλε γξαθή Γξακκή κε πιάγηα γξαθή Γξακκή κε ππνγξακκηζκέλε γξαθή Γξακκή κε Arial Font κεγέζνπο

Διαβάστε περισσότερα

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14

Αζκήζεις ζτ.βιβλίοσ ζελίδας 13 14 .1.10 ζκήζεις ζτ.βιβλίοσ ζελίδας 13 14 Ερωηήζεις Καηανόηζης 1. ύν δηαθνξεηηθέο επζείεο κπνξεί λα έρνπλ θαλέλα θνηλό ζεκείν Έλα θνηλό ζεκείν i ύν θνηλά ζεκεία iλ) Άπεηξα θνηλά ζεκεία ηηηνινγήζηε ηελ απάληεζε

Διαβάστε περισσότερα

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ

H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ H ΜΑΓΕΙΑ ΤΩΝ ΑΡΙΘΜΩΝ Φξεζηκόηεηα καζεκαηηθώλ Αξρή θαηακέηξεζεο Όζα έδσζαλ νη Έιιελεο... Τξίγσλνη αξηζκνί Τεηξάγσλνη αξηζκνί Δπηκήθεηο αξηζκνί Πξώηνη αξηζκνί Αξηζκνί κε μερσξηζηέο ηδηόηεηεο Γίδπκνη πξώηνη

Διαβάστε περισσότερα

ΥΡΙΣΟΤΓΔΝΝΙΑΣΙΚΔ ΚΑΣΑΚΔΤΔ

ΥΡΙΣΟΤΓΔΝΝΙΑΣΙΚΔ ΚΑΣΑΚΔΤΔ ΥΡΙΣΟΤΓΔΝΝΙΑΣΙΚΔ ΚΑΣΑΚΔΤΔ 1) Υξηζηνπγελληάηηθα ειαηάθηα θάξηα ή θαδξάθη θάξηα ή θαδξάθη Τιηθά πνπ ζα ρξεηαζηνύκε: Υαξηί θάλζνλ καύξν γηα ην θόλην, πξάζηλν γηα ηα ειαηάθηα, θόθθηλν γηα ηα αζηεξάθηα Απιό

Διαβάστε περισσότερα

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ 2015-2016

Βάσεις Δεδομέμωμ. Εξγαζηήξην V. Τκήκα Πιεξνθνξηθήο ΑΠΘ 2015-2016 Βάσεις Δεδομέμωμ Εξγαζηήξην V Τκήκα Πιεξνθνξηθήο ΑΠΘ 2015-2016 2 Σκοπός του 5 ου εργαστηρίου Σθνπόο απηνύ ηνπ εξγαζηεξίνπ είλαη: ε κειέηε ζύλζεησλ εξσηεκάησλ ζύλδεζεο ζε δύν ή πεξηζζόηεξεο ζρέζεηο ε κειέηε

Διαβάστε περισσότερα

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access)

Άμεσοι Αλγόριθμοι: Προσπέλαση Λίστας (list access) Έρνπκε απνζεθεύζεη κηα ζπιινγή αξρείσλ ζε κηα ζπλδεδεκέλε ιίζηα, όπνπ θάζε αξρείν έρεη κηα εηηθέηα ηαπηνπνίεζεο. Μηα εθαξκνγή παξάγεη κηα αθνινπζία από αηηήκαηα πξόζβαζεο ζηα αξρεία ηεο ιίζηαο. Γηα λα

Διαβάστε περισσότερα

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη

Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη Εςθςή ζςζηήμαηα επισειπήζεων και αξιολόγηζη Μάθημα 11 Τμήμα Μάπκεηινγκ και Διοίκηζηρ Λειηοςπγιών Τα δηαγξάκκαηα θαηάζηαζεο (state diagrams) ρξεζηκνπνηνύληαη γηα λα βνεζήζνπλ ηνλ πξνγξακκαηηζηή λα θαηαιάβεη

Διαβάστε περισσότερα

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ

Ζαχαρίας Μ. Κοντοπόδης Εργαστήριο Λειτουργικών Συστημάτων ΙΙ Διαφάνεια 1 η ΕΚΚΙΝΗΣΗ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ ΚΑΙ ΕΙΣΟΔΟΣ ΣΤΟ BIOS UITILITY Τν ζπλεζέζηεξν πιήθηξν γηα ηελ είζνδν ζην BIOS Utility είλαη ην πιήθηξν Del. Παξόια απηά δηαθνξεηηθνί θαηαζθεπαζηέο, ρξεζηκνπνηνύλ δηαθνξεηηθά

Διαβάστε περισσότερα

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη

ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ. Ύλη: Εσθύγραμμη Κίνηζη ΔΙΑΓΩΝΙΣΜΑ ΣΤΗ ΦΥΣΙΚΗ Είμαζηε ηυχεροί που είμαζηε δάζκαλοι Ον/μο:.. A Λσκείοσ Ύλη: Εσθύγραμμη Κίνηζη 8-11-2015 Θέμα 1 ο : 1. Η εμίζωζε θίλεζεο ελόο θηλεηνύ πνπ θηλείηαη επζύγξακκα είλαη ε x = 5t. Πνηα

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΕΚΔΟΗ 8.0.0

ΕΓΧΕΙΡΙΔΙΟ ΕΚΔΟΗ 8.0.0 ΕΓΧΕΙΡΙΔΙΟ ΕΚΔΟΗ 8.0.0 Γενικά Η έθδνζε 8.0.0 ηνπ ελόηεηεο: Business ERP, πεξηιακβάλεη λέεο ιεηηνπξγίεο πνπ αλαιύνληαη ζηηο παξαθάησ Γεληθόηεξε ιεηηνπξγία ηεο εθαξκνγήο Εκπνξηθή Δηαρείξηζε 7/2/2013 SingularLogic

Διαβάστε περισσότερα

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ

Εγκατάσταση του πακέτου XAMPP. Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά Άριςτοσ Παςιάσ Εγκατάσταση του πακέτου XAMPP Β Τεχνική Σχολή Λεμεςοφ Σχολική χρονιά 2017 2018 Άριςτοσ Παςιάσ Τι είναι Τν XAMPP είλαη έλα δωξεάλ πξόγξακκα γηα δηάθνξα ιεηηνπξγηθά ζπζηήκαηα πνπ δεκηνπξγεί έλα πεξηβάιινλ

Διαβάστε περισσότερα

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX

ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX ΕΝΤΟΛΕΣ WINDOWS ΚΑΙ UNIX Σηότοι εργαζηηρίοσ Σην πιαίζην ηνπ ζπγθεθξηκέλνπ εξγαζηεξίνπ, νη θνηηεηέο ζα εμνηθεησζνύλ κε βαζηθέο εληνιέο δηθηπαθώλ πξσηνθόιισλ νη νπνίεο βξίζθνπλ εθαξκνγή ζε πεξηβάιινληα Windows

Διαβάστε περισσότερα

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ

ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ ΘΔΚΑ ΡΖΠ ΑΛΑΓΛΩΟΗΠΖΠ 1.Απηόο πνπ ζα αλαγλσξηζηεί απνπζηάδεη γηα πνιύ θαηξό. 2.Δπηζηξέθεη κε πιαζηή ηαπηόηεηα ή κεηακνξθσκέλνο. 3.Απνκνλώλνληαη ηα δύν πξόζσπα 4.Άξζε κεηακόξθσζεο 5.Απνθάιπςε 6.Ακθηβνιίεο-απνδεηθηηθά

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ 4 ΣΥΝΔΥΑΣΤΙΚΑ ΚΥΚΛΩΜΑΤΑ 1. ρεδίαζε πλδπαζηηθνύ Κπθιώκαηνο Έλα ζπλδπαζηηθό θύθισκα (Κ) έρεη ηξεηο εηζόδνπο A, B θαη C θαη κία έμνδν Y Y=A B+AC Να θαηαζθεπάζεηε ην ράξηε Karnaugh. B 0

Διαβάστε περισσότερα

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ

ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ ΑΠΑΝΤΗΣΔΙΣ ΓΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ II ΔΠΑΛ ΘΔΜΑ Α Α1. α. Σ β. Σ γ. Λ δ. Λ ε. Λ ζη. Σ Α2. Γ Α3. 1. γ 2. ε 3. δ 4. α Β1. ΘΔΜΑ Β Οη ηειηθνί ππνινγηζηέο παίξλνπλ απνθάζεηο δξνκνιόγεζεο κόλν γηα ηα δηθά ηνπο απηνδύλακα

Διαβάστε περισσότερα

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση

Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση Κευάλαιο 8 Μονοπωλιακή Συμπεριφορά- Πολλαπλή Τιμολόγηση Πώς πρέπει να τιμολογεί ένα μονοπώλιο; Μέρξη ζηηγκήο ην κνλνπώιην έρεη ζεσξεζεί ζαλ κηα επηρείξεζε ε νπνία πσιεί ην πξντόλ ηεο ζε θάζε πειάηε ζηελ

Διαβάστε περισσότερα

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο.

7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ. 3. Έλαο θαηαρσξεηήο SISO ησλ 4 bits έρεη: α) Μία είζνδν, β) Δύν εηζόδνπο, γ) Σέζζεξεηο εηζόδνπο. 7. ΚΑΤΑΧΩΡΗΤΕΣ ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ 1. Ση είλαη έλαο θαηαρσξεηήο; O θαηαρσξεηήο είλαη κηα νκάδα από flip-flop πνπ κπνξεί λα απνζεθεύζεη πξνζσξηλά ςεθηαθή πιεξνθνξία. Μπνξεί λα δηαηεξήζεη ηα δεδνκέλα ηνπ

Διαβάστε περισσότερα

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί.

Να ζρεδηάζεηο ηξόπνπο ζύλδεζεο κηαο κπαηαξίαο θαη ελόο ιακπηήξα ώζηε ν ιακπηήξαο λα θσηνβνιεί. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ: Απλό ηλεκτπικό κύκλυμα Η δηδαζθαιία ηνπ απινύ ειεθηξηθνύ θπθιώκαηνο ππάξρεη ζην κάζεκα «Φπζηθά» ηεο Ε ηάμεο ηνπ δεκνηηθνύ θαη επαλαιακβάλεηαη ζην κάζεκα ηεο Φπζηθήο ζηε Γ ηάμε ηνπ Γπκλαζίνπ.

Διαβάστε περισσότερα

4) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα θύθινο πνπ ζα ζρεδηάδεη έλα θύθιν. Λύζε Γηα θύθινο ζηθ επαλάιαβε 360 [κπ 1 δε 1] ηέινο

4) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα θύθινο πνπ ζα ζρεδηάδεη έλα θύθιν. Λύζε Γηα θύθινο ζηθ επαλάιαβε 360 [κπ 1 δε 1] ηέινο Λσμένες αζκήζεις ζηη Logo Στεδίαζη ζτημάηων με ηη τελώνα 1) Να γξάςεηε δηαδηθαζία (πξόγξακκα) ζηε Logo κε όλνκα ηεηξάγσλν πνπ ζα ζρεδηάδεη έλα ηεηξάγσλν κε πιεπξά 120. Γηα ηεηξάγσλν επαλάιαβε 4 [κπ 120

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΣΠΟΥΔΕΣ ΣΤΙΣ ΦΥΣΙΚΕΣ ΕΠΙΣΤΗΜΕΣ ΓΕΝΙΚΑ ΜΑΘΗΜΑΤΙΚΑ ΙΙ - ΦΥΕ 0 7 Ινπλίνπ 009 Απαντήσειρ στιρ ασκήσειρ τηρ τελικήρ εξέτασηρ στιρ Σςνήθειρ Διαυοπικέρ Εξισώσειρ Αγαπηηέ θοιηηηή/ηπια,

Διαβάστε περισσότερα

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΥΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΥΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΥΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΥΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ 2011-12 Ρέππα Μαξγαξίηα ΓΙΑΥΔΙΡΙΗ ΚΑΣΑΛΟΓΩΝ Εντολή md Με ηελ εληνιή απηή κπνξνύκε λα δεκηνπξγήζνπκε έλαλ θαηλνύξγην ππνθαηάινγν.

Διαβάστε περισσότερα

ΜΕΛΕΣΗ E.O.K. ΜΕ ΑΙΘΗΣΗΡΑ ΘΕΗ

ΜΕΛΕΣΗ E.O.K. ΜΕ ΑΙΘΗΣΗΡΑ ΘΕΗ ΜΕΛΕΣΗ E.O.K. ΜΕ ΑΙΘΗΣΗΡΑ ΘΕΗ ΦΤΛΛΟ ΕΡΓΑΙΑ (Θεοδώρα Γιώηη, Νικόλας Καραηάζιος- Τπεύθσνη εκ/κος Λ. Παπαηζίμπα) ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΤΜΗΜΑ:.., ΗΜΕΡΟΜΗΝΙΑ:.// Σε ακαμίδην πνπ κπνξεί λα θηλείηαη ρσξίο ηξηβέο πάλσ

Διαβάστε περισσότερα

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΧΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΧΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ Ρέππα Μαξγαξίηα ΣΔΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΔΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΔΠΙΚΟΙΝΩΝΙΩΝ ΧΔΙΜΔΡΙΝΟ ΔΞΑΜΗΝΟ 2011-12 Ρέππα Μαξγαξίηα Πξνρσξεκέλεο εληνιέο δηαρείξηζεο Αξρείσλθαηαιόγσλ Εντολή sort Με ηελ εληνιή απηή κπνξνύκε λα

Διαβάστε περισσότερα

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο 2009. 1. Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) =

ΔΦΑΡΜΟΜΔΝΑ ΜΑΘΗΜΑΣΙΚΑ ΣΗ ΧΗΜΔΙΑ Ι ΘΔΜΑΣΑ Α επηέκβξηνο 2009. 1. Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(x,y) = ΘΔΜΑΣΑ Α επηέκβξηνο 9. Να ππνινγηζηνύλ νη κεξηθέο παξάγσγνη πξώηεο ηάμεο ηεο ζπλάξηεζεο f(,y) = y.. Να ππνινγηζηνύλ ηα νινθιεξώκαηα: a) ln b) a) 3cos b) e sin 4. Να ππνινγηζηεί ην νινθιήξσκα: S ( y) 3

Διαβάστε περισσότερα

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x)

f '(x)g(x)h(x) g'(x)f (x)h(x) h'(x) f (x)g(x) ΓΙΑΓΩΝΙΣΜΑ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ 54 Υλη: Παράγωγοι Γ Λσκείοσ Ον/μο:.. 6--4 Θεη-Τετν. ΘΔΜΑ Α.. Αλ f, g, h ηξεηο παξαγωγίζηκεο ζπλαξηήζεηο ζην λα απνδείμεηε όηη : f () g() h() ' f '()g()h() g'()f ()h() h'() f ()g()

Διαβάστε περισσότερα

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12

x-1 x (x-1) x 5x 2. Να απινπνηεζνύλ ηα θιάζκαηα, έηζη ώζηε λα κελ ππάξρνπλ ξηδηθά ζηνπο 22, 55, 15, 42, 93, 10 5, 12 ΑΚΖΔΗ ΤΜΝΑΗΟΤ - ΚΤΚΛΟ ΠΡΩΣΟ - - ηα πνηεο ηηκέο ηνπ ηα παξαθάησ θιάζκαηα δελ νξίδνληαη ; (Τπόδεημε : έλα θιάζκα νξίδεηαη αλ ν παξνλνκαζηήο είλαη δηάθνξνο ηνπ κεδελόο) - (-) - (-) - Να απινπνηεζνύλ ηα θιάζκαηα

Διαβάστε περισσότερα

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2

ΛΙΜΝΗ ΤΣΑΝΤ. Σρήκα 1. Σρήκα 2 ΛΙΜΝΗ ΤΣΑΝΤ Τν Σρήκα 1 δείρλεη ηελ αιιαγή ηεο ζηάζκεο ηεο Λίκλεο Τζαλη, ζηε Σαράξα ηεο Βόξεηαο Αθξηθήο. Η Λίκλε Τζαλη εμαθαλίζηεθε ηειείσο γύξσ ζην 20.000 π.χ., θαηά ηε δηάξθεηα ηεο ηειεπηαίαο επνρήο ησλ

Διαβάστε περισσότερα

Ανάπηςξη Δθαπμογών ζε Ππογπαμμαηιζηικό Πεπιβάλλον

Ανάπηςξη Δθαπμογών ζε Ππογπαμμαηιζηικό Πεπιβάλλον Μάθημα 10 ( 2.4.2, 8.1, 8.1.1) Ανάπηςξη Δθαπμογών ζε Ππογπαμμαηιζηικό Πεπιβάλλον Δπγαζία 9 Α. Να βπεθεί η ηιμή πος θα έσει η μεηαβληηή Φ μεηά ηην εκηέλεζη καθεμιάρ από ηιρ παπακάηυ ενηολέρ εκσώπηζηρ. Οι

Διαβάστε περισσότερα

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288

ΔΡΓΑΙΑ 1. Γιαδικησακά πληροθοριακά σζηήμαηα. Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές. ηέθανος Κονηοβάς ΑΔΜ :283. Πάζτος Βαζίλειος ΑΔΜ :288 ΔΡΓΑΙΑ 1 Γιαδικησακά πληροθοριακά σζηήμαηα Ομάδα Δργαζίας: Μεηαπηστιακοί Φοιηηηές ηέθανος Κονηοβάς ΑΔΜ :283 Πάζτος Βαζίλειος ΑΔΜ :288 1.Γιάγραμμα Ονηολογίας. Σην παξαπάλω δηάγξακκα θαίλεηαη ε δηάξζξωζε

Διαβάστε περισσότερα

Αιγόξηζκνη Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ Γνκή αθνινπζίαο. Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ

Αιγόξηζκνη Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ Γνκή αθνινπζίαο. Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ Αιγόξηζκνη 2.2.7.1 Δθρώξεζε, Δίζνδνο θαη Έμνδνο ηηκώλ 2.2.7.2 Γνκή αθνινπζίαο Δηζαγσγή ζηηο Αξρέο ηεο Δπηζηήκεο ησλ Η/Υ 1 Δληνιή Δθρώξεζεο Η γεληθή κνξθή ηεο εληνιήο εθρώξεζεο είλαη: Μεηαβιεηή Έθθξαζε

Διαβάστε περισσότερα

ΦΥΣΙΚΗ ΤΩΝ ΡΕΥΣΤΩΝ. G. Mitsou

ΦΥΣΙΚΗ ΤΩΝ ΡΕΥΣΤΩΝ. G. Mitsou ΦΥΣΙΚΗ ΤΩΝ ΡΕΥΣΤΩΝ ηαηηθή ηωλ ξεπζηώλ (Τδξνζηαηηθή) Ση είλαη ηα ξεπζηά - Γεληθά Ππθλόηεηα Πίεζε Μεηαβνιή ηεο πίεζεο ζπλαξηήζεη ηνπ βάζνπο Αξρή ηνπ Pascal Τδξνζηαηηθή πίεζε Αηκνζθαηξηθή πίεζε Απόιπηε &

Διαβάστε περισσότερα

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H )

Α Ο Κ Η Α Μ Α Ζ Η Η Ρ Η ( S E A R C H ) Ξ G O O G L E S C H O L A R Α Ο Ξ Ε Κ Ε Θ Λ Θ Α Λ Η Τ Α Μ Η Α Μ Α Ζ Η Η Ρ Η Ρ Οξαγκαηνπνηώληαο αλαδήηεζε ζην GoogleScholar (http://scholar.google.com/) ν ρξήζηεο κπνξεί λα εληνπίζεη πιηθό αθαδεκαϊθνύ θαη

Διαβάστε περισσότερα

Έλεγτος Ορθογραθίας - Γραμμαηικής. Ορθογραθικός και Γραμμαηικός Έλεγτος

Έλεγτος Ορθογραθίας - Γραμμαηικής. Ορθογραθικός και Γραμμαηικός Έλεγτος 3.6 Έλεγτος Ορθογραθίας - Γραμμαηικής Ορθογραθικός και Γραμμαηικός Έλεγτος Πνιιέο θνξέο, θαζώο γξάθνπκε ζην Word, βιέπνπκε θπκαηηζηέο θόθθηλεο θαη πξάζηλεο ππνγξακκίζεηο λα εκθαλίδνληαη θάησ από νξηζκέλεο

Διαβάστε περισσότερα

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν.

B-Δέλδξα. Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν. B-Δέλδξα Τα B-δέλδξα ρξεζηκνπνηνύληαη γηα ηε αλαπαξάζηαζε πνιύ κεγάισλ ιεμηθώλ πνπ είλαη απνζεθεπκέλα ζην δίζθν. Δέλδξα AVL n = 2 30 = 10 9 (πεξίπνπ). 30

Διαβάστε περισσότερα

Κεθάιαην 20. Ελαχιστοποίηση του κόστους

Κεθάιαην 20. Ελαχιστοποίηση του κόστους Κεθάιαην 0 Ελαχιστοποίηση του κόστους Ειαρηζηνπνίεζε ηνπ θόζηνπο Μηα επηρείξεζε ειαρηζηνπνηεί ην θόζηνο ηεο αλ παξάγεη νπνηνδήπνηε δεδνκέλν επίπεδν πξντόληνο y 0 ζην κηθξόηεξν δπλαηό ζπλνιηθό θόζηνο. Τν

Διαβάστε περισσότερα

ΑΓΩΜΘΡΘΙΞΘ ΤΩΠΞΘ ΡΘΡ ΛΘΙΠΕΡ ΗΚΘΙΘΕΡ ΛΘΤΑΗΚΘΔΗΡ Τ.

ΑΓΩΜΘΡΘΙΞΘ ΤΩΠΞΘ ΡΘΡ ΛΘΙΠΕΡ ΗΚΘΙΘΕΡ ΛΘΤΑΗΚΘΔΗΡ Τ. ΑΓΩΜΘΡΘΙΞΘ ΤΩΠΞΘ ΡΘΡ ΛΘΙΠΕΡ ΗΚΘΙΘΕΡ ΟΑIΤΜΘΔΘ ΡΕ ΛΕΓΑΚΞ ΓΗΟΕΔΞ 11V11 ΗΚΘΙΘΑ 6-10 ΤΠΞΜΩΜ ΛΕΘΞΜΕΙΗΛΑΑ ΞΣ ΟΑΘΤΜΘΔΘΞΣ ΡΕ ΛΕΓΑΚΞ ΓΗΟΕΔΞ ΓΘΑ ΟΑΘΙΕΡ ΗΚΘΙΘΑΡ 6-10 ΕΩΜ Η ΔΘΑΔΠΞΛΗ ΑΟΞ Η ΛΘΑ ΕΡΘΑ ΡΗΜ ΑΚΚΗ ΕΘΜΑΘ ΛΕΓΑΚΗ

Διαβάστε περισσότερα

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα

ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ Ρέππα Μαξγαξίηα ΣΕΙ ΙΟΝΙΩΝ ΝΗΩΝ ΣΜΗΜΑ: ΣΕΧΝΟΛΟΓΙΑ ΠΛΗΡΟΦΟΡΙΚΗ ΚΑΙ ΣΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2011-12 Ρέππα Μαξγαξίηα ΔΙΑΔΙΕΡΓΑΣΙΚΗ ΕΠΙΚΟΙΝΩΝΙΑ Η αλαθαηεύζπλζε εμόδνπ> ρεηξηζηή ρξεζηκνπνηείηαη γηα λα ζηείιεη ηελ

Διαβάστε περισσότερα

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf

Δξγαζηεξηαθή άζθεζε 03. Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf Δξγαζηεξηαθή άζθεζε 03 Σηεξενγξαθηθή πξνβνιή ζην δίθηπν Wulf Ζιίαο Χαηδεζενδσξίδεο Οθηώβξηνο / Ννέκβξηνο 2004 Τη είλαη ην δίθηπν Wulf Δπίπεδν ζην νπνίν κπνξνύκε λα αλαπαξαζηήζνπκε ηξηζδηάζηαηα ζρήκαηα,

Διαβάστε περισσότερα

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ

ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ ΟΠΤΙΚΗ Α. ΑΝΑΚΛΑΣΖ - ΓΗΑΘΛΑΣΖ. Μία αθηίλα θωηόο πξνζπίπηεη κε κία γωλία ζ ζηε επάλω επηθάλεηα ελόο θύβνπ από πνιπεζηέξα ν νπνίνο έρεη δείθηε δηάζιαζεο ε =,49 (ζρήκα ). Βξείηε πνηα ζα είλαη ε κέγηζηε γωλία

Διαβάστε περισσότερα

Φςζική Πποζαναηολιζμού Γ Λςκείος. Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο

Φςζική Πποζαναηολιζμού Γ Λςκείος. Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο Φςζική Πποζαναηολιζμού Γ Λςκείος Αζκήζειρ Ταλανηώζειρ 1 ο Φςλλάδιο Επιμέλεια: Αγκανάκηρ Α. Παναγιώηηρ Επωηήζειρ Σωζηό- Λάθορ Να χαπακηηπίζεηε ηιρ παπακάηω πποηάζειρ ωρ ζωζηέρ ή λάθορ: 1. Η ηαιάλησζε είλαη

Διαβάστε περισσότερα

x x x x tan(2 x) x 2 2x x 1

x x x x tan(2 x) x 2 2x x 1 ΘΕΡΙΝΟ ΣΜΗΜΑ ΜΑΘΗΜΑΣΙΚΑ Ι ΕΠΑΝΑΛΗΠΣΙΚΕ ΑΚΗΕΙ ΜΕΡΟ Ι 1. Να γίλνπλ νη γξαθηθέο παξαζηάζεηο ησλ παξαθάησ ζπλαξηήζεσλ. t ( i) e ( ii) ln( ) ( iii). Να βξεζεί ην Π.Ο., ν ηύπνο ηεο αλίζηξνθεο θαη ην Π.Τ. ησλ

Διαβάστε περισσότερα

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis

Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training. Dipl.Biol.cand.med. Stylianos Kalaitzis Αζθήζεηο 5 νπ θεθαιαίνπ Crash course Step by step training Dipl.Biol.cand.med. Stylianos Kalaitzis Stylianos Kalaitzis Μνλνϋβξηδηζκνο 1 Γπν γνλείο, εηεξόδπγνη γηα ηνλ αιθηζκό θάλνπλ παηδηά. Πνία ε πηζαλόηεηα

Διαβάστε περισσότερα

1 Είζοδορ ζηο Σύζηημα ΣΔΕΔ ή BPMS

1 Είζοδορ ζηο Σύζηημα ΣΔΕΔ ή BPMS ΟΤΑ Επισειπηζιακή Νοημοζύνη: Οδεγίεο πξνο ηνπο εθπαηδεπόκελνπο γηα ηε ζύλδεζε κε ην ύζηεκα Γηαρείξηζεο Δπηρεηξεζηαθώλ Γηαδηθαζηώλ γηα ηελ εθηέιεζε ηωλ Πξαθηηθώλ Αζθήζεωλ ηωλ ππν(δλνηήηωλ) Bc1.1.4, Bc1.1.5,

Διαβάστε περισσότερα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙ ΜΟ Α ΛΤΚΔΙΟΤ Ζμεπομηνία: 18/12/10 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΕΙΝΟΜΕΝΕ ΛΤ ΕΙ 1. Δίλεηαη ην πνιπώλπκν Αλ θαη., λα βξείηε ην ηειεπηαίν ςεθίν ηνπ αξηζκνύ έρνπκε:

Διαβάστε περισσότερα

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84

Διαηιμήζεις για Αιολικά Πάρκα. Κώδικες 28, 78 και 84 Διαηιμήζεις για Αιολικά Πάρκα Κώδικες 28, 78 και 84 Διαηιμήζεις για Αιολικά Πάρκα Οη Διαηιμήζεις για Αιολικά Πάρκα εθαξκόδνληαη γηα ηελ απνξξνθνύκελε ελέξγεηα από Αηνιηθά Πάξθα πνπ είλαη ζπλδεδεκέλα ζην

Διαβάστε περισσότερα

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο:

Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο: Πίνακες Σσμβόλων Έλαο πίνακας σσμβόλων ππνζηεξίδεη δύν βαζηθέο ιεηηνπξγίεο: Εηζαγσγή ελόο ζηνηρείνπ Αλαδήηεζε ζηνηρείνπ κε δεδνκέλν θιεηδί Άιιεο ρξήζηκεο ιεηηνπξγίεο είλαη: Δηαγξαθή ελόο θαζνξηζκέλνπ ζηνηρείνπ

Διαβάστε περισσότερα

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων

Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων Image J Plugin particle tracker για παρακολούθηση της κίνησης σωματιδίων (https://weeman.inf.ethz.ch/particletracker/) Τν Plugin particle tracker κπνξεί λα αληρλεύζεη απηόκαηα ηα ζσκαηίδηα πνπ θηλνύληαη,

Διαβάστε περισσότερα

Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α

Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α Διαδικαζία μεηαθοράς δεδομένων Εκκαθαριζηικής για ηο Eιδικό ζημείωμα περαίωζης Φ.Π.Α Σει.1 Σο ζςγκεκπιμένο εγσειπίδιο δημιοςπγήθηκε για να βοηθήζει ηην καηανόηζη ηηρ διαδικαζίαρ μεηαθοπάρ δεδομένων ηηρ

Διαβάστε περισσότερα

Ηλεκηπονικά Απσεία και Διεπαθέρ

Ηλεκηπονικά Απσεία και Διεπαθέρ MENU ΑΝΑΦΟΡΕΣ Ηλεκηπονικά Απσεία και Διεπαθέρ Σε απηό ην ζεκείν ηεο εθαξκνγήο δεκηνπξγνύκε ηα δηάθνξα Ηιεθηξνληθά Αξρεία έηζη ώζηε λα ηα ππνβάινπκε ζηνπο δηάθνξνπο θνξείο. Γηα λα επηιέμνπκε έλα είδνο αξρείνπ

Διαβάστε περισσότερα

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ

Σήκαηα Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) ΕΙΣΑΓΨΓΗ ΣΤΙΣ ΤΗΛΕΠΙΚΟΙΝΨΝΙΕΣ Σήκαηα 1 Β Α Γ Γ Δ Λ Η Σ Ο Ι Κ Ο Ν Ο Μ Ο Υ Γ Ι Α Λ Δ Ξ Η - ( 2 ) Σήκαηα Οξηζκόο ζήκαηνο Ταμηλόκεζε ζεκάησλ Σεηξέο Fourier Μεηαζρεκαηηζκόο Fourier Σπλέιημε Σπζρέηηζε θαη Φαζκαηηθή Ππθλόηεηα 2 Οξηζκόο Σήκαηνο

Διαβάστε περισσότερα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ. Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΔΣΑΙΡΔΙΑ ΠΑΓΚΤΠΡΙΟ ΓΙΑΓΩΝΙΜΟ Α ΛΤΚΔΙΟΤ Ημεπομηνία: 10/12/11 Ώπα εξέτασηρ: 09:30-12:30 ΠΡΟΣΔΙΝΟΜΔΝΔ ΛΤΔΙ Πρόβλημα 1: α) Να δείμεηε όηη αλ ζεηηθνί πξαγκαηηθνί αξηζκνί ηζρύεη: β) Αλ είλαη

Διαβάστε περισσότερα

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ

Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική ΑΔ Άζκηζη ζτέζης κόζηοσς-τρόνοσ (Cost Time trade off) Καηαζκεσαζηική Δίζηε μησανικόρ διοίκηζηρ μεγάληρ καηαζκεςαζηικήρ εηαιπείαρ και καλείζηε να ςλοποιήζεηε ηο έπγο πος πεπιγπάθεηαι από ηον Πίνακα 1. Κωδ.

Διαβάστε περισσότερα

Δξγαιεία Καηαζθεπέο 1 Σάμε Δ Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ. ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Ογθνκεηξηθό δνρείν

Δξγαιεία Καηαζθεπέο 1 Σάμε Δ Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ. ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Ογθνκεηξηθό δνρείν Δξγαιεία Καηαζθεπέο 1 Δ.Κ.Φ.Δ. ΥΑΝΗΩΝ ΠΡΩΣΟΒΑΘΜΗΑ ΔΚΠΑΗΓΔΤΖ ΔΝΟΣΖΣΑ 2 ε : ΤΛΗΚΑ ΩΜΑΣΑ ΔΡΓΑΛΔΗΑ ΚΑΣΑΚΔΤΔ Καηαζθεπή 1: Ογθνκεηξηθό δνρείν Καηαζθεπάδνπκε έλα νγθνκεηξηθό δνρείν από πιαζηηθό κπνπθάιη λεξνύ

Διαβάστε περισσότερα

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα.

Δξγαιεία Καηαζθεπέο 1 Σάμε Σ Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ. ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ. Καηαζθεπή 1: Φαθόο κε ζσιήλα. Δξγαιεία Καηαζθεπέο 1 Δ.Κ.Φ.Δ. ΥΑΝΙΧΝ ΠΡΧΣΟΒΑΘΜΙΑ ΔΚΠΑΙΓΔΤΗ ΔΝΟΣΗΣΑ 11 ε : ΦΧ ΔΡΓΑΛΔΙΑ ΚΑΣΑΚΔΤΔ Καηαζθεπή 1: Φαθόο κε ζσιήλα Γηαθξάγκαηα Δξγαιεία Καηαζθεπέο 2 Η θαηαζθεπή πεξηγξάθεηαη ζηελ αληίζηνηρε ελόηεηα

Διαβάστε περισσότερα

Εισαγωγή στοςρ κβαντικούρ ςπολογιστέρ και αλγόπιθμοςρ. Γηδάζθωλ : Φνπληνπιάθεο Αληώληνο

Εισαγωγή στοςρ κβαντικούρ ςπολογιστέρ και αλγόπιθμοςρ. Γηδάζθωλ : Φνπληνπιάθεο Αληώληνο Εισαγωγή στοςρ κβαντικούρ ςπολογιστέρ και αλγόπιθμοςρ. Γηδάζθωλ : Φνπληνπιάθεο Αληώληνο Θεματικές Ενότητες 1. Απιέο έλλνηεο θβαληηθήο κεραληθήο θαη ην ζύζηεκα δύν θβαληηθώλ θαηαζηάζεωλ. 2. Qubit θαη θβαληηθόο

Διαβάστε περισσότερα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΤΙΚΗ ΣΚΥΤΑΛΟΓΡΟΜΙΑ 2015 ΓΙΑ ΤΟ ΓΥΜΝΑΣΙΟ Τεηάπηη 28 Ιανουαπίου 2015 ΛΔΥΚΩΣΙΑ Τάξη: Α Γυμναζίου ΠΡΟΒΛΗΜΑ Σε έλα ηνπξλνπά βόιετ δήισζαλ ζπκκεηνρή νκάδεο Γπκλαζίσλ ηεο Κύπξνπ.

Διαβάστε περισσότερα

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ

ΚΔΦ. 2.4 ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ ΚΔΦ.. ΡΗΕΔ ΠΡΑΓΜΑΣΗΚΩΝ ΑΡΗΘΜΩΝ Οξηζκόο ηεηξαγσληθήο ξίδαο: Αλ 0 ηόηε νλνκάδνπκε ηεηξαγσληθή ξίδα ηνπ ηελ κε αξλεηηθή ιύζε ηεο εμίζσζεο:. Γειαδή ηεηξαγσληθή ξίδα ηνπ 0 ιέγεηαη ν αξηζκόο 0 πνπ όηαλ πςσζεί

Διαβάστε περισσότερα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ.. ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου έλαξμεο 09.30 ιήμεο 09.45 Σην παξαθάησ ζρήκα θαίλεηαη ηκήκα ελόο πνιενδνκηθνύ ζρεδίνπ κηαο πόιεο. Οη ζθηαζκέλεο

Διαβάστε περισσότερα

Αιγόξηζκνη Δνκή επηινγήο. Απιή Επηινγή ύλζεηε Επηινγή. Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Τ. introcsprinciples.wordpress.

Αιγόξηζκνη Δνκή επηινγήο. Απιή Επηινγή ύλζεηε Επηινγή. Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Τ. introcsprinciples.wordpress. Αιγόξηζκνη 2.2.7.3 Δνκή επηινγήο Απιή Επηινγή ύλζεηε Επηινγή Εηζαγσγή ζηηο Αξρέο ηεο Επηζηήκεο ησλ Η/Τ 1 Επηινγή ηελ πξάμε πνιύ ιίγα πξνβιήκαηα κπνξνύλ λα επηιπζνύλ κε ηνλ πξνεγνύκελν ηξόπν ηεο ζεηξηαθήο/αθνινπζηαθήο

Διαβάστε περισσότερα

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο

ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε. Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο ΟΣΑ Επηρεηξεζηαθή Ννεκνζύλε Ελόηεηα: Ad1.2.2 «Ση θξύβεηαη» πίζω από κηα Επηρεηξεζηαθή Αλαθνξά (report): XML & XSD γηα αξράξηνπο Πξαθηηθή Άζθεζε (επίπεδν 2): ηόρνο ηεο άζθεζεο είλαη ε πεξαηηέξω εμνηθείωζε

Διαβάστε περισσότερα

Πως να δημιουργήσετε ένα Cross-Over καλώδιο

Πως να δημιουργήσετε ένα Cross-Over καλώδιο Πως να δημιουργήσετε ένα Cross-Over καλώδιο Τν crossover καλώδιο ρξεζηκνπνηείηαη γηα λα ζπλδεζνύλ δπν ππνινγηζηέο κεηαμύ ηνπο θαη αλ θηηάμνπλ έλα κηθξό ηνπηθό δίθηπν(lan). Έλα LAN κπνξεί λα είλαη ηόζν

Διαβάστε περισσότερα

Oι Αρτές ηοσ Ταμείοσ Υποζηεριδόμενες Διαβίωζες (The Principles of the Supported Living Fund)

Oι Αρτές ηοσ Ταμείοσ Υποζηεριδόμενες Διαβίωζες (The Principles of the Supported Living Fund) Oι Αρτές ηοσ Ταμείοσ Υποζηεριδόμενες Διαβίωζες (The Principles of the Supported Living Fund) Δεθέκβξηνο 2011 Έθδνζε 1 Απηέο νη πιεξνθνξίεο είλαη γξακκέλεο κε επαλάγλσζην ηξόπν. Έρνπλ ρξεζηκνπνηεζεί εηθόλεο

Διαβάστε περισσότερα

Αντισταθμιστική ανάλυση

Αντισταθμιστική ανάλυση Θεσξήζηε έλαλ αιγόξηζκν Α πνπ ρξεζηκνπνηεί κηα δνκή δεδνκέλσλ Γ : Καηά ηε δηάξθεηα εθηέιεζεο ηνπ Α ε Γ πξαγκαηνπνηεί κία αθνινπζία από πξάμεηο. Παξάδεηγκα: Θπκεζείηε ην πξόβιεκα ηεο εύξεζεο-έλσζεο Δίρακε

Διαβάστε περισσότερα

ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών

ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών Πανεπιζηήμιο Κπήηηρ Τμήμα Επιζηήμηρ Υπολογιζηών www.csd.uoc.gr Επγαζηήπιο Υπηπεζιών Μεηαζσημαηιζμού www.tsl.gr ΗΥ-100 Ειζαγωγή ζηην Επιζηήμη Υπολογιζηών Ππώηη Διάλεξη Διαδικασία μαθήματος, Εισαγωγή στην

Διαβάστε περισσότερα

ΘΔΜΑ 1 ο Μονάδες 5,10,10

ΘΔΜΑ 1 ο Μονάδες 5,10,10 ΟΝΟΜΑΣΔΠΩΝΤΜΟ ΗΜΔΡΟΜΗΝΙΑ ΘΔΜΑ 1 ο Μονάδες 5,1,1 ΓΙΑΓΩΝΙΜΑ 1 ου ΜΔΡΟΤ ΣΗ ΑΝΑΛΤΗ Α Γώζηε ηνλ νξηζκό ηεο αληίζηξνθεο ζπλάξηεζεο Β Γείμηε όηη αλ κηα ζπλάξηεζε είλαη αληηζηξέςηκε ηόηε νη γξαθηθέο παξαζηάζεηο

Διαβάστε περισσότερα

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ..

ΚΤΠΡΙΑΚΗ ΜΑΘΗΜΑΣΙΚΗ ΕΣΑΙΡΕΙΑ ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου ΥΟΛΕΙΟ.. ΜΑΘΗΜΑΣΙΚΗ ΚΤΣΑΛΟΓΡΟΜΙΑ 2007 ΓΙΑ ΣΟ ΓΤΜΝΑΙΟ Παπασκευή 26 Ιανουαπίου 2007 Σάξη: Α Γυμνασίου έλαξμεο 09.30 ιήμεο 09.45 Σην παξαθάησ ζρήκα θαίλεηαη ηκήκα ελόο πνιενδνκηθνύ ζρεδίνπ κηαο πόιεο. Οη ζθηαζκέλεο

Διαβάστε περισσότερα

Intel Accelerate Your Code

Intel Accelerate Your Code Intel Accelerate Your Code Semester Project at Parallel & Distributed systems Dimitrios S. Tsiktsiris University of Western Macedonia Department of Informatics & Telecommunications Engineering Kozani,

Διαβάστε περισσότερα

ΗΜΔΡΟΜΗΝΙΑ. ΟΝΟΜΑΣΔΠΩΝΤΜΟ.. ΒΑΘΜΟΛΟΓΙΑ..

ΗΜΔΡΟΜΗΝΙΑ. ΟΝΟΜΑΣΔΠΩΝΤΜΟ.. ΒΑΘΜΟΛΟΓΙΑ.. ΗΜΔΡΟΜΗΝΙΑ. ΟΝΟΜΑΣΔΠΩΝΤΜΟ.. ΒΑΘΜΟΛΟΓΙΑ.. ΘΔΜΑ Α Σηηο εκηηειείο πξνηάζεηο Α.1 Α.4 λα γξάςεηε ζην ηεηξάδην ζαο ηνλ αξηζκό ηεο πξόηαζεο θαη, δίπια, ην γξάκκα πνπ αληηζηνηρεί ζηε θξάζε ε νπνία ηε ζπκπιεξώλεη

Διαβάστε περισσότερα

Άζθεζε 2ε ΤΣΗΜΑΣΑ ΔΛΔΓΥΟΤ ΑΝΟΙΚΣΟΤ ΒΡΟΥΟΤ ΚΑΙ MATLAB

Άζθεζε 2ε ΤΣΗΜΑΣΑ ΔΛΔΓΥΟΤ ΑΝΟΙΚΣΟΤ ΒΡΟΥΟΤ ΚΑΙ MATLAB Άζθεζε 2ε ΤΣΗΜΑΣΑ ΔΛΔΓΥΟΤ ΑΝΟΙΚΣΟΤ ΒΡΟΥΟΤ ΚΑΙ MATLAB. ςνάπηηζη μεηαθοπάρ Γηα ηε κειέηε ελόο ζπζηήκαηνο κε ην Matlab απαξαίηεηε πξνϋπόζεζε είλαη λα δεκηνπξγήζνπκε έλα κνληέιν, ώζηε λα εμεηάζνπκε ηα ραξαθηεξηζηηθά

Διαβάστε περισσότερα

ΦΤΛΛΟ ΔΡΓΑΙΑ 1 Βαζηθέο Έλλνηεο & Καηεγνξίεο Γηθηύσλ Τπνινγηζηώλ

ΦΤΛΛΟ ΔΡΓΑΙΑ 1 Βαζηθέο Έλλνηεο & Καηεγνξίεο Γηθηύσλ Τπνινγηζηώλ ΦΤΛΛΟ ΔΡΓΑΙΑ 1 Βαζηθέο Έλλνηεο & Καηεγνξίεο Γηθηύσλ Τπνινγηζηώλ Γξαζηεξηόηεηα 1ε αο δίλεηαη ν ελλνηνινγηθφο ράξηεο "Γίθηπα Τπνινγηζηψλ - Βαζηθέο Έλλνηεο" πνπ αθνξά ζηελ θεληξηθή έλλνηα "Γίθηπα Τπνινγηζηψλ".

Διαβάστε περισσότερα