Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 6 & 7) Πέμπτη ΠΚ2 11:15, 13:15, 15:15, 17:15 και 19:15

Σχετικά έγγραφα
Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 5)

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Βασικές Ασκήσεις από τα Εργαστήρια της Python. Πέμπτη Εργ. 3 17:15 και 19:15

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ Η/Υ (ΟΜΑΔΑ ΘΕΜΑΤΩΝ A)

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Σημειωματάριο μαθήματος 1ης Νοε. 2017

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

Σημειώσεις έκτης και έβδομης εβδομάδας

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

Αρχές Προγραμματισμού

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

τις αναδρομικές ακολουθίες (recursive sequences) στις οποίες ορίζαμε

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Η γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Η γλώσσα προγραμματισμού C

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

Σημειωματάριο Τετάρτης 18 Οκτ. 2017

Σημειωματάριο Δευτέρας 30 Οκτ. 2017

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Μεθόδων Επίλυσης Προβλημάτων

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραμματισμό

Ενότητα: Δυαδική Αναζήτηση Σχέδιο Δραστηριότητας: Παιχνίδι: Βρες τον αριθμό

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Αναδρομή Ανάλυση Αλγορίθμων

Σημειώσεις δεύτερης εβδομάδας

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Πληρουορική Γ Γσμμασίοσ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Η γλώσσα Fortress. Γιώργος Κορφιάτης. Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού, Εργαστήριο Λογισμικού, ΕΜΠ ...

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Συναρτήσεις. Εισαγωγή

Προγραμματισμός Ι (ΗΥ120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμός Ι (ΗΥ120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

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

Η βασική λειτουργία σε όλες αυτές τις συναρτήσεις είναι η εκτύπωση γραµµών.

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

Python 8. Δομές Δεδομένων ΙΙ

Βασικά Στοιχεία Python 3

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Πως θα αποθηκεύσει τη λίστα με τα ψώνια του και θα την ανακτήσει στο Σ/Μ; και πως θα προσθέσει στη λίστα του επιπλέον προϊόντα;

2.1 Διαιρετότητα, ισοϋπόλοιποι αριθμοί. q Z, a = b q + r.

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

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

Βασικές Ασκήσεις από τα Εργαστήρια της Python. Πέμπτη ΠΚ2 11:15, 13:15, 15:15, 17:15 και 19:15

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PYTHON (ΟΜΑΔΑ Α)

ΜΕΤΑΓΛΩΤΤΙΣΤΕΣ. Στην εξοικείωση με τη διαδικασία κατασκευής ενός Λεξικού Αναλυτή κάνοντας χρήση του lex.

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Μεθόδων Επίλυσης Προβλημάτων

Εισαγωγή στον Προγραμματισμό

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

ΘΕΜΑΤΑ ΚΑΙ ΛΥΣΕΙΣ. 1) Έστω η λογική συνάρτηση F = A' + Β'. D + B. C' + C. D' (όπου οι τόνοι δηλώνουν συμπληρώματα).

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Η γλώσσα προγραμματισμού C

Θέματα Προγραμματισμού Η/Υ

Θέματα Προγραμματισμού Η/Υ

Φροντιστήριο 4 Σκελετοί Λύσεων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η γλώσσα προγραμματισμού C

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

Διάλεξη 9η: Πίνακες (arrays)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Εργαστήριο 2: Πίνακες

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Σημειωματάαριο Δευτέρας 16 Οκτ. 2017

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΗΥ-150. Πίνακες (Arrays)

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

Transcript:

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 6 & 7) Πέμπτη ΠΚ2 11:15, 13:15, 15:15, 17:15 και 19:15 Στο προηγούμενο εργαστήριο είδαμε πως δηλώνουμε και πως καλούμε συναρτήσεις στην Python. Οι συναρτήσεις επιτρέπουν την τυποποίηση λειτουργιών και την επαναχρησιμοποίηση κώδικα. H συνάρτηση max3, που επιστρέφει την μέγιστη τιμή από τρεις μεταβλητές μπορεί να υλοποιηθεί με διάφορους τρόπους. 1. Με σύνθετα αυτόνομα if: def max3(a,b,c): if(a>=b and a>=c): return a if(b>=a and b>=c): return b if(c>=a and c>=b): return c 2. Με απλά εμφωλευμένα (nested) if: def max3(a,b,c): if (a>=b): if(a>=c): return a return c if(b>=c): return b return c 3. Με ένα if-elif- def max(a,b,c): if(a>=b and a>=c): return a elif (b>=a and b>=c): return b return c Εννοείται ότι επειδή στην Python οι μεταβλητές δεν έχουν συγκεκριμένο τύπο, η max3 μπορεί να κληθεί και περνώντας Strings: print(max('s','f','g')), αλλά και περνώντας ακέραιους: print(max(100,30,200)) 1 costis@teicrete.gr 9 Νοέμβρη 16

4. Η παρακάτω εκδοχή του προγράμματος βασίζεται στην χρήση της max2, που είναι υλοποιημένη με ένα απλό if, όπου το else δεν χρειάζεται, επειδή εάν δεν ισχύει η συνθήκη, ο έλεγχος θα περάσει αυτόματα στο δεύτερο return. Παρατηρείστε ότι εδώ η max3 υλοποιείται με χρήση της max2: def max2(a,b): if(a>=b): return a return b def max3(a,b,c): return max2(a,max2(b,c)) print(max3('s','f','g')) print(max3('maria','nikos','alex')) print(max3(100,30,201)) Αυτό το πρόγραμμα υλοποιεί αναζήτηση σε λίστα παραμέτρων ψάχνοντας το στοιχείο με την μέγιστη τιμή. def mymax(lista): max=lista[0] for i in lista: if i>max: max=i return max print(mymax([1,2])) print(mymax(['1','2','3','4'])) print(mymax([0])) Αυτό το πρόγραμμα βρίσκει το μέγιστο στοιχείο από λίστα χρησιμοποιώντας την max της Python. Έτσι μπορεί να αντικαταστήσει τις παραπάνω εκδοχές των max2 και max3, επειδή η λίστα μπορεί να περιέχει οποιοδήποτε αριθμό στοιχείων, άρα και 2 και 3. Για να μπορέσει όμως να λειτουργήσει σωστά πρέπει να καλέσουμε την max με λίστες από παραμέτρους ομοειδείς, αλλιώς δημιουργείται TypeError: unorderable types : print(max(100,30,201)) print(max(20,30,1,22,12,93,3,1)) print(max([1])) # προσοχή, max(1) δεν επιτρέπεται! Το παρακάτω πρόγραμμα είναι μία απλή δική μας υλοποίηση της συνάρτησης len, η οποία μετράει το μέγεθος του string ή της λίστας την οποία περνάμε σαν argument. Η len είναι ήδη υλοποιημένη στην Python και προφανώς δεν χρειάζεται άλλη υλοποίηση. 2 costis@teicrete.gr 9 Νοέμβρη 16

def len(lst): length=0 for i in lst: length+=1 return length print(len('a sentence')) print(len(['a','b','c'])) print(len([])) print(len('')) Δημιουργία πρόχειρου ιστογράμματος από τις τιμές πίνακα (Από το βιβλίο Deitel & Deitel), όπως υλοποιείται στη γλώσσα C: #include <stdio.h> #define SIZE 10 int main(void) { int n[size] = {19, 3, 15, 7, 11, 9, 13, 5, 17, 1}; int i; int j; printf("%s%13s%17s\n", "Element", "Value", "Histogram"); } for (i = 0; i < SIZE; i++) { printf("%7d%13d", i, n[ i ]); for (j = 1; j <= n[ i ]; j++) { /* print one bar */ printf("%c", '*'); } printf("\n"); } return 0; Εδώ βλέπουμε το ίδιο πρόγραμμα γραμμένο στην γλώσσα Python. Δημιουργία πρόχειρου ιστογράμματος από τις τιμές λίστας. Σε αντίθεση με την C, εδώ δεν χρειάζεται διπλό for επειδή η γλώσσα επιτρέπει εκφράσεις όπως '*'*5 π.χ. που θα τύπωνε 5 φορές '*'. Εδώ γίνεται χρήση του '*'*lista[i] : def histo(lista): print('element', 'Value', 'Histogram') for i in range(0,len(lista)): print('%3d%9d %s'%(i, lista[i], '*'*lista[i])) n=[19, 3, 15, 7, 11, 9, 13, 5, 17, 1] histo(n) 3 costis@teicrete.gr 9 Νοέμβρη 16

Και οι δύο υλοποιήσεις μας δίνουν το παρακάτω output: Element Value Histogram 0 19 ******************* 1 3 *** 2 15 *************** 3 7 ******* 4 11 *********** 5 9 ********* 6 13 ************* 7 5 ***** 8 17 ***************** 9 1 * Στο προηγούμενο μάθημα είδαμε ότι εάν κάνουμε import μία βιβλιοθήκη, τότε μπορούμε να καλέσουμε τις συναρτήσεις που περιέχει. Το αρχείο basics.py περιέχει δύο συναρτήσεις: # basics.py περιέχει 2 συναρτήσεις: def maxi(x,y): if (x < y): return y return x def mini(x,y): if (x > y): return y return x Τις συναρτήσεις μπορούμε να τις καλέσουμε από ένα άλλο αρχείο.py έτσι: import basics print(basics.maxi(3,21)) print(basics.mini("mitsos","kitsos")) 4 costis@teicrete.gr 9 Νοέμβρη 16

Δύο τρόποι για να επεξεργαστούμε μία λίστα 1 : Χρησιμοποιώντας while και len: movies = ["The Holy Grail", "The Life of Brian", "The Meaning of Life"] count = 0 while count < len(movies): print(movies[count]) count = count+1 Χρησιμοποιώντας for: movies = ["The Holy Grail", "The Life of Brian", "The Meaning of Life"] for each_item in movies: H λίστα movies μπορεί να περιέχει σύνθετες πληροφορίες, όπως τίτλο και έτος ταινίας: movies=["the Holy Grail", 1975, "The Life of Brian", 1979, "The Meaning of Life", 1983] movies ['The Holy Grail', 1975, 'The Life of Brian', 1979, 'The Meaning of Life', 1983] Το ίδιο θα μπορούσε να γίνει χρησιμοποιώντας insert και append για να προσθέσουμε τα έτη: movies = ["The Holy Grail", "The Life of Brian", "The Meaning of Life"] movies.insert(1,1975) movies.insert(3,1979) movies.append(1983) movies ['The Holy Grail', 1975, 'The Life of Brian', 1979, 'The Meaning of Life', 1983] 1 Παράδειγμα από το βιβλίο Head First Python του Paul Barry, O'REILLY - 2011 5 costis@teicrete.gr 9 Νοέμβρη 16

H λίστα movies μπορεί να περιέχει ακόμη πιο σύνθετες πληροφορίες, λίστες από ηθοποιούς: movies = [ "The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, ["Graham Chapman", ["Michael Palin", "John Cleese", "Terry Gilliam", "Eric Idle", "Terry Jones"]]] print(movies[4][1][3]) print(movies) ['The Holy Grail', 1975, 'Terry Jones & Terry Gilliam', 91, ['Graham Chapman', ['Michael Palin', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']]] for each_item in movies: The Holy Grail 1975 Terry Jones & Terry Gilliam 91 ['Graham Chapman', ['Michael Palin', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones']] Το for-loop δουλεύει εντάξει, αλλά επιλέγει μόνο τα περιεχόμενα της εξωτερικής λίστας. Τις εσωτερικές λίστες τις επιλέγει ολόκληρες, σαν στοιχεία της εξωτερικής λίστας. Με τον έλεγχο isinstance(each_item, list) για κάθε λίστα τυπώνουμε τα περιεχόμενα της: for each_item in movies: if isinstance(each_item, list): for nested_item in each_item: print(nested_item) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham Chapman ['Michael Palin', 'John Cleese', 'Terry Gilliam', 'Eric Idle', 'Terry Jones'] 6 costis@teicrete.gr 9 Νοέμβρη 16

Για να φτάσουμε στην εσωτερική λίστα πρέπει να γράψουμε τον κώδικά μας με διπλό έλεγχο: for each_item in movies: if isinstance(each_item, list): for nested_item in each_item: if isinstance(nested_item, list): for deeper_item in nested_item: print(deeper_item) print(nested_item) The Holy Grail 1975 Terry Jones & Terry Gilliam 91 Graham Chapman Michael Palin John Cleese Terry Gilliam Eric Idle Terry Jones Αν έχουμε λίστες με μεγάλο βάθος η παραπάνω προσέγγιση απαιτεί πολύπλοκο κώδικα. Εδώ βοηθάει η χρήση αναδρομής, όπου μία συνάρτηση καλεί τον εαυτό της: def print_lol(the_list): for each_item in the_list: if isinstance(each_item, list): print_lol(each_item) movies = [ "The Holy Grail", 1975, "Terry Jones & Terry Gilliam", 91, ["Graham Chapman", ["Michael Palin", "John Cleese", "Terry Gilliam", "Eric Idle", "Terry Jones"]]] print_lol(movies) 7 costis@teicrete.gr 9 Νοέμβρη 16

Συνάρτηση Fibonacci: def fib2(n): # return Fibonacci series up to n """Return a list containing the Fibonacci series up to n.""" result = [] a, b = 0, 1 while a < n: result.append(a) # see below a, b = b, a+b return result f100 = fib2(100) print(f100) # call it # write the result Αναδρομική συνάρτηση υπολογισμού παραγοντικού: def fact(x): '''Returns the factorial of its argument, assumed to be a posint''' if x == 0: return 1 return x * fact(x - 1) print print('n fact(n)') print("---------") for n in range(10): print(n, fact(n)) 8 costis@teicrete.gr 9 Νοέμβρη 16