ΜΥΥ105: Εισαγωγή στον Προγραμματισμό

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Αναδρομικοί Αλγόριθμοι
Advertisements

Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές
Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές
Εργαστήριο Λειτουργικών Συστημάτων Φροντιστήριο 2– Εισαγωγή στη Bash Ντίρλης Νικόλαος.
Γλωσσική Τεχνολογία Object-Orientation in Python.
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Τεχνολογία ΛογισμικούSlide 1 Έλεγχος Καταψύκτη (Ada) Τεχνολογία ΛογισμικούSlide 39 with Pump, Temperature_dial, Sensor, Globals, Alarm; use Globals ; procedure.
Εισαγωγικό Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
ΠΕΡΙΓΡΑΦΗ ΓΛΩΣΣΑΣ PYTHON
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Προγραμματισμός ΙΙ Διάλεξη #6: Απλές Δομές Ελέγχου Δρ. Νικ. Λιόλιος.
1 Ολυμπιάδα Πληροφορικής Μάθημα 2. 2 Στόχοι μαθήματος Αριθμητικοί– Λογικοί Τελεστές Η εντολή IF.
Προγραμματισμός ΙΙ Διάλεξη #5: Εντολές Ανάθεσης Εντολές Συνθήκης Δρ. Νικ. Λιόλιος.
Διαφάνειες παρουσίασης Πίνακες (συνέχεια) Αριθμητικοί υπολογισμοί Αναδρομή.
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
32η Συνάντηση Εκπαιδευτικών στη Δυτική Μακεδονία σε Θέματα Τ. Π. Ε
HY340 : ΓΛΩΣΣΕΣ ΚΑΙ ΜΕΤΑΦΡΑΣΤΕΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ, ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ, ΤΜΗΜΑ ΕΠΙΣΤΗΜΗΣ ΥΠΟΛΟΓΙΣΤΩΝ ΔΙΔΑΣΚΩΝ Αντώνιος Σαββίδης.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό Έλεγχος Ροής - Παραδείγματα Χειμερινό Εξάμηνο 2015.
1 Εισαγωγή στην επιστήμη των υπολογιστών Υπολογιστές και Δεδομένα Κεφάλαιο 4ο Πράξεις με μπιτ.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγ/μό Η/Υ
Προγραμματισμός Η/Υ Τμήμα Πολιτικών Έργων Υποδομής
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Η Γλώσσα Pascal Εντολή If
Αντικειμενοστραφής Προγραμματισμός ΙΙ
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Εισαγωγή στον Προγ/μό Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
Θεωρία Γραφημάτων Ενότητα 9 Μετασχηματισμοί Υπολογιστικών Προβλημάτων
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Καθορίζουν το είδος των υπό δημιουργία περιπτώσεων ελέγχου.

Εφαρμογές Υπολογιστών
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Ενότητα Εισαγωγή Είναι εύκολη στη χρήση και στην εκμάθηση.
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΤΕΧΝΟΛΟΓΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ
ΕΥΡΕΣΗ ΜΕΓΙΣΤΟΥ ΚΟΙΝΟΥ ΔΙΑΙΡΕΤΗ
Εισαγωγή στην Ασφάλεια Δικτύων
Ταξινόμηση Φυσσαλίδας (bubblesort)
Δομές διακλάδωσης, επαναλήψεις, μέθοδοι
Ταξινόμηση Ορισμός: Δοθέντων των στοιχείων a1,a2,… ,an η ταξινόμηση συνίσταται στην αντιμετάθεση της θέσης των στοιχείων ώστε να τοποθετηθούν με μια νέα.
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ
«Από τη MicroWorlds Pro στην Python»
Υπολογιστικά Φύλλα με το MS Excel
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
ΜΥΥ105: Εισαγωγή στον Προγραμματισμό
Δυναμικός Κατακερματισμός
Γλώσσα Προγραμματισμού V PHP
Πολυπλοκότητα Αλγορίθμων
Κεφάλαιο 7 10/11/2018 Ξένιος Αντωνιάδης.
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
Sắp thứ tự.
Ομαδοποίηση αντικειμένων
Μεταγράφημα παρουσίασης:

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό Επαναληπτικές Ασκήσεις

Μεταβλητές Τι θα τυπώσουν τα παρακάτω προγράμματα? Γιατί? 4 def add(): y = x+1 print(y) x = 3 add() 4 H add χρησιμοποιεί την καθολική μεταβλητή x def add(): x = x+1 print(x) x = 3 add() UnboundLocalError: local variable 'x' referenced before assignment Από την στιγμή που εκχωρούμε τιμή στην x γίνεται τοπική μεταβλητή

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? 4 5 def add(x): y = x+1 print(y) x = 3 y = 5 add(x) 4 5 Το y είναι τοπική μεταβλητή στην add και δεν αλλάζει την μεταβλητή y στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? [2,4] [1,2] def createList(x): L = [x,2*x] print(L) L = [1,2] x = 2 createList(x) [2,4] [1,2] Το L είναι τοπική μεταβλητή στην add και δεν αλλάζει την μεταβλητή L στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? 4 3 def add(x): x = x+1 print(x) x = 3 add(x) 4 3 Το x είναι παράμετρος στην add και άρα τοπική μεταβλητή. Επειδή είναι μη μεταβαλλόμενο αντικείμενο, η αλλαγή του x δεν μεταφέρεται στο κύριο πρόγραμμα

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? [1,2,3] Οι μεταβλητές Χ και L δείχνουν στο ίδιο αντικείμενο, και η λίστα είναι μεταβαλλόμενο αντικείμενο. H αλλαγή στα περιεχόμενα του L αλλάζει και τα περιεχόμενα του Χ def add(L): L.append(3) print(L) Χ = [1,2] add(Χ) print(Χ)

Μεταβλητές Τι θα τυπώσει το παρακάτω πρόγραμμα? Γιατί? [1,2,3] [1,2] Τα Χ και L δείχνουν αρχικά στο ίδιο αντικείμενο. H αλλαγή στην τιμή του L αλλάζει το που δείχνει το L, αλλά επειδή είναι τοπική μεταβλητή δεν αλλάζει που δείχνει το Χ. Τα περιεχόμενα του αντικειμένου στο οποίο δείχνει το Χ δεν μεταβάλλονται. def add(L): L = [1,2,3] print(L) Χ = [1,2] add(Χ) print(Χ)

Λίστες Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα 2 λίστες και θα επιστρέφει το γινόμενo των 2 «μεσαίων» στοιχείων τους. Π.χ. L1 = [5,1,3,2,4], L2 = [9,2,1,8,0] median(L1) = 3, median(L2) = 2 result = 6 def multimedians(L1,L2): L1.sort() L2.sort() return L1[len(L1)//2]*L2[len(L2)//2]

Λίστες Τι θα τυπώσει το παρακάτω: Συμπληρώστε το παρακάτω πρόγραμμα ώστε να τυπώσει το πρώτο στοιχείο της λίστας αν η λίστα έχει ζυγό αριθμό στοιχείων: list = [1, 1, 2, 3, 5, 8, 13] print(list[list[4]]) list = [1, 2, 3, 4] if ___(list) % 2 == 0 print(list[ ___ ])

Λίστες Γράψτε μια συνάρτηση minn, η οποία θα παίρνει σαν ορίσματα μια λίστα και έναν αριθμό n και θα επιστρέφει το μικρότερο από τα πρώτα n στοιχεία της λίστας. Π.χ. L = [5,2,3,1,4] minn(L,1) = 5, minn(L,2) = 2, minn(L,3) = 2, minn(L,4) = 1 def minn(L,n): m = L[0] for i in range(1, min(n,len(L))): if L[i]<m: m=L[i] return m H εντολή return min(L[:n]) κάνει την ίδια δουλειά!

Αλφαριθμητικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό, το οποίο θα είναι ένα κείμενο, και θα επιστρέφει τη λέξη με τους περισσότερους χαρακτήρες. Η συνάρτηση θα πρέπει να μην υπολογίζει τυχόν τελείες ως μέρη των λέξεων. Π.χ. s = ‘I went to the shops today. I bought a cake.’ result = ‘bought’ def longest(s): s2 = s.replace('.',' ') l = s2.split() res = '' for w in l: if len(w)>len(res): res = w return res

Αλφαριθμητικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό, το οποίο θα είναι ένα κείμενο, και θα επιστρέφει τη λέξη με τους περισσότερους χαρακτήρες. Η συνάρτηση θα πρέπει να μην υπολογίζει τυχόν τελείες ως μέρη των λέξεων. Π.χ. s = ‘I went to the shops today. I bought a cake.’ result = ‘bought’ def longest(s): s2 = s.replace('.',' ') l = s2.split() return max(l, key=len) Χρησιμοποιώντας το προαιρετικό όρισμα key στη συνάρτηση max συγκρί-νουμε τα στοιχεία με βάση τη συνάρτηση που δίνεται σαν τιμή στο όρισμα. Το όρισμα key υπάρχει και σε άλλες μεθόδους/συναρτήσεις (sort, min, κλπ.)

Αλφαριθμητικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό και θα επιστρέφει ένα αντίγραφό του, όπου οι τελευταίοι 5 χαρακτήρες θα είναι με ανεστραμμένη σειρά. Π.χ. s = ‘I went to the market’ result = ‘I went to the mtekra’ def rev(s): x = s[-5:] l = list(x) l.reverse() y = ''.join(l) return s[:-5]+y H εντολή return s[:-5]+s[-5:][::-1] κάνει την ίδια δουλειά!

Λεξικά Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό, το οποίο θα είναι ένα κείμενο, και θα επιστρέφει ένα λεξικό, όπου για κάθε μήκος θα καταγράφεται πόσες λέξεις έχουν αυτό το μήκος. Η συνάρτηση θα πρέπει να μην υπολογίζει τυχόν τελείες ως μέρη των λέξεων. Π.χ. s = ‘I went to the shops today. I bought a cake.’ result = {1: 3, 2: 1, 3: 1, 4: 2, 5: 2, 6: 1} def lengths(s): s2 = s.replace('.',' ') l = s2.split() d = {} for w in l: if len(w) in d: d[len(w)] += 1 else: d[len(w)] = 1 return d

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία που δεν είναι 0. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1,3,2,2] def nozeros(L): L2 = [] for x in L: if x != 0: L2.append(x) return L2

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία που δεν είναι 0, σε μία γραμμή χρησιμοποιώντας list comprehension. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1,3,2,2] def nozeros(L): return [x for x in L if x != 0]

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία μέχρι το πρώτο 0. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,2,1] def untilzero(L): L2 = [] for x in L: if x == 0: break L2.append(x) return L2

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα και θα επιστρέφει μια νέα λίστα, η οποία θα έχει μόνο τα στοιχεία μέχρι το πρώτο 0, αλλά χωρίς τα 2. Π.χ. L = [3,2,1,0,3,2,0,2] result = [3,1] def untilzeronotwos(L): L2 = [] for x in L: if x == 0: break if x != 2: L2.append(x) return L2

Έλεγχος ροής Γράψτε την προηγούμενη συνάρτηση ξανά, αλλά με χρήση while αντί για if. def untilzeronotwos2(L): L2 = [] while L: x = L.pop(0) if x == 0: break if x != 2: L2.append(x) return L2

Έλεγχος ροής Γράψτε μία συνάρτηση η οποία παίρνει μια λίστα σαν όρισμα και αφαιρεί όλα τα μηδενικά, αλλάζοντας την λίστα-όρισμα αντί να επιστρέφει μία νέα λίστα. def nozeros(L): c = 0 for x in L: if x == 0: c+=1 for i in range(c): L.remove(0) def nozeros(L): while 0 in L: L.remove(0)

Έλεγχος ροής Γράψτε μία συνάρτηση η οποία παίρνει μια λίστα σαν όρισμα και αφαιρεί όλα τα στοιχεία μέχρι το πρώτο μηδενικό, αλλάζοντας την λίστα-όρισμα αντί να επιστρέφει μία νέα λίστα. def removeuntilzero(L): while L.pop(0) != 0: pass

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα τυπώνει τις δυνάμεις του 2 απο το 21 εώς το 2n χωρισμένες με διαστήματα Π.χ. n = 6 result = 2 4 8 16 32 64 def powers(n): for i in range(1,n+1): print(pow(2,i), end=' ')

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα αριθμών και θα επιστρέφει True αν η λίστα είναι αριθμητική ακολουθία, αλλιώς False. Αριθμητική ακολουθία: η διαφορά μεταξύ συνεχόμενων στοιχείων είναι σταθερή Π.χ. L = [3,6,9,12,15] True L = [3,6,9,10,13] False L = [3] True def arithmetic(L): if len(L)<2: return True diff = L[1]-L[0] for i in range(1,len(L)-1): if L[i+1]-L[i] != diff: return False

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα αλφαριθμητικό και θα επιστρέφει το ακρώνυμό του. Η συνάρτηση θα πρέπει να μετατρέπει τα πεζά σε κεφαλαία όπου χρειάζεται Π.χ. s = ‘central processing unit’ result = ‘CPU’ def acronym(s): L = s.split() res = '' for w in L: res = res + w[0].upper() return res

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα L θα μετατρέπει κάθε στοιχείο L[i] της L στο άθροισμα των στοιχείων απο τη θέση i και μετά Π.χ. L = [2, 5, 6, 4, 3, 0] L = [20, 18, 13, 7, 3, 0] def rangesum(A): for i in range(len(A)-1): A[i] = sum(A[i:]) def rangesum(A): if len(A)>1: for i in range(len(A)-2,-1,-1): A[i] += A[i+1]

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα μια λίστα L, θα βρίσκει την υπολίστα της L με το μέγιστο άθροισμα και θα επιστρέφει το άθροισμα. Π.χ. L = [2, -5, 6, 4, -3, 10, -2, 1] result = 17 def maxsublist(L): m = L[0] # first elem of L for i in range(len(L)): #start index for j in range(i,len(L)): #end index if sum(L[i:j]) > m: m = sum(L[i:j]) return m

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα δισδιάστατο πίνακα Α και θα τον μετατρέπει ώστε κάθε στοιχείο στην πρώτη στήλη να είναι το άθροισμα όλων των στοιχείων της γραμμής του Π.χ. A = [[2, 5], [6, 4]] A = [[7, 5], [10, 4]] def rowsum(A): for i in range(len(A)): A[i][0] = sum(A[i])

Έλεγχος ροής Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα επιστρέφει πόσες φορές μπορούμε να διαιρέσουμε το n με το 2 (ακέραια διαίρεση) μέχρι το n να γίνει 1 Π.χ. n = 25 result = 4 def intlog(n): i=0 while n>1: n//=2 i+=1 return i

List Comprehension Συμπληρώστε το παρακάτω πρόγραμμα με μία γραμμή κώδικα ώστε να δημιουργεί μια λίστα L με τις λέξεις στο του s που δεν περιέχουν το γράμμα ‘i’ s = ‘this is a good day’ L = [w for w in s.split() if ‘i’ not in w]

Συναρτήσεις Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν υποχρεωτικά ορίσματα δύο αριθμούς x και y και ένα προεραιτικό όρισμα z (z=1 αν δεν ορίζεται) και θα επιστρέφει τον αριθμό των βημάτων από τον x μέχρι τον y αν το κάθε βήμα είναι z. Π.χ. x = 4, y = 11, z =2 result = 4 (4-6, 6-8, 8-10, 10-11) def numsteps(x,y,z=1): if y<=x: return 0 numsteps = (y-x)//z if (y-x)%z: numsteps +=1 return numsteps

Συναρτήσεις Τι θα τυπώσει το παρακάτω πρόγραμμα; Δώστε σε ένα μαθηματικό τύπο τι επιστρέφει η συνάρτηση func def func(x): res = 0 for i in range(x): res += i return res print(func(4))

Συναρτήσεις Τι τυπώνει το καθένα από τα παρακάτω προγράμματα; def func(x): return 5 print(func(5)) def func(x): return print(func(5)) def func(x): return 5 print(func(10)) def func(x): pass print(func(10))

Συναρτήσεις και list comprehension Γράψετε μια συνάρτηση round(x) που να επιστρέφει τον πιο κοντινό ακέραιο στον x def round(x): if x-int(x) > 0.5: return int(x) + 1 else: return int(x) Συμπληρώστε το παρακάτω πρόγραμμα με μία γραμμή κώδικα ώστε να δημιουργεί μια λίστα Y με τις στρογγυλεμένες τιμές του Χ Χ = [1.2, 2.6, 3.7, 4.1] Υ = [round(x) for x in X]

Συναρτήσεις και list comprehension Γράψετε μια γραμμή κώδικα που υπολογίζει το ελάχιστο στοιχείο ενός δισδιάστατου πίνακα Α m = min([min(r) for r in A])

Αναδρομικές Συναρτήσεις Γράψτε μια αναδρομική συνάρτηση, η οποία θα υπολογίζει τον μέγιστο κοινό διαιρέτη δύο αριθμών χρησιμοποιώντας τον αλγόριθμο του Ευκλείδη: gcd(a,0) = a gcd(a,b) = gcd(b, a mod b) Π.χ. gcd(48,18) = gcd(18, 12) = gcd(12, 6) = gcd(6, 0) = 6 def gcd(a,b): if b==0: return a return gcd(b, a%b) # non-recursive def gcd(a,b): while b: a, b = b, a%b return a

Αναδρομικές Συναρτήσεις Γράψτε μια αναδρομική συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα θετικό ακέραιο n και θα επιστρέφει πόσες φορές μπορούμε να διαιρέσουμε το n με το 2 (ακέραια διαίρεση) μέχρι το n να γίνει 1 Π.χ. n = 25 result = 4 def intlog_rec(n): if n<=1: return 0 return 1 + intlog_rec(n//2)

Ταξινόμηση Τροποποιήστε τη bubblesort ώστε να ταξινομεί μια λίστα αριθμών βάζοντας πρώτα τους ζυγούς σε αύξουσα σειρά και μετά τους μονούς σε φθίνουσα σειρά Π.χ. [2, 5, 6, 4, 3, 0] -> [0, 2, 4, 6, 5, 3] def BubbleSort(lst): for i in range(len(lst)): # rounds for j in range(0,len(lst)-i-1): # i-th round if lst[j]%2 : # odd number if lst[j+1] % 2 == 0 or lst[j]<lst[j+1]: lst[j],lst[j+1] = lst[j+1],lst[j] else: # even number if lst[j+1] % 2 == 0 and lst[j]>lst[j+1]:

Αρχεία Γράψτε μια συνάρτηση, η οποία θα παίρνει σαν όρισμα ένα όνομα αρχείου, θα διαβάζει το αρχείο και θα γράφει σέ ένα άλλο αρχείο με όνομα stats.txt, τον αριθμό των χαρακτήρων, λέξεων, και γραμμών. Π.χ. def fstats(filename): try: f = open(filename) s = f.read() except IOError: print('Error reading',filename) return g = open('stats.txt','w') g.write('%d,%d,%d' % (len(s),len(s.split()),s.count('\n')+1)) testfile.txt Hello, World! How are you? stats.txt 26,5,2

Αρχεία Έστω ότι υπάρχει στον τρέχοντα κατάλογο το αρχείο testfile.txt όπως δίνεται δίπλα. Τι θα τυπώσει καθεμιά από τις παρακάτω γραμμές προγράμματος; print(open("testfile.txt").read(5)) print(len(open("testfile.txt").readlines())) print(len("testfile.txt")) print(open("testfile.txt","r+").read(5)) print(open("testfile.txt","a").read(5)) print(open("testfile.txt","a+").read(5)) testfile.txt Hello, World! How are you?

Εξαιρέσεις Γράψτε μια συνάρτηση, η οποία θα ζητάει από το χρήστη να δίνει αριθμούς μέχρι να δώσει κενό. Η συνάρτηση να επιστρέφει τότε το μέσο όρο και τον μεσαίο (median) των αριθμών που έχουν εισαχθεί σαν μια πλειάδα. Αν ο χρήστης εισάγει μη έγκυρο αριθμό, η συνάρτηση θα επιστρέφει τα στατιστικά των μεχρι τότε αριθμών Π.χ. 13 1 2 4 4x result = (5, 4)

Εξαιρέσεις (συνέχεια) def stats(): L = [] while True: s = input() if not s: break try: L.append(eval(s)) except: break L.sort() if len(L)>0: return (float(sum(L))/len(L), L[len(L)//2])

Εξαιρέσεις Ποιος είναι ο μεγαλύτερος αριθμός που θα τυπωθεί από το παρακάτω πρόγραμμα; try: print(1) print(5/0) except ZeroDivisionError: print(3) except: print(4)

Εξαιρέσεις Ποιος είναι το άθροισμα των αριθμών που θα τυπωθούν από το παρακάτω πρόγραμμα; for i in range(10): try: if 10 / i == 2.0: break except ZeroDivisionError: print(1) else: print(2)

Τελική Εξέταση Ανοιχτά βιβλία: Μπορείτε να φέρετε μαζί σας τα βιβλία σας (σε έντυπη μορφή) και τις διαφάνειες του μαθήματος (σε έντυπη μορφή) και όποιες άλλες σημειώσεις θέλετε. Απαγορεύεται αυστηρά η ανταλλαγή έντυπου υλικού μεταξή των εξεταζομένων κατά τη διάρκεια της εξέτασης! Διάρκεια: 2:30 ώρες, έγκαιρη προσέλευση! Θέματα με στόχο: Την ανάπτυξη μιας συνάρτησης ή ένός προγράμματος που εκτελεί μια λειτουργία Την κατανόηση ενός δοθέντος προγράμματος ή συνάρτησης Την κατανόηση του χειρισμού των μεταβλητών.

Τελική Εξέταση Συμβουλές: Διαβάστε την ύλη προσεκτικά και σιγουρευτείτε ότι την κατανοείτε πλήρως. Εξασκηθείτε στο να βρίσκετε γρήγορα τις διαφάνειες που περιέχουν λεπτομέρειες που πιθανό να μην θυμάστε (π.χ. μεθόδους λιστών). Προετοιμαστείτε με πολλή εξάσκηση. Προσπαθήσετε να λύστε όσο πιο πολλές ασκήσεις μπορείτε. Κοιτάξετε ξανά τις ασκήσεις που κάναμε στο εργαστήριο. Διαβάστε όλα τα θέματα προσεκτικά πριν αρχίσετε να γράφετε. Κάποια από αυτά μπορεί να είναι πιο εύκολα από άλλα. Μην επιχειρήσετε να αντιγράψετε κάτι που δεν το καταλαβαίνετε.