Εργαςτήρια Πληροφορική ΙΙ Ειςαγωγή ςτη Python 1 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
H Python είναι μια πολφ όμορφθ, ιδιαίτερα εκφραςτικι, αντικειμενοςτραφισ, υψθλοφ επιπζδου γλϊςςα προγραμματιςμοφ. Το ςφςτθμα τφπων τθσ είναι πλιρωσ δυναμικό και θ διαχείριςθ μνιμθσ αυτόματθ, θ standard υλοποίθςι τθσ (CPython) είναι ζνασ bytecode compiler και interpreter και θ βιβλιοκικθ τθσ πολφ πλοφςια. Βαςικι αρχι τθσ Python είναι ότι ο χρόνοσ του προγραμματιςτι είναι πολφ ςθμαντικότεροσ από τουσ κφκλουσ μθχανισ και τον απαλλάςςει από τισ χαμθλοφ επιπζδου λεπτομζρειεσ που πρζπει να φροντίςει ςτθ C/C++ ι, ωσ ζνα βακμό, ςτθ Java. Ζνα πρόγραμμα είναι μία ακολουκία εντολών θ οποία προςδιορίηει πωσ κα εκτελεςτεί ζνασ υπολογιςμόσ. Αυτόσ ο υπολογιςμόσ μπορεί να είναι κάτι μακθματικό, όπωσ το να λφνεισ ζνα ςφςτθμα εξιςϊςεων ι το να βρίςκεισ τισ ρίηεσ ενόσ πολυωνφμου, αλλά επίςθσ μπορεί να είναι ζνασ ςυμβολικόσ υπολογιςμόσ, όπωσ το να ψάχνεισ και να αντικακιςτάσ κείμενο μζςα ςε ζνα ζγγραφο ι (περιζργωσ) να μεταγλωττίηεισ ζνα πρόγραμμα. Ο προγραμματιςμόσ είναι επιρρεπισ ςε λάκθ. Τα λάκθ ςτον προγραμματι ςμό ονομάηονται ςτα αγγλικά bugs ενϊ ςτα ελλθνικά ςφάλματα και θ διαδικαςία εντοπιςμοφ τουσ ονομάηεται debugging ή αποςφαλμάτωςη ςτα ελλθνικά. Τρία είδθ λακϊν μπορεί να ςυμβοφν ςε ζνα πρόγραμμα: ςυντακτικά λάκθ, λάκθ χρόνου εκτζλεςθσ και λογικά λάκθ. Είναι χριςιμο να γίνει διάκριςθ μεταξφ τουσ προκειμζνου να εντοπίηονται γρθγορότερα. υντακτικά λάθη: Η Python μπορεί να εκτελζςει ζνα πρόγραμμα μόνο εάν ζχει ςωςτι ςφνταξθ, διαφορετικά ο διερμθνζασ εμφανίηει μινυμα λάκουσ. Η ςφνταξθ αφορά τθ δομι ενόσ προγράμματοσ και τουσ κανόνεσ αυτισ τθσ δομισ. Για παράδειγμα, οι παρενκζςεισ πρζπει να είναι πάντα ηεφγθ, ζτςι το (1 + 2) είναι ςωςτό, αλλά το 8) είναι ζνα ςυντακτικό λάκοσ (syntax error). Λάθη χρόνου εκτζλεςησ: Ο δεφτεροσ τφποσ λάκουσ είναι τα λάκθ χρόνου εκτζλεςθσ (runtime errors), ονομάηονται ζτςι επειδι τα λάκθ δεν εμφανίηονται μζχρισ ότου αρχίςει το πρόγραμμα να τρζχει. Αυτά τα λάκθ ονομάηονται επίςθσ εξαιρζςεισ (exceptions) επειδι ςυνικωσ υποδεικνφουν ότι κάτι ςθμαντικό (και κακό) ζχει ςυμβεί. Λογικά λάθη: Ο τρίτοσ τφποσ λάκουσ είναι τα λογικά λάκθ (semantic errors). Εάν υπάρχει ζνα λογικό λάκοσ ςτο πρόγραμμά ςασ κα τρζξει επιτυχϊσ από τθν άποψθ ότι ο υπολογιςτισ δεν κα παράξει κανζνα μινυμα λάκουσ, αλλά δεν κα κάνει το ςωςτό. Θα κάνει κάτι διαφορετικό. Συγκεκριμζνα, κα κάνει αυτό που του είπατε να κάνει. Οι αςκιςεισ του ςυγκεκριμζνου εργαςτθρίου ζχουν ςχεδιαςτεί για να ςασ βοθκιςουν να αναπτφξετε τισ ικανότθτεσ ανάλυςθσ με ςκοπό να ςπάμε κάποια προβλιματα ςε ακόμθ μικρότερα. Επιπρόςκετα, θ ςυμπλιρωςθ αυτϊν των αςκιςεων κα ςασ βοθκιςει να οικειοποιθκείτε τθ ςφνταξθ τθσ Python. Ζτςι ςτα επόμενα μπορεί να μάκετε: Να παράγετε κάποια ζξοδο με μία διλωςθ ( ι αλλιϊσ εντολι) print. Να διαβάηετε μία είςοδο, ςυμπεριλαμβανομζνου του casting ςτθν ζξοδο που κζλετε εςείσ. Να υλοποιείτε υπολογιςμοφσ με αρικμοφσ ςυμπεριλαμβανομζνου ακεραίων και αρικμϊν κινθτισ υποδιαςτολισ χρθςιμοποιϊντασ τελεςτζσ τθσ Python, όπωσ: +, *, /, //, % και **. Να καλείτε ςυναρτιςεισ που χρειάηονται το math module Να ελζγχετε τθ μορφι τθσ εξόδου με τουσ προςδιοριςτζσ μορφισ (format specifiers) Η προτροπι ειςόδου εντολϊν (>>>) υποδεικνφει ότι ο διερμθνζασ περιμζνει τθν ειςαγωγι κάποιασ εντολισ από εςάσ. Για να εμφανίςουμε ζνα μινυμα ςτθ Python, π.χ. Python programming is fun! γράφουμε ςτθ προτροπι ειςόδου εντολϊν (prompt) τθν εξισ εντολι: >>> print( Python programming is fun! ) Για να εκτελεςτεί θ εντολι κα πρζπει να πατιςετε το πλικτρο Enter. Αν κάνετε κάποιο λάκοσ (π.χ. ςφάλμα πλθκτρολόγθςθσ) ο διερμθνζασ κα εμφανίςει ζνα μινυμα ςφάλματοσ. Γι αυτό το λόγο, 2 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
αν εμφανιςτεί κάποιο μινυμα ςφάλματοσ, ξαναπλθκτρολογιςτε τθν εντολι και ςιγουρευτείτε ότι τθ γράψατε ακριβϊσ. Όταν κανείσ γράφει κώδικα όπωσ προθγουμζνωσ, τότε αυτό ονομάηεται λειτουργία script. Δθλαδι γράφει κανείσ κώδικα και είναι ςε κζςθ να τον ελζγχει άμεςα (διαδραςτικι λειτουργία). Εάν κζλετε να κάνετε αρικμθτικζσ πράξεισ, τότε δεν ζχετε παρά να γράψετε: >>> 2+2 Οι πράξεισ που γίνονται ςτθ Python (και με ςειρά προτεραιότθτασ), φαίνονται ςτο πίνακα που ακολουκεί: Στθν Python δεν δθλϊνουμε πουκενά μεταβλθτζσ και τφπουσ αυτϊν, μποροφμε όμωσ ανά πάςα ςτιγμι να εκχωριςουμε μια τιμι ςε ζνα όνομα: >>> a=1234 >>> a="hello world" >>> print a hello world ΠΡΟΟΧΗ!!! Αυτό δε ςθμαίνει ότι δε γνωρίηουμε τουσ τφπουσ δεδομζνων, αφοφ όλοι οι αρικμοί δεν είναι ίδιοι, δεν αποκθκεφονται με τον ίδιο τρόπο ι ακόμθ απλοφςτερα, μπορεί να δουλεφουμε με αλφαρικμθτικά. Προγραμματίηοντασ ζχει ςθμαςία να γνωρίηει κανείσ τι είναι τφποσ δεδομζνων. Οι πιο γνωςτοί τφποι δεδομζνων είναι οι: 1 ο πρόγραμμα ςε Python: Εμφάνιςη μίασ γραμμήσ κειμζνου # Printing a line of text in Python. print "Welcome to Python!" 3 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
2 ο πρόγραμμα: Πωσ μποροφμε να εμφανίςουμε περιςςότερεσ γραμμζσ ςτη Python; Πρζπει να γράψουμε τθν εντολι: print "Welcome\nto\n\nPython!" ι να γράψουμε: print Welcome print to print Python ποιοί ειδικοί χαρακτήρεσ ( ή αλλιώσ χαρακτήρεσ διαφυγήσ escape characters) υπάρχουν όταν γράφουμε ζνα πρόγραμμα; Ακολουθία διαφυγήσ Επεξήγηςη Πρόςθεςη δφο ακεραίων # Simple addition program. # prompt user for input integer1=raw_input("enter first integer:\n") #διάβαζε αλθαπιθμηηικό integer1 = int(integer1) # μεηέηπεψε ηο string ζε integer (ακέπαιο) integer2 = raw_input( "Enter second integer:\n" ) # read string integer2 = int(integer2) #μεηέηπεψε ηο string ζε integer (ακέπαιο) sum = integer1 + integer2 # compute and assign sum print "Sum is", sum # print sum Όηαν κάνοςμε ηιρ βαζικέρ ππάξειρ ηα αποηελέζμαηα πος θα πποκύψοςν είναι: >>> 3 / 4 # ακέπαια διαίπεζη (εξ οπιζμού ζςμπεπιθοπά) 0 >>> 3.0 / 4.0 # ππαγμαηική διαίπεζη (floating-point ηελεζηαίοι) 0.75 >>> 3 // 4 # διαίπεζη κάηω μέποςρ [floor division (only behavior)] 0 >>> 3.0 // 4.0 # διαίπεζη κάηω μέποςρ κινηηήρ ςποδιαζηολήρ floating-point floor division 0.0 >>> from future import division >>> 3 / 4 # true division (new behavior) 4 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
0.75 >>> 3.0 / 4.0 # true division (same as before) 0.75 Θςμηθείηε ηιρ ενηολέρ πος ακολοςθούν: input(): Προηρέπει ηο τρήζηη να δώζει είζοδο πολλές θορές γράθονηάς ηοσ κάηι και επιζηρέθει ηο string ποσ ειζάγει ο τρήζηης. Ανηίζηοιτα (και ίζως καλύηερα) μπορείηε να τρηζιμοποιήζηε ηη raw_input. παπάδειγμα >>> name = input("enter your name: ") Enter your name: Antonis >>> print("greetings", name, "!") Greetings Antonis! >>> age = input("enter your age: ") Enter your age: 37 int(): Επιζηρέθει ηην ακέραια (int) μορθή ηοσ ορίζμαηος float(): Επιζηρέθει ηην float form (Μορθή κινηηής σποδιαζηολής) ηοσ ορίζμαηος eval(): Επιζηρέθει ηο αποηέλεζμα ηης αποηίμηζης ηοσ string ορίζμαηος όπως οποιαδήποηε έκθραζη ηης Python, ζσμπεριλαμβανομένοσ ηων αριθμηηικών εκθράζεων Προςπαθήςτε να λφςετε τισ αςκήςεισ που ακολουθοφν Άςκηςη 1 Τι κα μασ δϊςουν ωσ αποτζλεςμα οι πράξεισ που ακολουκοφν; >>> 2 + 3 * 6 >>> (2 + 3) * 6 >>> 2 ** 8 >>> 23 / 7 >>> 23 // 7 >>> 23 % 7 >>> 2 + 2 Άςκηςη 2 A) Τι κα μασ δϊςει ωσ αποτζλεςμα θ πράξθ; (5-1) * ((7 + 1) / (3-1)) B) Τι αποτζλεςμα κα μασ δϊςουν οι πράξεισ που ακολουκοφν; >>> Alice + Bob >>> 'Alice' + 42 >>> 'Alice' * 5 >>> 'Alice' * 'Bob' >>> 'Alice' * 5.0 Άςκηςη 3 Να δθμιουργθκεί πρόγραμμα που εμφανίηει το όνομα και τθ διεφκυνςθ του θλεκτρονικοφ ταχυδρομείου, μορφοποιθμζνο κατά τζτοιο τρόπο ωσ να είναι ζξω από ζνα χάρτινο φάκελο που πρόκειται να ταχυδρομθκεί. Το πρόγραμμα δε ηθτείται να διαβάηει είςοδο από το χριςτθ. 5 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
Άςκηςη 4 Να γραφεί πρόγαμμα που ρωτά το χριςτθ να ειςάγει ωσ είςοδο το όνομά του ι το όνομά τθσ. Το πρόγραμμα κα πρζπει να ανταποκρίνεται με ζνα μινυμα που λζει Hello ςτο χριςτθ, χρθςιμοποιϊντασ το όνομα που δόκθκε. Άςκηςη 5 Να γραφεί ζνα πρόγραμμα που ρωτά το χριςτθ να ειςάγει το πλάτοσ και το μικοσ ενόσ δωματίου. Από τθ ςτιγμι που κα διαβαςτοφν οι τιμζσ, το πρόγραμμα κα πρζπει να υπολογίηει και εμφανίηει το εμβαδό του δωματίου. Το μικοσ και το πλάτοσ να ειςαχκοφν ωσ αρικμοί κινθτισ υποδιαςτολισ. Τόςο θ είςοδοσ όςο και θ ζξοδοσ κα πρζπει να ζχουν μονάδεσ. Ερωτήςεισ (οι ερωτήςεισ μπορεί να βρεθοφν ςτο βιβλίο Ξεκινώντασ με την Python του Tonny Gaddis που υπάρχει ςτα προτεινόμενα βιβλία ςτον Εφδοξο. το παράρτημα του βιβλίου μπορείτε να βρείτε και τισ απαντήςεισ). 1. Τι είναι ζνα πρόγραμμα; 2. Ποιό τμιμα ενόσ υπολογιςτι εκτελεί ςτθν πραγματικότθτα τα προγράμματα; 3. Ποιό μζροσ του υπολογιςτι διατθρεί δεδομζνα για μεγάλο χρονικό διάςτθμα, ακόμθ και όταν δεν υπάρχει τροφοδοςία ρεφματοσ ςτον υπολογιςτι; 4. Πωσ λζγονται τα μζρθ του υπολογιςτι που δζχονται δεδομζνα από τουσ χριςτεσ και από άλλεσ ςυςκευζσ; 5. Πωσ λζγονται τα μζρθ του υπολογιςτι που μορφοποιοφν και παρουςιάηουν δεδομζνα ςτουσ χριςτεσ ι ςε άλλεσ ςυςκευζσ; 6. Ποιο κεμελιϊδεσ ςφνολο προγραμμάτων ελζγχει τισ εςωτερικζσ λειτουργίεσ του υλικοφ του υπολογιςτι; 7. Ποιά είναι θ μόνο γλϊςςα ςτθν οποία πρζπει να είναι γραμμζνεσ οι εντολζσ για να τισ καταλάβει άμεςα ζνασ επεξεργαςτισ; 8. Κάκε γλϊςςα ζχει ζνα ςφνολο κανόνων που πρζπει να ακολουκοφνται αυςτθρά κατά τθ ςφνταξθ ενόσ προγράμματοσ. Πωσ λζγεται το ςφνολο αυτό; 9. Πωσ ονομάηεται το πρόγραμμα που μεταφράηει ζνα πρόγραμμα γραμμζνο ςε γλϊςςα υψθλοφ επιπζδου ςε πρόγραμμα γλϊςςασ μθχανισ; 10. Πωσ ονομάηεται το πρόγραμμα που μεταφράηει και εκτελεί τισ εντολζσ ενόσ προγράμματοσ γραμμζνου ςε γλϊςςα υψθλοφ επιπζδου; 11. Τι τφποσ ςφάλματοσ προκαλείται ςυνικωσ από μία «ανορκόγραφθ» λζξθ-κλειδί, τθν παράλειψ ενόσ ςθμείου ςτίξθσ ι τθ λανκαςμζνθ χριςθ ενόσ τελεςτι; 12. Ποιά ποςότθτα μνιμθσ είναι αρκετι για τθν αποκικευςθ ενόσ γράμματοσ του αλφάβθτου ι ενόσ μικροφ αρικμοφ; 13. Τι ςθμαίνει bit; 14. Σε ποιό ςφςτθμα αρίκμθςθσ γράφονται όλεσ οι τιμζσ ωσ αλλθλουχία από 0 και 1; 15. Ποιό πρότυπο κωδικοποίθςθσ είναι αρκετά εκτενζσ ϊςτε να μπορεί να αντιπροςωπεφςει χαρακτιρεσ πολλϊν γλωςςϊν του κόςμου; 16. Τι ςθμαίνει «ψθφιακά δεδομζνα» και «ψθφιακι ςυςκευι»; 6 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.
Βιβλιογραφία και πηγζσ εργαςτηρίου Tonny Gaddis, Ξεκινϊντασ με τθν Python, 3θ ζκδοςθ, 2015 εκδόςεισ Da Vinci A Byte of Python Ben Stephenson, The Python WorkBook, A Brief Introduction with Exercises and Solutions, Springer 2014 https://foss.ntua.gr/wiki/index.php/ειςαγωγι_ςτθν_python 7 Σ ε λ ί δ α - Π λ θ ρ ο φ ο ρ ι κ ι Ι Ι τμι μ α Δ ι ο ί κ θ ς θ σ Ε π ι χ ε ι ρ ι ς ε ω ν Μαϊ ρ γ ι ϊ τ θ σ Α.