Βασικά στοιχεία γλώσσας προγραμματισμού Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19
Ας θυμηθούμε ξανά την παλιά μας «αγάπη» Η Python είναι μία σύγχρονη, διερμηνευόμενη, υψηλού επιπέδου γλώσσα γενικής χρήσης για την ανάπτυξη πολλών προγραμμάτων, από απλά έως τα πλέον σύνθετα (εκπαιδευτικά παιχνίδια, εμπορικές εφαρμογές, πλατφόρμες κοινωνικής δικτύωσης κλπ.) Υποστηρίζει διάφορα προγραμματιστικά υποδείγματα: Δομημένο προγραμματισμό Συναρτησιακό Αντικειμενοστρεφές Είναι αρθρωτή (modular), εύκολα δηλαδή ο προγραμματιστής φορτώνει επιπρόσθετες εξωτερικές βιβλιοθήκες με έτοιμο κώδικα στο πρόγραμμα του, κάνοντας τη ζωή του ευκολότερη.
Η ιστοσελίδα της Python Τελ. Επίσκεψη: Σεπτέμβριος 2016 www.python.org
Δεδομένα στην Python Ένα πρόγραμμα συνήθως επεξεργάζεται δεδομένα τα οποία μπορεί να είναι αποθηκευμένα στην κύρια μνήμη ή σε ένα αποθηκευτικό μέσο του υπολογιστή, ή η εισαγωγή τους γίνεται τώρα από κάποια μονάδα (π.χ. πληκτρολόγιο). Τα δεδομένα που χειρίζεται η Python μπορεί να είναι: Αριθμητικά Ακέραιοι αριθμοί (integer): 3, -9 Αριθμοί κινητής υποδιαστολής (float): 2.8, 4.0, 5Ε+2, 12.3Ε-2 Αλφαριθμητικά ή Συμβολοσειρές (string) Giannis, 12ab, 57 Λογικά (boolean) True, False 5x10 2 =5x100=500 Είτε μονά, είτε διπλά εισαγωγικά δεν έχει σημασία, αρκεί το ζευγάρι να είναι ίδιο Προσοχή στο κεφαλαίο T, F Python python
Ο τύπος δεδομένων μιας μεταβλητής προσδιορίζει το σύνολο των τιμών που μπορεί να πάρει μια μεταβλητή. Τυπικά, προσδιορίζει τον τρόπο παράστασης των δεδομένων εσωτερικά στον υπολογιστή και το είδος επεξεργασίας που μπορούν να γίνουν πάνω τους. Σε αντίθεση με όλες τις άλλες γλώσσες προγραμματισμού στην Python δεν ορίζεται ρητά ο τύπος δεδομένων μιας μεταβλητής και μάλιστα είναι συνηθισμένο να αλλάζει μέσα στο πρόγραμμα. a='abc' print a a=2 print a a=true print(a) Τύποι δεδομένων στην Python Η Python περιέχει δυναμικούς τύπους δεδομένων, που σημαίνει ότι οι έλεγχοι γίνονται κατά τον χρόνο εκτέλεσης και όχι κατά τον χρόνο μεταγλώττισης του προγράμματος. Ο τύπος δεδομένων της μεταβλητής καθορίζεται αφού πάρει πρώτα τιμή η μεταβλητή. Τύποι δεδομένων στην Python int float str bool
Τι τύπος είσαι εσύ; >>> type(2) <type 'int'> >>> type(2.3) <type 'float'> >>>type('giannis') <type 'str'> >>> type(true) <type 'bool'>
Τελεστές και τελεστέοι Τελεστές είναι τα ειδικά σύμβολα που αναπαριστούν υπολογισμούς (πράξεις) όπως η πρόσθεση και ο πολλαπλασιασμός. Οι τιμές στις οποίες εφαρμόζονται οι τελεστές ονομάζονται τελεστέοι. Αριθμητικοί Τελεστές Πρόσθεση Αφαίρεση Πολλαπλασιασμός Διαίρεση Ύψωση σε δύναμη Ακέραιο πηλίκο Ακέραιο υπόλοιπο : + : - : * : / : ** : // : % Προσοχή Python 2 9/2=4 9.0/2=4.5 Python 3 9/2=4.5 >>> 14/3 4 >>> 14.0/3 4.666666666666667 >>> 14/3.0 4.666666666666667 >>> 14.0/3.0 4.666666666666667 >>> 14//3 4 >>> 2*3 6 >>> 2**3 8 >>> 9%2 1 >>> 9-5 4 >>> 9+5 14
Συγκριτικοί (Σχεσιακοί) τελεστές Ίσο με : == Διάφορο από :!= Μεγαλύτερο από : > Μικρότερο από : < Μεγαλύτερο ή ίσο με : >= Μικρότερο ή ίσο με : <= True=1 False=0 >>> 6>4 True >>> 6==8 False >>> 6!=8 True >>> 6>=4 True >>> a=9 >>> b=7 >>> a>b True >>> 'a'>'b' False >>> 'γιάννης'<'κέρος' True >>> 'γιάννης'>'γιώργος' False >>>0==True False >>> x=4 >>> y=9 >>> z=8 >>> x>y>z False
Λογικοί τελεστές Σύζευξη Διάζευξη Άρνηση : and : or : not Πρόταση Α Πρόταση Β Α and B A or B False False False False False True False True True False False True True True True True Πρόταση Α False True not A True False >>> a=5 >>> b=4 >>> c=6 >>> a>b True >>> a>b and a>c False >>> a>b or a>c True >>> a>b and not a>c True >>> a>b or not a>c True >>> not(a>b) or a>c False >>> not a>b or a>c False
Προτεραιότητα Σειρά Τελεστής 1. ** Αριθμητικοί 2. *, /, //, % 3. +, - Συγκριτικοί 4. >, >=, <, <=, ==,!= 5. not Λογικοί 6. and 7. or Παρατηρήσεις 1. Όταν υπάρχουν τελεστές με την ίδια προτεραιότητα τότε εκτελούνται αυστηρά από τα αριστερά προς τα δεξιά. 2. Οι υπολογισμοί μέσα στις παρενθέσεις προηγούνται. >>> 3*2+6*4 30 >>> 3*2**3 24 >>> 19%5//4*18 18 >>> 20//3<=7 True >>> 2==5 or 5!=6 and 7<=6 False
Παραδείγματα με ενδιαφέρον >>> 20//3*4 24 >>> 20%3*4 8 >>> 6*3/2*4 36 >>> 6*3.0/2*4 36.0 >>> 6*3.0/(2*4) 2.25 >>> 6+3/(2*4) 6 >>> 6+3.0/(2*4) 6.375 >>> 3+4 7 >>> 'a'+'b' 'ab' >>> 2*3 6 >>> 'la'*3 'lalala' Συνένωση Επανάληψη του κειμένου
Τελεστές (Σύνοψη) Αριθμητικοί Σχεσιακοί Λογικοί + - * / % // ** Πρόσθεση Αφαίρεση Πολλαπλασιασμός Διαίρεση Ακ. Υπόλοιπο Ακ. Πηλίκο Δύναμη == Ισότητα!= Διάφορο < Μικρότερο > Μεγαλύτερο <= Μικρότερο ή ίσο >= Μεγαλύτερο ή ίσο and or not και ή όχι
Μεταβλητές στην Python Μεταβλητή είναι ένα σύμβολο που «δείχνει» σε μία τιμή. Χρησιμοποιείται για να συμβολίσουμε τις ποσότητες που χειριζόμαστε στο πρόγραμμα, τα δεδομένα μας. Κάθε μεταβλητή διαθέτει ένα όνομα και μία τιμή. Το όνομα της παραμένει σταθερό αλλά η τιμή της μπορεί να αλλάζει. Παραδείγματα a=16 num=7 pi=3.14 ok=false
a=1 Μεταβλητές στην Python ή Οι μεταβλητές στην Python λειτουργούν σαν ετικέτες με κάποιο όνομα, που χρησιμεύουν για να αναφερόμαστε (ή αλλιώς για να δείχνουμε) σε κάποια αντικείμενα. Ο τύπος της μεταβλητής είναι ο εκάστοτε τύπος του αντικειμένου στην οποία αναφέρεται.
Μεταβλητές στην Python Στο διπλανό παράδειγμα με την εντολή a = 125, δημιουργείται η μεταβλητή a η οποία αναφέρεται στην τιμή 125 (ακέραια). Όταν θέσουμε στη συνέχεια a = 250.7, η μεταβλητή a παύει πλέον να δείχνει την τιμή 125 και δημιουργείται ένα νέο δέσιμο ώστε να αναφέρεται στην τιμή 250.0 (πραγματική) κοκ Η Python παρακολουθεί όλες τις τιμές και τις διαγράφει όταν πάψουν να υπάρχουν μεταβλητές που να αναφέρονται σε αυτές. Η διαδικασία αυτή ονομάζεται συλλογή σκουπιδιών (garbage collection). >>> a=125 >>> type(a) <type int > >>> a=250.7 >>> type(a) <type float > >>> a=true >>> type(a) <type bool > >>> a= Hello >>> type(a) <type str >
Αναπαράσταση μεταβλητών στη μνήμη Εντολές Άλλες γλώσσες Αποτέλεσμα στη μνήμη Python a=1 a=2 b=a
Κανόνες ονοματολογίας μεταβλητών Ο πρώτος χαρακτήρας μπορεί να είναι μόνο ένα γράμμα της αλφαβήτου ή κάτω παύλα ( _ ). Το υπόλοιπο του ονόματος μπορεί να είναι γράμματα της αλφαβήτου, κάτω παύλες ( _ ) ή ψηφία (0..9). Υπάρχει διάκριση πεζών - κεφαλαίων. Για παράδειγμα, τα myname και myname δεν είναι ίδια. Μπορείτε να χρησιμοποιήσετε ελληνικούς χαρακτήρες στην Python 3 (δεν προτείνεται) αλλά όχι στην Python 2. Δεν μπορεί το όνομα ενός αναγνωριστικού να είναι μια δεσμευμένη λέξη της Python (εντολή, συνάρτηση κλπ.) Σωστά ονόματα: i, myname, my_name, name_23, a1b2_c3 Λάθος ονόματα: 2things, my name, my-name, myname
Έξοδος Η συνάρτηση print a=2 print a x=3 y=4 print x,y print '1o ΕΠΑΛ' k=9 print 3*k+2 b=18 print 'Ο βαθμός είναι',b print 'ΠΑΟΚ' print 'ΑΡΗΣ' print 'ΠΑΟΚ', print 'ΑΡΗΣ' 2 3 4 1o ΕΠΑΛ 29 Ο βαθμός είναι 18 ΠΑΟΚ ΑΡΗΣ ΠΑΟΚ ΑΡΗΣ Xρησιμοποιείται για την εμφάνιση τιμών στην οθόνη του υπολογιστή, με ποικίλες μορφές, όπως: print όνομα_μεταβλητής, π.χ. print name print αριθμός, π.χ. print 1045.34 print συμβολοσειρά, π.χ. print θαλασσινός αέρας print όνομα_μεταβλητής (τελεστής) αριθμός
Είσοδος Η συνάρτηση raw_input() Στα περισσότερα προγράμματα απαιτείται η είσοδος δεδομένων από τον χρήστη. Για τον σκοπό αυτό η Python διαθέτει δύο ενσωματωμένες συναρτήσεις, την raw_input() και την input(). Κάθε φορά που καλείται η συνάρτηση αυτή από το πρόγραμμα, αυτό σταματάει και περιμένει από τον χρήστη να πληκτρολογήσει κάτι. Όταν ο χρήστης πληκτρολογήσει την είσοδο και πατήσει το πλήκτρο Enter, το πρόγραμμα συνεχίζει τη ροή εκτέλεσης και η συνάρτηση input επιστρέφει την είσοδο σαν συμβολοσειρά. Χρήσιμο είναι να εμφανίζεται και ένα μήνυμα (prompt) που να πληροφορεί τον χρήστη για το είδος της εισόδου που αναμένεται από το πρόγραμμα. >>> name=raw_input('πως σε λένε;') Πως σε λένε;john >>> print name John
Είσοδος Η συνάρτηση raw_input() >>> x=raw_input('δώστε έναν αριθμό:') Δώστε έναν αριθμό:5 >>> k=x*2+1 Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> k=x*2+1 TypeError: cannot concatenate 'str' and 'int' objects >>> x=raw_input('x=') x=7 >>> print x+'1' 71
Είσοδος Η συνάρτηση input() Η συνάρτηση input(), έχει παρόμοια λειτουργία με την raw_input() με την ουσιαστική διαφορά ότι δεν επιστρέφει απαραίτητα συμβολοσειρά (κείμενο) αλλά προσπαθεί να μαντέψει το είδος των δεδομένων και να κάνει αυτόματα την σωστή μετατροπή. >>> x=input('δώστε έναν αριθμό:') Δώστε έναν αριθμό:5 >>> k=x*2+1 >>> print k 11 >>> x=input('x=') x=7 >>>y=(x+3)*5 >>> y 50 >>> x=input('x=') x=7 >>> x+=10 >>> x 17
Διευκρινήσεις Είναι σημαντικό να θυμόμαστε ότι η συνάρτηση raw_input() επιστρέφει πάντα συμβολοσειρά. Ωστόσο, όπως είπαμε σε προηγούμενη ενότητα η Python μας προσφέρει ενσωματωμένες συναρτήσεις για μετατροπή από έναν τύπο δεδομένων σε έναν άλλο: float(x): μετατρέπει ακέραιους αριθμούς και συμβολοσειρές σε αριθμούς κινητής υποδιαστολής. int(x): μετατρέπει αριθμούς κινητής υποδιαστολής σε ακεραίους, κόβωντας τα δεκαδικά ψηφία και συμβολοσειρές (που μοιάζουν με αριθμούς) σε ακέραιους αριθμούς. str(x): μετατρέπει αριθμούς σε συμβολοσειρές. Οι συναρτήσεις int και float επιστρέφουν μία τιμή, έναν ακέραιο αριθμό ή έναν αριθμό κινητής υποδιαστολής αντίστοιχα, αλλά δεν αλλάζουν τον τύπο μιας μεταβλητής και την τιμή στην οποία αυτή δείχνει. Αν θέλουμε, μπορούμε να εκχωρήσουμε την επιστρεφόμενη τιμή σε μια νέα μεταβλητή.
Παραδείγματα >>> float(8) 8.0 >>> int('124')+6 130 >>> int(float('3.14')) 3 >>> str(24)*2 '24124' >>> int(6.3) 6 >>> str(7)+ '3' 73 >>> int('13') 13 >>> x=int(raw_input('x=')) x=5 >>> print x+3 8
Παραδείγματα >>> x=raw_input(give a number:') Give a number: 5 >>> y=x**2 Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> y=x**2 TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' >>> x=input('x=') x=5 >>> t=x**2 >>> print t 25 >>> x=int(input( x=')) x=5 >>> t=x**2 >>> print t 25
Παραδείγματα >>> num=5 >>> word='give me'+num Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> word='give me'+num TypeError: cannot concatenate 'str' and 'int' objects >>> word='give me'+str(num) >>> print word Give me5
# Σχόλια Σχόλια Τα σχόλια μπαίνουν σε οποιοδήποτε σημείο του προγράμματος με σκοπό να δώσουν διευκρινήσεις σχετικά με την αναγκαιότητα ενός τμήματος προγράμματος, μιας μεταβλητής ή μιας πράξης. Σχόλια εισάγονται με το σύμβολο της # Είναι καλό κάθε νέο πρόγραμμα μας να έχει για πρώτη του σειρά ένα σχόλιο με την περιγραφή του προγράμματος #Πρόγραμμα υπολογισμού μέσου όρου μαθητή m1=input() m2=input() mo=(m1+m2)/2 print mo
Βασικές (ενσωματωμένες) συναρτήσεις abs() : επιστρέφει την απόλυτη τιμή ενός αριθμού pow(a,b) : επιστρέφει τη δύναμη του a υψωμένη στο b divmod(x,y) : επιστρέφει το πηλίκο και το υπόλοιπο της ακέραιης διαίρεσης του χ με το y round(num) : επιστρέφει το στρογγυλοποιημένο ακέραιο που προκύπτει από τον num >>> a=-5 >>> abs(a) 5 >>> x=3 >>> y=2 >>> pow(y,x) 8 >>> x=9 >>> y=4 >>> divmod(x,y) (2, 1) >>> round(4.7) 5.0 >>> round(3.4) 3.0 >>> round(3.5) 4.0 >>> 3.0/2 1.5 >>> 3/2 1 >>> float(3)/2 1.5 >>> float(3/2) 1.0
Επιπλέον συναρτήσεις H Python είναι μία γλώσσα με πολλά αρθρώματα (modules) Άρθρωμα ή μονάδα (module); Μία συλλογή από συναρτήσεις που μας προσφέρονται δωρεάν στο διαδίκτυο με την βοήθεια των οποίων μπορώ να κάνω πολλά επιπλέον πράγματα που η βασική Python δεν προσφέρει. Τις συλλογές αυτές τις έχουν κατασκευάσει άλλοι για εμάς πριν από εμάς (για παράδειγμα επιπλέον μαθηματικές συναρτήσεις, δημιουργία παιχνιδιών κλπ.) Εισαγωγή μιας τέτοιας μονάδας στο σύστημά μας import όνομα_μονάδας
Επιπλέον συναρτήσεις εισαγωγή μονάδας χρήση συνάρτησης μονάδας >>> import math >>> math.pi 3.141592653589793 >>> math.floor(4.2) 4.0 >>> math.floor(4.9) 4.0 >>> math.floor(-4.2) -5.0 >>> math.floor(-4.9) -5.0 >>> math.sqrt(16) 4.0 >>> import random >>> random.randint(1,6) 6 >>> random.randint(1,6) 1 Μπορώ να δηλώσω ότι θα χρησιμοποιήσω όλη την βιβλιοθήκη ή Μια συγκεκριμένη συνάρτηση της βιβλιοθήκης >>>from math import sqrt >>>sqrt(16) 4.0
Καλές τεχνικές Να δίνουμε ένα χαρακτηριστικό τίτλο στο πρόγραμμα με τη μορφή σχολίων, τα οποία ξεκινάνε με το σύμβολο #. Αυτό, αν και δεν είναι αναγκαίο, είναι χρήσιμο. Να προσέχουμε τα κενά διαστήματα πριν την κάθε εντολή, καθώς όπως ξέρουμε η Python βασίζεται σε αυτά για να ορίσει ομάδες εντολών. Να επιλέγουμε τους κατάλληλους τελεστές και να δίνουμε ιδιαίτερη προσοχή στην προτεραιότητα των πράξεων. Να χρησιμοποιούμε τα ίδια εισαγωγικά (μονά εισαγωγικά με μονά, διπλά εισαγωγικά με διπλά) για μια συμβολοσειρά. Να προσθέτουμε, όπου κρίνουμε χρήσιμο, επεξηγηματικά σχόλια μέσα στον κώδικα. Αυτά τα σχόλια θα βοηθήσουν κάποιον προγραμματιστή να κατανοήσει το πρόγραμμα και να το βελτιώσει αν χρειαστεί. Ακόμα και εμάς θα μας βοηθήσει να θυμηθούμε τι κάνει αν δούμε το πρόγραμμα κάποιους μήνες μετά τη δημιουργία του. Να δίνουμε ονόματα μεταβλητών που έχουν σχέση με τη χρήση τους.