@nefeli
Σωστή η παρατήρηση, μάλλον θέλει ένα έξτρα βήμα για την εξήγηση του ενός περάσματος και άλλον ένα τμήμα κώδικα. Θα το δούμε στην επόμενη έκδοση
@msoukara
Όσον αφορά την πρώτη σου παρατήρηση, το έχουμε δει και η λύση στην οποία καταλήξαμε είναι η δεύτερη, δηλαδή με το append. Απλά η χρήση του τελεστή + για τη συνένωση λιστών φαίνεται πιο εύκολη στους μαθητές. Θέλει προσοχή όμως όταν η λίστα είναι παράμετρος σε υποπρόγραμμα, κάτι που συνδέεται με την δεύτερη παρατήρησή σου
που λες ότι το πέρασμα στην Python είναι κάτα τιμή, δυστυχώς όμως τα πράγματα δεν είναι τόσο απλά.
Καταρχήν το ότι το πέρασμα είναι κατά τιμή (call by value) αναφέρεται και αναλύεται στο βιβλίο της Β. Είναι όμως λάθος!!!

(αν το δούμε αυστηρά) Ο λόγος που επιλέξαμε να το προσεγγίσουμε έτσι ήταν ότι αν το δεις το θέμα χρηστικά/λειτουργικά φαίνεται σαν να είναι κατά τιμή. Ο εσωτερικός μηχανισμός όμως που χρησιμοποιείται δεν είναι αυτός. Στη βιβλιογραφία υπάρχει μια σύγχυση για το θέμα αυτό. Υπάρχουν βιβλία που το παρουσιάζουν ως πέρασμα κατά τιμή και άλλα που το παρουσιάζουν ως πέρασμα κατά αναφορά. Αν έχεις όρεξη για διάβασμα δες τους παρακάτω συνδέσμους οι οποίοι είναι αρκετά επεξηγηματικοί:
https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/http://www.python-course.eu/passing_arguments.phpεδώ κάποιοι χρησιμοποιούν τον όρο call by assignment.
Για να εξηγήσεις στους μαθητές ότι μια λίστα δεν περνιέται κατά τιμή υπάρχει το παρακάτω παράδειγμα:
def test(mylist):
mylist[0] = mylist[1] = 100
>>> a = [2, 4, 5]
>>> test( a )
>>> print a
Επίσης η εντολή stack = stack + [item] θέλει πολύ προσοχή. Δεν προσθέτει στο stack ένα στοιχείο item. Μπορεί αυτό να φαίνεται από λειτουργικής πλευράς, δεν είναι όμως έτσι. Αυτό που συμβαίνει στην πραγματικότητα είναι ότι το stack επανορίζεται εσωτερικά. δηλαδή δημιουργείται νέο αντικείμενο. Αυτό μπορείς να το δεις με τη συνάρτηση id. (πάλι οι εκφράσεις που χρησιμοποιώ δεν είναι απολύτως σωστές, γιατί έχουμε binding μεταξύ τιμής και μεταβλητής)
Ένα απλό παράδειγμα για να δεις ότι στις παρακάτω εντολές το x δείχνει σε άλλη θέση μνήμης είναι αυτό:
>>> x = 1
>>> id( x )
>>> x = x + 1
>>> id(x)
Εδώ φαίνεται αν οι μαθητές έχουν καταλάβει ότι η εντολή “εκχώρησης” που κάποια στιγμή θα ήταν καλύτερο να την αναφέρουμε ως εντολή απόδοσης τιμής, δεν είναι εκχώρηση όπως την ξέρουμε αλλά επανορισμός/σύνδεση της μεταβλητής με μια νέα τιμή όπως φαίνεται από το παρακάτω παράδειγμα που είναι πιο χρηστικό/λειτουργικό/απλό:
notype = 10
notype = True
notype = “δεν είμαι μεταβλητή της ΓΛΩΣΣΑΣ”
Εδώ είναι ένα από τα σημεία που για να τα εξηγήσουμε πρέπει να δείξουμε στους μαθητές ότι η μεταβλητή είναι απλά ένα όνομα που γίνεται bind με μια τιμή. Είναι σαν μια ετικέτα. Δεν πρόκειται δηλαδή για ένα κουτάκι μέσα στο οποίο μπαίνει η τιμή.
Όλα αυτά όμως είναι πέρα από τους στόχους του μαθήματος για τους μαθητές του Επαγγελματικού Λυκείου. Μην τους αποτρελάνουμε εντελώς. Η ιδέα είναι να χρησιμοποιήσουμε τα πλεονεκτήματα της python και ότι είναι δυσνόητο, να το αφήσουμε στην άκρη.
Για διδακτικούς λόγους λοιπόν τους εξηγούμε το πέρασμα παραμέτρων με δυο απλά παραδείγματα (ένα για απλή μεταβλητή και ένα για λίστα), και εκεί σταματάμε. Εμείς όμως πρέπει να ξέρουμε τι ακριβώς συμβαίνει πίσω από τις …. κουρτίνες.
ΥΓ. Δεδομένου ότι η εργασία της συγγραφικής ομάδας είναι εθελοντική (και αδιάκοπη) νομίζω ότι όσοι προσπαθήσουν να διδάξουν αυτές τις έννοιες καλό θα ήταν να δώσουν ένα feedback στην συγγραφική ομάδα, για το κατά πόσο η προσέγγιση που ακολουθούμε, βοηθάει τους εκπαιδευτικούς και τους μαθητές ή δυσκολεύει τα πράγματα. Αν έχετε κάποια ιδέα που έχετε δοκιμάσει στην τάξη και δούλεψε καλύτερα καλό θα ήταν είτε να τη στείλετε σε κάποιον από τους συγγραφείς είτε να το ανεβάσετε εδώ, να το δούμε και να το συζητήσουμε, ώστε να βελτιώνουμε το βιβλίο συνεχώς.
Μπορούμε όλοι να συνεισφέρουμε ώστε το βιβλίο όχι μόνο να διορθωθεί αλλά και να βελτιώνεται κάθε χρόνο και παιδαγωγικά αλλά και με νέο υλικό (ασκήσεις, φύλλα εργασίας κλπ)