avouris teaching python
TRANSCRIPT
Νίκος Αβούρης hci.ece.upatras.gr/avouris
Διδακτική Προγραμματισμού
με την Python
Διδασκαλία εισαγωγικού μαθήματος στους υπολογιστές και προγραμματισμό
● Στόχος η εισαγωγή στους υπολογιστές με μια γλώσσα προγραμματισμού ως εργαλείο
● Πρώτο μέρος : Εισαγωγή στην Python● Δεύτερο μέρος : Εισαγωγή στην επιστήμη των
υπολογιστών (αριθμητικά συστήματα, αρχιτεκτονική, λειτουργικά, δίκτυα)
● Ομαδικές εργασίες 6 εβδομάδων με αντικείμενο επίλυση προβλημάτων και υλοποίηση λύσης στην Python
Μάθημα: Εισαγωγή στους Υπολογιστές
Μάθημα 1ου εξαμήνου (7 ects)
5 ώρες / εβδομάδα * 13 εβδομάδες
3 ώρες στο αμφιθέατρο + 2 εργαστήριο
250 φοιτητές κάθε χρόνο / 2 ομάδες θ. / 6 ομάδες εργ.
Υλικό μαθήματος: eclass.upatras.gr
Πλατφόρμα διόρθωσης ασκήσεων : astraia.upatras.gr
Επικουρικό προσωπικό: 4 διδάσκοντες
Νίκος Αβούρης, Κυριάκος Σγάρμπας, Βασίλης Παλιουράς, Μιχάλης Κουκιάς
Ν. Αβούρης, Κ. Σγάρμπας, Β. Παλιουράς, Μ. Κουκιάς: Εισαγωγή στην επιστήμη των υπολογιστών με τη γλώσσα python (3η έκδοση, Σεπτέμβριος 2016)
3η έκδοση:
Νέα κεφάλαια για Βάσεις δεδομένων (sqlite3), γραφική διεπαφή χρήστη (tkinter), διαδικτυακό προγραμματισμό (urllib),
περισσότερα παραδείγματα
Διδακτικοί στόχοι
Ο φοιτητής θα πρέπει να είναι σε θέση:
1. να αντιλαμβάνεται και να περιγράφει τις βασικές αρχές και τον τρόπο λειτουργίας σύγχρονων υπολογιστικών διατάξεων και συστημάτων,
2. να διατυπώνει τρόπους επίλυσης απλών αλγοριθμικών προβλημάτων,
3. να έχει λειτουργική χρήση μιας γλώσσας προγραμματισμού υψηλού επιπέδου (Python),
4. να επιλύσει σύνθετα προβλήματα στο πλαίσιο μιας ομάδας (κατά τη φάση εκπόνησης ομαδικών εργασιών)
Ημερολόγιο μαθήματος (13 εβδομάδες)w1 Ορισμοί - κωδικοποίηση πληροφορίας - αριθμητικές εκφράσεις στην Python
w2 Μεταβλητές, βασικές δομές δεδομένων
w3 Δομές ελέγχου, λύνουμε τη δευτεροβάθμια εξίσωση
w4 Ακολουθιακές δομές και δομές επανάληψης - μουσική με τον υπολογιστή
w5 Δομημένος προγραμματισμός - ζωγραφική με την turtle
w6 Αρχεία - σύνδεση με το λειτουργικό σύστημα - φτιάχνουμε ημερολόγια
w7 Αντικειμενοστρεφής προγραμματισμός - παίζουμε χαρτιά
w8 Γραφική διεπαφή χρήστη - φτιάχνουμε ένα παιχνίδι
w9 Ψηφιακή αριθμητική - ακρίβεια πράξεων
w10 Αρχιτεκτονική υπολογιστή - προγραμματιζουμε την pycpu
w11 Λειτουργικά συστήματα - προγραμματισμός διεργασιών
w12 Δίκτυα υπολογιστών – επικοινωνία με TCP/IP
w13 Διαδικτυακός προγραμματισμός – τι καιρό θα κάνει σήμερα;
Ομ
αδ
ικές
ερ
γασ
ίες
Τα πλεονεκτήματα της προσέγγισης Python first
● Σύντομος χρόνος για το πρώτο πρόγραμμα● Εύκολη σύνταξη● Δυνατότητα εμβάθυνσης σε επί μέρους
περιοχές προβλημάτων● Μεγάλη κοινότητα υποστήριξης● “πραγματική γλώσσα” που μπορεί να συνεχίσει
να χρησιμοποιείται και να αναπτύσσεται
Η κοινότητα της Python
Ένα παράδειγμα της διδακτικής προσέγγισης με βάση προβλήματα
1.Εισάγουμε βασικές εντολές της βιβλιοθήκης turtle
2.Ζωγραφίζουμε απλά σχήματα γραμμές, τετράγωνα, τρίγωνα, κλπ
3.Πώς θα ζωγραφίσουμε τυχαίους κύκλους - τρίγωνα;
4.Πώς θα φτιάξουμε τη γραφική παράσταση μιας εξίσωσης; πχ 0.0001*x3+0.015*x2-1.14*x-2.8;
5.Πώς θα φτιάξουμε ένα διαδραστικό πρόγραμμα που ανάλογα με την περιοχή της οθόνης ζωγραφίζει διαφορετικά σχήματα;
Ενότητα Δομημένος προγραμματισμός: ζωγραφίζω με την turtle
from turtle import *from math import *
reset()
def draw_axes():.............def f(x):.............def scaled_sin(x):..............
def plot(f, plot_color):..............############################# plot f(x)############################input("Σχεδιάζω την καμπύλη f(x)")draw_axes()plot(f, 'red')############################## plot sin#############################print("Σχεδιάζω την καμπύλη sin(x) με κλίμακα")scale = int(input("κλίμακα = "))#draw_axes()plot(scaled_sin, 'green')input("ok")
Γραφική παράσταση εξίσωσης y=f(x)
Αρχιτεκτονική υπολογιστών: Μοντέλο της ΚΜΕ στην Python: PyCPU
# 0000 load address // load D0 with data from MEM[address]# 0001 store address // store D0 to MEM[address]# 0010 add address // D0 = D0 + MEM[address]# 0011 sub address // D0 = D0 - MEM[address] two's complement operation# 0100 loadd data // D0 = immediate data from instruction# 0101 halt# 0110 addd data // D0 = D0 + immediate data from instruction# 0111 subd data // D0 = D0 - immediate data from instruction# 1000 jmp address // Unconditional jump# 1001 jmp_N address // jump if last generated ALU result is negative# 1010 jmp_Z address // jump if zero# 1011 jmp_O address // jump if Overflow# 1100 jmp_C address // jump if Carry
Ο επεξεργαστης περιλαμβάνει: καταχωρητή δεδομένων γενικού σκοπού (συσσωρευτή), λέξεις δεδομένων 16 bit και διευθύνσεις 12 bit. Συνεπώς μπορεί να χειριστεί μνήμη των 4096 λέξεων. Οι εντολές του επεξεργαστή αυτού είναι λέξεις των 16 bit, οργανωμένες σε δύο πεδία, ένα των τεσσάρων δυαδικών ψηφίων που είναι το opcode και ένα πεδίο των 12 bit τα ( διεύθυνση δεδομένων) ή είναι απευθείας δεδομένα (immediate addressing).
PyCPU έχει δημιουργηθεί από Σ. Καξίρα κ.α.
Προβλήματα της Python
Πολλαπλά notations : τελεστές
>>> a = [1,2,3]
>>> a = a + [4,5,6]
>>> a
[1, 2, 3, 4, 5, 6]
Πολλαπλά notations : μέθοδοι
>>> a = [1,2,3]
>>> a.extend([4,5,6])
>>> a
[1, 2, 3, 4, 5, 6]
Πολλαπλά notations : συναρτήσεις
>>> a =[6,5,4,3]
>>> b=sorted(a)
>>> b
[3, 4, 5, 6]
>>> L=[1,2,3,4]
>>> M=L
>>> print (L,M)
[1, 2, 3, 4]
>>> M.reverse()
>>> print (L,M)
[4, 3, 2, 1] [4, 3, 2, 1]
οι μεταβλητές της Python είναι ετικέτες σε αντικείμενα
Tι συνέβη;
Με χρήση: http://pythontutor.com/visualize.html#mode=display
Eκχώρηση τιμής σε μεταβλητή /β
>>> L=[1,2,3,4]
>>> M=L[:]
>>> print L,M
[1, 2, 3, 4] [1, 2, 3, 4]
>>> M.reverse()
>>> print L,M
[1, 2, 3, 4] [4, 3, 2, 1]
a = 5
b = a
a += 1
print (a,b)
Τι γίνεται στην παρακάτω περίπτωση:
Είναι για παιδιά αυτή η γλώσσα;
Python for Kids: A Playful Introduction to Programming by Jason R. Briggs
ομαδικές εργασίες
●Εργασία 6 εβδομάδων●Ομάδες 4-5 φοιτητών●Παραδοτέο:
●Έκθεση●Παρουσίαση●Κώδικας Python●Οδηγίες εγκατάστασης●Εκτελέσιμο αρχείο (αν είναι δυνατόν)
mywindmap
Χρησιμοποιείστε το openweathermap api για να παρουσιασετε σε πραγματικό χρόνο την κατάσταση των Ελληνικών θαλασσών
Φοιτητική εργασία 2015-2016 / ομάδα Ο7
Βιβλιοθήκες:
urllib2
Json
Tkinter
Load
My referencesΝα κατασκευάσετε μια εφαρμογή που εισάγει τα βαθμολόγια του progress.upatras.gr σε μιά βάση δεδομένων και συντάσσει συστατικές επιστολές
(εργασία Ο22/2015-16, βιβλιοθήκες: Βιβλιοθήκες: Tkinter, tkFileDialog, csv, sqlite3, os, operator
mycitationsΝα γράψετε εφαρμογή που ανακτά τους βιβλιομετρικούς δείκτες των καθηγητών του Τμήματος από το google.scholar.com και δημιουργεί στατιστικούς πίνακες και διαγράμματα
● Ομάδα Ο27/2015-2016 ( Βιβλιοθήκες: urllib2, datetime beautifulsoup4(bs4), Tkinter, matplotlib, numpy
Να ξανασχεδιάσετε την Ιστοσελίδα του Τμήματος με το django web framework
Ομάδα 32/ 2015-2016 / django web framework
Επικοινωνία διεργασιών Να δημιουργήσετε μια κατανεμημένη εφαρμογή με χρήστη της Pyro4 (ομάδα 09/2014-2015)
mydrawΝα δημιουργήσετε μια εφαρμογή ελεύθερης σχεδίασης (Ομάδα 38/ 2015-16 - βιβλιοθήκη tkinter )
Το παιχνίδι με τα μπαλόνιαΝα κατασκευάσετε το “παιχνίδι με τα μπαλόνια” και να υπολογίσετε τις παραμέτρους του νόμου του Fitts για τη δεικτική σου συσκευή
Ομάδα 58/2015-16
(Tkinter, winsound)
Εφαρμογές multiprocessing
Ομάδα 55/2015-16, βιβλιοθήκη mulitprocessing, pool, map,lock, queue, pipe
Παίζουμε “ξερή” με pygameΟμάδα 13/2015-2016
Βιβλιοθήκες για ομαδικές εργασίες● Pygame (παιχνίδια 2D)● Tkinter (γραφική διεπαφή)● WxPython ( γραφική διεπαφή)● sqlite3 (βάσεις δεδομένων)● Multiprocessing (πολυ-προγραμματισμός)● BeautifulSoup (web scraping)● urlib2 (http client)● pydub (επεξεργασία ήχου)● Vpython (3D γραφικά)
κλπ
συμπεράσματα
● Η python μας βοηθάει να ακολουθήσουμε μια problem-first προσέγγιση στη μάθηση
● Υποστηρίζει τη δημιουργικότητα και την συνεργατικότητα
● Χρήσιμο εργαλείο για hands-on εμβάθυνση σε έννοιες της επιστήμης των υπολογιστών
● Η συνθετότητα της γλώσσας πρέπει να κρυφτεί για να αποφευχθεί σύγχυση στους φοιτητές
Κάποιες πηγές για την παιδαγωγική προσέγγιση
● Avouris N., Kaxiras S., Koufopavlou O., Sgarbas K., Stathopoulou P., (2010). Teaching Introduction to Computing through a project-based collaborative learning approach, Proc. PCI 2010, IEEE Publ., Tripolis, September 2010.
● Resnick, M., Myers, B., Nakakoji, K., Shneiderman, B., Pausch, R., Selker, T., & Eisenberg, M. (2005). Design principles for tools to support creative thinking
Ευχαριστώ
[Διδακτική Προγραμματισμού με την Python]
Ν Αβούρης
http://hci.ece.upatras.gr/avouris
Ανοικτό μάθημα:https://eclass.upatras.gr/courses/EE759/
Βιβλίο:
http://www.politeianet.gr/books/9789605301545-abouris-nikolaos-panepistimio-patron-eisagogi-stous-upologistes-me-tin-glossa-python-220284