Διορθώσεις Βιβλίου Προγραμματισμός Υπολογιστών Γ ΕΠΑΛ

Ξεκίνησε από evry, 16 Νοε 2016, 09:52:57 ΠΜ

« προηγούμενο - επόμενο »

evry

Σε αυτό το thread θα πρότεινα όσοι συνάδελφοι κάνουν το μάθημα και εντοπίσουν λάθη ή προβλήματα στο βιβλίο να τα αναφέρουν εδώ ώστε να τα μαζέψουμε και να τα διορθώσουμε στην επόμενη έκδοση.

Προς το παρόν ανεβάζω διορθωμένες τις σελίδες 73-74 και 143-145.
Τα σημεία που πρέπει να προσέξουμε είναι:

  • Στην εισαγωγή σε στοίβα και ουρά πρέπει να χρησιμοποιηθούν οι append και insert και όχι ο τελεστής + . Αντί της append μπορεί να χρησιμοποιηθεί και το ιδίωμα +=
  • στην εφαρμογή της στοίβας με την αντιστροφή αριθμών έχει ξεχαστεί ένα ! αντί για not προφανώς από κάποιον C programmer που ακόμα μαθαίνει Python
  • η δραστηριοτητα αφόρμησης της δυαδικής είναι διορθωμένη
  • Οι πίνακες της δυαδικής έχουν διορθωθεί γιατί έχουν χαλάσει στη σελιδοποίηση
  • Οι σελίδες δεν είναι ακριβώς ίδιες όσον αφορά τη σελιδοποίηση. Επέλεξα να βάλω όλον τον κώδικα σε μια σελίδα στην δυαδική γιατί νομίζω θα είναι καλύτερο

ΥΓ. Προσοχή!!! Οι διορθώσεις δεν είναι επίσημες. απλά για να διεκολυνθεί το δύσκολο έργο των συναδέλφων φέτος

edit: τελευταία έκδοση διορθώσεις 1.2
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

#1
Ερώτηση

Γιατί ξαφνικά στο κεφάλαιο αυτό χρησιμοποιήσετε τον τελεστή // ενώ μέχρι πριν στο βιβλίο δεν γίνεται καμία αναφορά;

π.χ στην ηλεκτρονική έκδοση σελίδα 75 αναφέρεται η εντολή mid = ( first + last ) // 2, όπως και εδώ στις διορθώσεις υπάρχει η ίδια εντολή

Υπάρχει λόγος που δεν γράφεται απλά mid = ( first + last ) / 2 ; Δεν έχει διαφορά, απλά γιατί εισάγουμε νέο τελεστή ξαφνικά;


Επίσης μήπως θα έπρεπε στις διορθώσεις να ειναι
answer =raw_input("Είναι ο αριθμός ο " + str(mid) + " ? (N/O)" )
αντί για answer = input("Είναι ο αριθμός ο " + str(mid) + " ? (N/O)" )


polikarpos

διόρθωση σελίδα 71
το 15>8 να αντικασταθεί με  11>8


Γιάννη Αναγνωστάκη
Η απάντηση στις ερωτήσεις σου, κατά τη γνώμη μου ,είναι η εξής
Το βιβλίο γράφτηκε από πολλούς συγγραφείς μερικοί εκ των οποίων χρησιμοποιούσαν python 2 ενώ άλλοι χρησιμοποιούσαν python 3. Κάποια στιγμή αποφασίστηκε για κάποιον περίεργο κατά τη γνώμη μου λόγο να χρησιμοποιηθεί  python 2   Όσοι έγραφαν σε python 3 βρέθηκαν στην άβολη θέση να πρέπει να αλλάξουν τον κωδικα τους με  αποτέλεσμα κάποια μικρά λαθάκια να ξεφύγουν.
www.sepchiou.gr
moodle.sepchiou.gr
museum.sepchiou.gr

evry

Παράθεση από: Γιάννης Αναγνωστάκης στις 20 Νοε 2016, 02:40:34 ΜΜ
Ερώτηση

Γιατί ξαφνικά στο κεφάλαιο αυτό χρησιμοποιήσετε τον τελεστή // ενώ μέχρι πριν στο βιβλίο δεν γίνεται καμία αναφορά;

π.χ στην ηλεκτρονική έκδοση σελίδα 75 αναφέρεται η εντολή mid = ( first + last ) // 2, όπως και εδώ στις διορθώσεις υπάρχει η ίδια εντολή

Υπάρχει λόγος που δεν γράφεται απλά mid = ( first + last ) / 2 ; Δεν έχει διαφορά, απλά γιατί εισάγουμε νέο τελεστή ξαφνικά;

έχεις δίκιο Γιάννη, έπρεπε να είναι / , αλλά στην Python 2 μπορεί να χρησιμοποιηθεί και ο τελεστής //, Έχουν το ίδιο αποτέλεσμα.
Μπορεί να χρησιμοποιηθεί και ο τελεστής αυτός , δεν είναι λάθος. Θα έπρεπε όμως να αναφέρεται προηγουμένως.

Παράθεση
Επίσης μήπως θα έπρεπε στις διορθώσεις να ειναι
answer =raw_input("Είναι ο αριθμός ο " + str(mid) + " ? (N/O)" )
αντί για answer = input("Είναι ο αριθμός ο " + str(mid) + " ? (N/O)" )
Γιάννη έχεις δίκιο , το διόρθωσα, ευχαριστώ
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

dimitra

Στο κεφάλαιο 3.2 δεν αναφέρεται η προτεραιότητα των λογικών τελεστών.
Ενιαίο, δημόσιο και δωρεάν δωδεκάχρονο σχολείο.

evry

Πράγματι δεν αναφέρεται.
Αυτό είναι όμως και το καλό όταν χρησιμοποιείς μια πραγματική γλώσσα προγραμματισμού. Δεν χρειάζεται να μαντέψουμε ποια είναι η προτεραιότητα. Αρκεί να δούμε στο documentation της Python ( not > and > or )

https://docs.python.org/2/reference/expressions.html
(προς το τέλος operator precedence)

Καλή παρατήρηση.
Θα προστεθεί μια επεξήγηση στην νέα έκδοση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nefeli

Έχω την εξής παρατήρηση σε σχέση με την επεξήγηση-ανάλυση του αλγορίθμου της φυσαλίδας στη σελίδα79.
Ενώ στην αρχή της σελίδας αναφέρεται ότι "πρέπει να εκτελέσουμε το παραπάνω τμήμα κώδικα τόσες φορές όσες είναι τα στοιχεία της, δηλαδή Ν", αμέσως παρακάτω "καταλήγουμε στον αλγόριθμο" που όμως εκτελείται για Ν-1 φορές (for i in range(1,N,1)).
Προφανώς ο συντάκτης έχει λάβει υπόψη του την παρατήρηση που αναφέρει στη συνέχεια: "φαίνεται ότι δεν χρειάζονται Ν επαναλήψεις, αλλά Ν-1" και  που οδηγούν στον βελτιωμένο τελικό αλγόριθμο της σελίδας 80.
Πιστεύω ότι πρέπει να διορθωθεί η εξωτερική for του αλογορίθμου της σελίδας 79 σε  for i in range(0,N,1): έτσι ώστε αφενός να υπάρχει αντιστοιχία με το κείμενο και αφετέρου να είναι πιο κατανοητές οι παρατηρήσεις που οδηγούν στη βελτίωση του αλγορίθμου της σελ.80.

msoukara

Θεωρώ ότι έχει γίνει πολύ καλή δουλειά και συγχαρητήρια. Θα ήθελα όμως να κάνω κάποιες παρατηρήσεις κυρίως για το κεφάλαιο 7.


Στο κεφάλαιο 5 στην σελίδα 143 το:
def push(stack, item) :
      stack = stack + [item]

push(stack, number)

πρέπει να αντικατασταθεί με:

def push(stack, item) :
        stack = stack + [item]
   return stack

stack=push(stack, number)

ή

def push(stack, item) :
      stack.append(item)

push(stack, number)


Όμοια και στην σελίδα 145 για την ουρά

Κεφάλαιο 7

Στην σελίδα 113 το παράδειγμα που προσπαθεί να εξηγήσει στους μαθητές το πέρασμα παραμέτρων με αναφορά μπορεί να μπερδέψει τους μαθητές καθώς στηρίζεται στο πώς λειτουργεί η append ( η οποία ανήκει στην κατηγορία των συναρτήσεων που αλλάζουν το αντικείμενο στο οποίο καλούνται), ενώ γενικά το πέρασμα παραμέτρων στην Python είναι με τιμή, κάτι που δεν αναφέρεται πουθενά.
(η  C και η Pascal υποστηρίζουν το πέρασμα με αναφορά - όχι η Python). Ίσως λοιπόν θα ήταν καλύτερα να εξηγηθεί θεωρητικά και παράλληλα να δοθεί μια εικόνα της μνήμης.

Επίσης η προσέγγιση για τις καθολικές – τοπικές μεταβλητές ίσως δημιουργήσει σύγχυση καθώς στη σελίδα 116 :
x = 50
def func(x):
     print('Το x είναι', x)    ο λόγος που το x είναι 50 είναι επειδή περνά σαν παράμετρος. Στην προηγούμενη παράγραφο αναφέρεται ότι οι παράμετροι είναι τοπικές μεταβλητές.       
     x = 2
     print('Το τοπικό x άλλαξε σε', x)
func(x)
print('Το x είναι ακόμα', x)

Αν δεν περνούσε το x σαν παράμετρο δηλαδή:
x = 50
def func():
     print('Το x είναι', x)          
     x = 2
     print('Το τοπικό x άλλαξε σε', x)
func()
print('Το x είναι ακόμα', x)

θα έβγαζε σφάλμα γιατί μέσα στη συνάρτηση υπερισχύει η τοπική μεταβλητή x και προηγείται το  print('Το x είναι', x) από το  x = 2
Καλό θα ήταν να τονιστεί ότι η τοπική υπερισχύει της καθολικής μέσα στην συνάρτηση, εκτός αν τη δηλώσουμε global.

Η χρήση της global είναι απαραίτητη και για να «δει» η συνάρτηση την καθολική μεταβλητή και όχι μόνο για να την αλλάξει όπως αναφέρεται στην σελίδα 117.

evry

#9
@nefeli
Σωστή η παρατήρηση, μάλλον θέλει ένα έξτρα βήμα για την εξήγηση του ενός περάσματος και άλλον ένα τμήμα κώδικα. Θα το δούμε στην επόμενη έκδοση

@msoukara

Όσον αφορά την πρώτη σου παρατήρηση, το έχουμε δει και η λύση στην οποία καταλήξαμε είναι η δεύτερη, δηλαδή με το append. Απλά η χρήση του τελεστή + για τη συνένωση λιστών φαίνεται πιο εύκολη στους μαθητές. Θέλει προσοχή όμως όταν η λίστα είναι παράμετρος σε υποπρόγραμμα, κάτι που συνδέεται με την δεύτερη παρατήρησή σου
που λες ότι το πέρασμα στην Python είναι κάτα τιμή, δυστυχώς όμως τα πράγματα δεν είναι τόσο απλά.

Καταρχήν το ότι το πέρασμα είναι κατά τιμή (call by value) αναφέρεται και αναλύεται στο βιβλίο της Β. Είναι όμως λάθος!!!  :laugh: (αν το δούμε αυστηρά) Ο λόγος που επιλέξαμε να το προσεγγίσουμε έτσι ήταν ότι αν το δεις το θέμα χρηστικά/λειτουργικά φαίνεται σαν να είναι κατά τιμή. Ο εσωτερικός μηχανισμός όμως που χρησιμοποιείται δεν είναι αυτός.  Στη βιβλιογραφία υπάρχει μια σύγχυση για το θέμα αυτό. Υπάρχουν βιβλία που το παρουσιάζουν ως πέρασμα κατά τιμή και άλλα που το παρουσιάζουν ως πέρασμα κατά αναφορά. Αν έχεις όρεξη για διάβασμα δες τους παρακάτω συνδέσμους οι οποίοι είναι αρκετά επεξηγηματικοί:
https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/
http://www.python-course.eu/passing_arguments.php

εδώ κάποιοι χρησιμοποιούν τον όρο call by assignment.

Για να εξηγήσεις στους μαθητές ότι μια λίστα δεν περνιέται κατά τιμή υπάρχει το παρακάτω παράδειγμα:
Κώδικας: python
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 δείχνει σε άλλη θέση μνήμης είναι αυτό:
Κώδικας: python
>>> x = 1
>>> id( x )
>>> x = x + 1
>>> id(x)

Εδώ φαίνεται αν οι μαθητές έχουν καταλάβει ότι η εντολή "εκχώρησης" που κάποια στιγμή θα ήταν καλύτερο να την αναφέρουμε ως εντολή απόδοσης τιμής, δεν είναι εκχώρηση όπως την ξέρουμε αλλά επανορισμός/σύνδεση της μεταβλητής με μια νέα τιμή όπως φαίνεται από το παρακάτω παράδειγμα που είναι πιο χρηστικό/λειτουργικό/απλό:
Κώδικας: python
notype = 10
notype = True
notype = "δεν είμαι μεταβλητή της ΓΛΩΣΣΑΣ"

Εδώ είναι ένα από τα σημεία που για να τα εξηγήσουμε πρέπει να δείξουμε στους μαθητές ότι η μεταβλητή είναι απλά ένα όνομα που γίνεται bind με μια τιμή. Είναι σαν μια ετικέτα. Δεν πρόκειται δηλαδή για ένα κουτάκι μέσα στο οποίο μπαίνει η τιμή.

Όλα αυτά όμως είναι πέρα από τους στόχους του μαθήματος για τους μαθητές του Επαγγελματικού Λυκείου. Μην τους αποτρελάνουμε εντελώς. Η ιδέα είναι να χρησιμοποιήσουμε τα πλεονεκτήματα της python και ότι είναι δυσνόητο, να το αφήσουμε στην άκρη.
Για διδακτικούς λόγους λοιπόν τους εξηγούμε το πέρασμα παραμέτρων με δυο απλά παραδείγματα (ένα για απλή μεταβλητή και ένα για λίστα), και  εκεί σταματάμε. Εμείς όμως πρέπει να ξέρουμε τι ακριβώς συμβαίνει πίσω από τις .... κουρτίνες.

ΥΓ. Δεδομένου ότι η εργασία της συγγραφικής ομάδας είναι εθελοντική (και αδιάκοπη) νομίζω ότι όσοι προσπαθήσουν να διδάξουν αυτές τις έννοιες καλό θα ήταν να δώσουν ένα feedback στην συγγραφική ομάδα, για το κατά πόσο η προσέγγιση που ακολουθούμε, βοηθάει τους εκπαιδευτικούς και τους μαθητές ή δυσκολεύει τα πράγματα. Αν έχετε κάποια ιδέα που έχετε δοκιμάσει στην τάξη και δούλεψε καλύτερα καλό θα ήταν είτε να τη στείλετε σε κάποιον από τους συγγραφείς είτε να το ανεβάσετε εδώ, να το δούμε και να το συζητήσουμε, ώστε να βελτιώνουμε το βιβλίο συνεχώς.
Μπορούμε όλοι να συνεισφέρουμε ώστε το βιβλίο όχι μόνο να διορθωθεί αλλά και να βελτιώνεται κάθε χρόνο και παιδαγωγικά αλλά και με νέο υλικό (ασκήσεις, φύλλα εργασίας κλπ)
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nefeli

#10
Καλησπέρα σε όλους
Κάποιες παρατηρήσεις/ερωτήσεις στο κεφάλαιο 6:

1. Στον πίνακα της σελίδας 94 αναφέρεται τρόπος προσπέλασης "b" για "αρχείο δυαδικής μορφής". Νομίζω ότι το σωστό είναι "rb" (και αντίστοιχα rb+, wb, wb+, ab, ab+) εκτός αν ο συγγραφέας εννοεί κάτι άλλο που δεν κατάλαβα.  Πάντως η open("data.txt","b") δίνει μήνυμα λάθους.

2. Στη σελίδα 96:
Η φράση "σημειώνουμε την αλλαγή γραμμής με το χαρακτήρα '\n' " νομίζω ότι πρέπει να διορθωθεί σε "σημειώνουμε την αλλαγή γραμμής με την ακολουθία χαρακτήρων '\n'" ώστε να τονισθεί ότι πρόκειται για δύο χαρακτήρες και όχι έναν.

Και κάτι μικρής σημασίας, αλλά τους δικούς μου μαθητές τους μπέρδεψε: στο παράδειγμα εγγραφής αριθμού σε αρχείο στη σελίδα 96, αναφέρεται αρχείο με όνομα keimeno ενώ στα προηγούμενα και στα επόμενα παραδείγματα χρησιμοποιείται το fin. Ίσως είναι καλύτερα να αλλάξει και αυτό σε fin.


evry

Παράθεση από: nefeli στις 11 Δεκ 2016, 08:32:27 ΜΜ
1. Στον πίνακα της σελίδας 94 αναφέρεται τρόπος προσπέλασης "b" για "αρχείο δυαδικής μορφής". Νομίζω ότι το σωστό είναι "rb" (και αντίστοιχα rb+, wb, wb+, ab, ab+) εκτός αν ο συγγραφέας εννοεί κάτι άλλο που δεν κατάλαβα.  Πάντως η open("data.txt","b") δίνει μήνυμα λάθους.
Εννοεί ότι το b συνδυάζεται με τα υπόλοιπα, απλά δεν το λέει ξεκάθαρα εκεί. Αν έδινε όλες τις επιλογές που λες ο πίνακας θα έβγαινε μεγάλος. Απλά θέλει μια τέτοια παρατήρηση με παράδειγμα από κάτω, που να λέει ότι μπορούμε να έχουμε συνδυασμούς τύπων προσπέλασης.
Για παράδειγμα δες στη σελίδα 99 που ανοίγει ένα δυαδικό αρχείο για γράψιμο χρησιμοποιεί την παρακάτω εντολή:
Κώδικας: python
fin = open( "foo.txt", "wb" )


Νομίζω ότι το παραπάνω παράδειγμα ξεδιαλύνει τα πράγματα

Παράθεση
2. Στη σελίδα 96:
Η φράση "σημειώνουμε την αλλαγή γραμμής με το χαρακτήρα '\n' " νομίζω ότι πρέπει να διορθωθεί σε "σημειώνουμε την αλλαγή γραμμής με την ακολουθία χαρακτήρων '\n'" ώστε να τονισθεί ότι πρόκειται για δύο χαρακτήρες και όχι έναν.
Το '\n' είναι ένας χαρακτήρας και όχι δυο, είναι ο γνωστός χαρακτήρας διαφυγής/τέλος γραμμής

Παράθεση
Και κάτι μικρής σημασίας, αλλά τους δικούς μου μαθητές τους μπέρδεψε: στο παράδειγμα εγγραφής αριθμού σε αρχείο στη σελίδα 96, αναφέρεται αρχείο με όνομα keimeno ενώ στα προηγούμενα και στα επόμενα παραδείγματα χρησιμοποιείται το fin. Ίσως είναι καλύτερα να αλλάξει και αυτό σε fin.
Δεν είναι καθόλου μικρής σημασίας. Το fin δεν είναι δεσμευμένη λέξη αλλά μια μεταβλητή. Μπορούμε να δώσουμε ότι όνομα θέλουμε. Το ότι μπερδεύει τους μαθητές σημαίνει ακριβώς ότι δεν έχουν καταλάβει ακριβώς αυτό, ότι μπορούν να δώσουν ότι όνομα θέλουν. Την ίδια ακριβώς παρανόηση έχουν και πολλοί μαθητές στο ΑΕΠΠ που νομίζουν ότι στις γραμμές ενός πίνακα 2D πρέπει να μπαίνει μόνο το i.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nefeli

Καταρχήν οφείλω να σε ευχαριστήσω για την πάντα άμεση απάντηση. Εννοείται ότι οι όποιες παρατηρήσεις δεν έχουν σκοπό να υποτιμήσουν τη δουλειά κανενός, ούτε να ξεκινήσουν αντιπαραθέσεις που κατά κανόνα είναι στείρες.
Σημειώνω απλώς τα εξής:
1. Κατά τη δική μου γνώμη αυτό που πρέπει να αλλάξει είναι ο πίνακας γιατί η αναγραφή του "b" ως "όρισμα τρόπου προσπέλασης" όπως αναφέρεται σε αυτόν δεν είναι σωστή.
2. Ας μην εμπλακούμε στην κουβέντα αν το "\n" είναι ένας χαρακτήρας ή δύο. Αυτό που προσπάθησα να μεταφράσω είναι το "escape sequence". Πολύ πρόχειρα βρήκα και αυτό: http://www.computerhope.com/jargon/e/escasequ.htm.
3. Συμφωνώ απολύτως. Γιαυτό και θα πρότεινα να χρησιμοποιούνται και άλλα ονόματα εκτός από το fin στην ενότητα ώστε αυτό να είναι πιο σαφές. Αυτό που είπα είναι ότι το fin χρησιμοποιείται σε όλα τα παραδείγματα αυτής της ενότητας εκτός από το συγκεκριμένο που γίνεται η μετατροπή σε συμβολοσειρά ενισχύοντας την όποια παρανόηση.
Και κάτι τελευταίο: Η αγωνία μου -και πιστεύω και πολλών ακόμη- είναι ότι το βιβλίο χρησιμοποιείται για πανελλαδικές εξετάσεις. Θα ήταν τελείως διαφορετική η συζήτηση αν δεν ήταν έτσι. Πολλοί μαθητές προσπαθούν, καλώς ή κακώς, να μάθουν απέξω κάθετι που αναγράφεται γιατί το θεωρούν πιθανό θέμα στις εξετάσεις. Έτσι αναγκαζόμαστε και εμείς να βάζουμε στο μικροσκόπιο κάθε πρόταση.

evry

#13
Δεν είναι κακό να γίνεται κριτική. Άλλωστε έχουμε ήδη μαζέψει αρκετά λάθη είτε τυπογραφικά είτε πιο σημαντικά και αυτό κατά μεγάλο βαθμό οφείλεται σε όσους συναδέλφους ασχολούνται με το μάθημα και μας στέλνουν σχόλια και παρατηρήσεις είτε μέσα από το στέκι είτε μέσω email.
Οι διορθώσεις θα σταλούν φέτος ως λίστα με παροράματα και του χρόνου θα ενσωματωθούν στο βιβλίο.
Η ουσία όμως είναι ότι θα πρέπει οι συνάδελφοι που μπαίνουν στην τάξη και κάνουν το μάθημα να δώσουν feedback ώστε να βελτίωσουμε το υλικό του χρόνου.

Τώρα σχετικά με τις παρατηρήσεις σου:

1) Για τα αρχεία αυτή τη στιγμή δεν μπορεί να γίνει κάτι. Θα το δούμε του χρόνου. Δεν ξέρω αν έχει νόημα να κάνουμε και δυαδικά αρχεία ή είναι καλύτερο να μείνουμε σε text
2) To escape sequence είναι δυο χαρακτήρες αλλά το αποτέλεσμα είναι ένας!! Για να πείσεις τους μαθητές σου, βάλτους στον διερμηνευτή να γράψουν το παρακάτω τμήμα κώδικα:
Κώδικας: python
>>> onlyone = '\n'
>>> len( onlyone )
1

όπως βλέπεις το μήκος της συμβολοσειράς είναι 1 γιατί το βλέπει σαν ένα χαρακτήρα τον χαρακτήρα τέλους γραμμής.
Ένα άλλο καλύτερο παράδειγμα είναι ότι στην C++ μπορείς να γράψεις
Κώδικας: cpp
char onlyone = '\n';

δηλαδή δέχεται αυτή την ακολουθία σε μεταβλητή που μπορεί να αποθηκευτεί μόνο ένας χαρακτήρας.

Σχετικά με το τελευταίο σου σχόλιο γιατί είναι αγωνία πολλών

Όταν γράφεται ένα βιβλίο για ένα μάθημα ο στόχος αυτών που το γράφουν είναι α) να ανταποκρίνεται όσο το δυνατόν καλύτερα στο αναλυτικό πρόγραμμα και β) να παρουσιάζει τις έννοιες με έναν όσο το δυνατόν πιο διδακτικό τρόπο.
Δεν γράψαμε ούτε βιβλίο ιστορίας, ούτε Χημείας, ούτε ΑΟΘ, αλλά βιβλίο προγραμματισμού το οποίο δεν έχει στόχο να το μάθεις απέξω. Επειδή η μαθησιακή διαδικασία έχει δηλητηριαστεί από τις εξετάσεις δε σημαίνει ότι πρέπει να σκεφτόμαστε έτσι, και να κάνουμε μάθημα ψάχνοντας να βρούμε πιθανά θέματα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

nefeli

Παράθεση από: evry στις 25 Νοε 2016, 07:44:54 ΠΜ

Καταρχήν το ότι το πέρασμα είναι κατά τιμή (call by value) αναφέρεται και αναλύεται στο βιβλίο της Β. Είναι όμως λάθος!!!  :laugh: (αν το δούμε αυστηρά) Ο λόγος που επιλέξαμε να το προσεγγίσουμε έτσι ήταν ότι αν το δεις το θέμα χρηστικά/λειτουργικά φαίνεται σαν να είναι κατά τιμή. Ο εσωτερικός μηχανισμός όμως που χρησιμοποιείται δεν είναι αυτός.  Στη βιβλιογραφία υπάρχει μια σύγχυση για το θέμα αυτό. Υπάρχουν βιβλία που το παρουσιάζουν ως πέρασμα κατά τιμή και άλλα που το παρουσιάζουν ως πέρασμα κατά αναφορά. Αν έχεις όρεξη για διάβασμα δες τους παρακάτω συνδέσμους οι οποίοι είναι αρκετά επεξηγηματικοί:
https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/
http://www.python-course.eu/passing_arguments.php

εδώ κάποιοι χρησιμοποιούν τον όρο call by assignment.


Σχετικά με το αν οι παράμετροι περνούν κατά τιμή ή κατα αναφορά, πιστεύετε ότι μπορούμε να πούμε ότι όταν οι παράμετροι είναι mutable δομής -όπως η λίστα- το πέρασμα γίνεται κατά αναφορά, αλλιώς γίνεται κατά τιμή;

evry

Αυτό δεν είναι σωστό. Μπορεί να δουλεύει, δηλαδή χρηστικά να φαίνεται έτσι, όμως ο μηχανισμός μεταβίβασης παραμέτρων δεν έχει καμία σχέση με το mutability ενός αντικειμένου. π.χ. στο παρακάτω παράδειγμα
Κώδικας: python
def byvalueString( s ):
    s = s + " version 3 "

s = "python"
byvalue(s)

το αποτέλεσμα θα είναι "python". Το αντικείμενο δεν θα αλλάξει. Αυτό όμως θα συμβεί όχι γιατί το πέρασμα είναι κατά τιμή αλλά επειδή χρησιμοποιούμε το τελεστή ανάθεσης τιμής για να "τροποποιήσουμε" το αντικείμενο. Στην πραγματικότητα δεν τροποποιούμε το αντικείμενο αλλά δημιουργούμε ένα νέο το οποίο όμως ορίζεται μόνο τοπικά μέσα στη συνάρτηση. Εδώ θα πρέπει να διευκρινήσουμε τα εξής:
Περνιέται αντίγραφο όχι όλου του αντικειμένου αλλά μόνο της αναφοράς του. Άρα αν πειράξουμε την αναφορά αυτή η αλλαγή δεν περνάει στο κύριο πρόγραμμα. Θα πρέπει να πειράξουμε το αντικείμενο αλλά δεν μπορούμε γιατί είναι immutable.
Η ιδέα μοιάζει λίγο με τον τρόπο με τον οποίο περνιούνται τα αντικείμενα στη Java. Δεν λέω ότι είναι το ίδιο αλλά είναι κάτι κοντινό για να καταλάβουμε τι συμβαίνει.
Δες τώρα το παρακάτω παράδειγμα:
Κώδικας: python
def byvalueList( L ):
    L = L + [100]
L = [1,2,3]
byvalueList(L)
print L

που θα εμφανίσει [1,2,3]. Η λίστα δεν θα αλλάξει παρόλο που είναι mutable, αφού έχει δημιουργηθεί μια νέα λίστα με τον τελεστή "="
Κοίτα όμως παρακάτω:
Κώδικας: python
def byrefList( L ):
    L.append(100)
L = [1,2,3]
byvalueList(L)
print L

Τώρα η λίστα θα αλλάξει γιατί έχουμε καλέσει μια member function. Τέτοια μέθοδος δεν υπάρχει σε string γιατί είναι immutable.

Καλό θα ήταν οι παραπάνω έννοιες να παρουσιαστούν με τη μορφή παραδειγμάτων στον διερμηνευτή και να γίνει συζήτηση με τους μαθητές.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

anastasd7

Συνάδελφοι θα ήθελα να επισημάνω και εγώ με τη σειρά μου ένα λαθάκι που εντόπισα. Στο πρόγραμμα με την range στη σελίδα 139 του βιβλίου το αποτέλεσμα θα είναι 4950 και όχι 5050 όπως φαίνεται στο βιβλίο.

Dimitris365

#17
Ουδέν σχόλιον.

evry

#18
Σε πολλά προβλήματα αρκεί να ελέγξουμε την ύπαρξη και όχι τη θέση.
Αυτό είναι πολύ πιο γενικό, διότι κανείς δεν σου εξασφαλίζει ότι αυτό που ψάχνεις εμφανίζεται το πολύ μια φορά. Άρα και από θέμα απλότητας για τα παιδιά πολύ καλά κάνει και επιστρέφει True ή False.
Μπορεί κανείς να ζητήσει σαν άσκηση μια δυαδική αναζήτηση που θα επιστρέφει τη θέση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Dimitris365

#19
Ουδέν σχόλιον.

evry

οκ γράψαμε λάθος τη δυαδική αναζήτηση.
Στείλε όμως ένα email και στους συγγραφείς ενός από τα πιο δημοφιλή βιβλία για αλγορίθμους σε Python  (σελ. 155)
Problem Solving with Algorithms and Data Structures
να το διορθώσουν και αυτοί, μια και το παρατήρησες εσύ. Εγώ θα ενημερώσω τη συγγραφική ομάδα.
Επίσης στείλε και στους διαχειριστές της διαδικτυακής έκδοσης του βιβλίου
https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBinarySearch.html
να διορθώσουν και αυτοί το λάθος τους.

Α και στείλε και ένα μήνυμα αν θες και στους καθηγητές των αντίστοιχων μαθημάτων στα πανεπιστήμια του Toronto και του Wisconsin να το διορθώσουν και αυτοί γιατί έχουν κάνει το ίδιο λάθος.
http://pages.cs.wisc.edu/~bobh/367/SORTING.html#bin
http://www.cs.toronto.edu/~reid/search/bincode.html
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

mipap

Συνάδελφοι, ο αλγόριθμος στη συνάρτηση της σελίδας 84 δεν δουλέυει. Αν αλλάξει το range του 2ου for και μειωθεί η εσοχή από το 2ο for και μετά οπως παρακάτω, τοτε δουλεύει:
def insertionSort(array):
    for i in range(1,len(array)):
        value=array
        pos=i
        # αναζήτηση
        while pos>0 and array[pos-1]>value:
            pos=pos-1
        #μετακινηση των στοιχείων μια θέση δεξια
        for j in range(i-1,pos-1,-1):
            array[j+1]=array[j]
        #το στοιχειο τοποθετειται στη θέση pos
        array[pos]=value

evry

έχεις δίκιο, η έκδοση που δίνεις είναι η σωστή.
Ο αλγόριθμος πάντως είναι εκτός ύλης.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

aprekates

Παράθεση από: nefeli στις 24 Νοε 2016, 03:30:52 ΜΜ
Έχω την εξής παρατήρηση σε σχέση με την επεξήγηση-ανάλυση του αλγορίθμου της φυσαλίδας στη σελίδα79.
Ενώ στην αρχή της σελίδας αναφέρεται ότι "πρέπει να εκτελέσουμε το παραπάνω τμήμα κώδικα τόσες φορές όσες είναι τα στοιχεία της, δηλαδή Ν", αμέσως παρακάτω "καταλήγουμε στον αλγόριθμο" που όμως εκτελείται για Ν-1 φορές (for i in range(1,N,1)).
Προφανώς ο συντάκτης έχει λάβει υπόψη του την παρατήρηση που αναφέρει στη συνέχεια: "φαίνεται ότι δεν χρειάζονται Ν επαναλήψεις, αλλά Ν-1" και  που οδηγούν στον βελτιωμένο τελικό αλγόριθμο της σελίδας 80.
Πιστεύω ότι πρέπει να διορθωθεί η εξωτερική for του αλογορίθμου της σελίδας 79 σε  for i in range(0,N,1): έτσι ώστε αφενός να υπάρχει αντιστοιχία με το κείμενο και αφετέρου να είναι πιο κατανοητές οι παρατηρήσεις που οδηγούν στη βελτίωση του αλγορίθμου της σελ.80.

Νομίζω το λάθος στη σελ 79 δεν ειναι στο (1,Ν,1) αλλά στο μέσα fοr
που πρέπει να γίνει range(N-1,0,-1)  αλλιώς δεν θα συμμετέχει στις συγκρίσεις το στοιχείο array[0].

Το δοκίμασα και σε κώδικα . Ο κωδικας του βιβλιου αφηνει το πρωτο στοιχειο απειραχτο.




evry

@aprekates
έχεις δίκιο, τουλάχιστον η τελική έκδοση του αλγορίθμου στην επόμενη σελίδα είναι σωστή.
Έχουμε μαζέψει αρκετές διορθώσεις οι οποίες θα μπουν στην νέα έκδοση του βιβλίου. Προς το παρόν θα βγει μια λίστα με παροράματα.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Δεν θέλω να υποβάλλω διόρθωση αλλά μία πρόταση. Σελίδα 139, δείχνει τους τρόπους διάσχισης μίας λίστας

Δεν θα ήταν ένας επίσης ωραίος τρόπος για να παρουσιάζεται στα παιδιά και ο παρακάτω:
for i in range(len(L)):
   print L[i]


evry

Στη σελίδα 139 αφού παρουσιαστεί η range έχει μερικά παραδείγματα διάσχισης λίστας με τον τρόπο που αναφέρεις
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Λάμπρος Μπουκουβάλας

Παράθεση από: evry στις 21 Φεβ 2017, 12:59:34 ΜΜ
Έχουμε μαζέψει αρκετές διορθώσεις οι οποίες θα μπουν στην νέα έκδοση του βιβλίου. Προς το παρόν θα βγει μια λίστα με παροράματα.

Θα ανεβάσεις εδώ σε pdf όλες τις έως τώρα καταγεγραμμένες διορθώσεις; Μέχρι στιγμής υπάρχει η έκδοση 1.1 των διορθώσεων.
Λάμπρος Μπουκουβάλας
MSc - MRes

http://blogs.sch.gr/lambrosbouk

Ο Θουκυδίδης  (που τον διαβάζουν οι ξένοι, αλλά όχι εμείς)  έγραφε: «Αταλαίπωρος τοις πολλοίς η ζήτησις της αληθείας, και επί τα ετοίμα μάλλον τρέπονται» (Ι, 20, 3). Οι περισσότεροι δηλαδή αναζητούν αβασάνιστα την αλήθεια και στρέφονται σε ό,τι βρίσκουν έτοιμο. Δεν προβληματίζονται...

evry

Ανέβασα στο πρώτο μήνυμα του thread την τελευταία έκδοση των διορθώσεων.
Προσοχή όμως!!! Αυτές είναι διορθώσεις που έχω συγκεντρώσει εγώ για τα κεφάλαια 5,8 μαζί με τις παρατηρήσεις των συναδέλφων σε αυτό το thread τους οποίους και ευχαριστώ πολύ.
Αυτές οι διορθώσεις δεν είναι επίσημες. Οι επίσημες διορθώσεις θα περιλαμβάνουν και άλλες που έχουν σημειωθεί και από τα άλλα μέλη της συγγραφικής ομάδας και θα δημοσιευθούν επίσημα από το ΙΕΠ.
Όποιος συνάδελφος έχει παρατήρηση, πρόταση ή διόρθωση μπορεί να το αναφέρει εδώ ώστε να είμαστε έτοιμοι για τη νέα έκδοση του βιβλίου του χρόνου στην οποία θα έχουν διορθωθεί όλα τα λάθη.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

#30
Έχουμε καμία επίισημη ενημέρωση για το πότε θα δημοσιευτούν οι διορθώσεις;

Επιπρόσθετα, εξακολουθούμε να υποστηρίζουμε ότι πρέπει να διδαχθεί-εξεταστεί το τελευταίο κεφάλαιο (11) ειδικά φέτος με τις καθυστερήσεις που υπάρχουν σε ύλη και βιβλία;

Επίσης θα ήθελα να ρωτήσω

1. Την διαδικασία του διαχωρισμού πως την διδάσκουμε εφόσον το βιβλίο την έχει λάθoς; Δεν θα ήταν καλύτερα με τη χρήση της εντολής append;

2. H σειριακή αναζήτηση και η ταξινόμηση με επιλογή πρέπει να διδαχθούν εφόσον απλά αναφέρονται στο σχολικό βιβλίο της Γ' Λυκείου και 'θεωρητικά' είναι γνωστοί απο το σχολικό βιβλίο της B; Ομοίως, ο αλγόριθμος του ΜΚΔ; Προσωπική άποψη: H σειριακή αναζήση απλά ως άσκηση για τον εντοπισμό θέσης, αφού έτσι και αλλιώς υπάρχει ο υπαρξιακός τελεστής in

3. Ο τελεστής : για τα substring μπορεί να χρησιμοποιηθεί; Η εντολή break; Προσωπική άποψη: όχι και στα 2

4. Για τη διαίρεση Στα παιδιά να δείξουμε το // ή να μείνουμε στο / ? Προσωπική άποψη: Mόνο /

aprekates

Όπως δίνεται η εξήγηση της λειτουργίας της file.seek(offset[, whence]) στην παρ. 6.2 προκύπτει
από το σχετικό συλλογισμό μια διαφορετική αναμενόμενη τιμή:

ΠαράθεσηΓια να αλλάξουμε την τρέχουσα θέση του αρχείου, μπορούμε να χρησιμοποιήσου-
με την fin.seek() (offset[, from_what]). Η θέση υπολογίζεται προσθέτοντας offset
(πλήθος bytes) σε ένα σημείο αναφοράς, το οποίο επιλέγεται από το from_what
όρισμα. Αν το from_what έχει τιμή 0, μετρά από την αρχή του αρχείου, αν έχει 1,
χρησιμοποιεί την τρέχουσα θέση του αρχείου και αν έχει 2, χρησιμοποιεί το τέλος
του αρχείου.

Κώδικας: python
>>> f = open('workfile', 'r+')
>>> f.write('0123456789abcdef')
>>> f.seek(5)      # Go to the 6th byte in the file
>>> f.read(1)
'5'
>>> f.seek(-3, 2)  # Go to the 3rd byte before the end
>>> f.read(1)
'd'


Αν η τρέχουσα θέση έχει τεθεί στο τέλος του αρχείου τότε η f.seek(-3,2) θα έπρεπε
προσθέτωντας το -3 σ'αυτήν να δείξει στον 'c' και όχι στον 'd'. Εκτός αν το σημείο αναφοράς
(το τέλος του αρχείου) είναι και αυτός χαρακτήρας. Μάλλον αυτό συμβαίνει.


bugman

Στο τέλος του αρχείου ο δρομέας αναζήτησης (seek) δεν δείχνει τίποτα. Λογικά πηγαίνει εκεί μετά το διάβασμα του τελευταίου στοιχείου. Οπότε το -3 πάει στο D. Αν ο δρομέας έδειχνε το f θα σήμαινε ότι έχουμε ακόμα κάτι να διαβάσουμε άρα δεν είμαστε στο τέλος του αρχείου.

aprekates

#33
Παράθεση από: bugman στις 27 Μαρ 2017, 08:50:35 ΜΜ
Στο τέλος του αρχείου ο δρομέας αναζήτησης (seek) δεν δείχνει τίποτα. Λογικά πηγαίνει εκεί μετά το διάβασμα του τελευταίου στοιχείου. Οπότε το -3 πάει στο D. Αν ο δρομέας έδειχνε το f θα σήμαινε ότι έχουμε ακόμα κάτι να διαβάσουμε άρα δεν είμαστε στο τέλος του αρχείου.

Αν όμως πάμε στο τέλος του αρχείου κατευθείαν με την seek(0,2) τότε το αποτέλεσμα που αναμένεις (εφόσον δεν είναι ξεκάθορο από τον ορισμό της συνάρτησης ) εξαρτάται από τη σημασία που έχει το 'τέλος του αρχείου' . Αν τέλος του αρχείου ειναι ο τελευταίος χαρακτήρας τότε το αποτέλεσμα που περιμένω είναι διαφορετικό απ'αυτό που προκύπτει.

Οπότε 'το τέλος του αρχείου' είναι μια θέση μετά τον τελευταίο χαρακτήρα.

Κώδικας: python
>>> f = open('workfile.txt', 'w')
>>> f.write("12345")
>>> f.close()
>>> f = open('workfile.txt')
>>> f.tell()
0L
>>> f.seek(0,2)
>>> f.tell()
5L


Το παράξενο είναι ότι:
>>> f.seek(10,0)
>>> f.tell()              # μήπως θα έπρεπε να επιστρέψει μήνυμα λάθους για το τέλος αρχείου.
10L
>>> f.read(1)
''


Είναι ενδιαφέρον από μια μικρή έρευνα στο διαδίκτυο ότι μια φαινομενικά μικρή λεπτομέρεια
οπως το αν η python υλοποιεί το EOF κρύβει από πίσω αρκετό προβληματισμό όπως πχ φαίνεται στο νήμα Status of EOF

bugman

Είναι φανερό τι συμβαίνει. Το tell() έχει βάση το 0. Οπότε τελευταία θέση είναι το 5 (όπου δεν έχει χαρακτήρα). Το Seek στο τύπο 2  έχει σχετική θέση, και το 0,2 σημαίνει τελευταία θέση του αρχείου (όχι τελευταίος χαρακτήρας), άρα μετά το χαρακτήρα 5.
Για να γίνει πιο κατανοητό, ας πούμε ότι οι θέσεις στο αρχείο είναι σαν θέσεις λεωφορείου. Το seek δείχνει στις πλάτες των θέσεων, και η τελευταία του ένδειξη δεν δείχνει καμία "πλάτη", ούτε βέβαια περιεχόμενο, αλλά μετά την τελευταία θέση, εκεί που μπορεί κάποιος να βάλει μια καινούργια (αυτό το σκοπό έχει να μπορεί να δείχνει εκεί).
Εδώ να πούμε ότι η Python όπως διάβασα κάνει το εξής αν το αρχείο είναι και προσθήκη append και για ανάγνωση (με το +). Μπορούμε να μετακινήσουμε το δρομέα (cursor λέγεται στα αγγλικά), αλλά όταν πάμε να γράψουμε δεν θα γράψει εκεί που το μετακινήσαμε αλλά στο τέλος και θα μείνει στο νέο τέλος.

aprekates

Παράθεση από: bugman στις 29 Μαρ 2017, 12:27:27 ΠΜ
Είναι φανερό τι συμβαίνει. Το tell() έχει βάση το 0. Οπότε τελευταία θέση είναι το 5 (όπου δεν έχει χαρακτήρα). Το Seek στο τύπο 2  έχει σχετική θέση, και το 0,2 σημαίνει τελευταία θέση του αρχείου (όχι τελευταίος χαρακτήρας), άρα μετά το χαρακτήρα 5.
....

Ο προβληματισμός μου ήταν καταπόσο η ερμηνεία της λειτουργίας της seek από το βιβλίο
είναι σαφής ή αφήνει περιθώρια για παρερμηνείες όταν λέει ότι υπολογίζουμε τη νεα θέση
προσθέτωντας το offset στο σημείο αναφοράς.

bugman

Οπωσδήποτε η παρερμηνεία είνα φυσικό επόμενο, όταν ο μαθητής δεν δοκιμάσει τις εντολές. Η έννοια του offset, είναι δυσνόητη, χωρίς επεξήγηση. Οι seek και tell χρησιμοποιούν τον δρομέα διαφορετικά. Παίζει ρόλο το είδος του αρχείου. Πχ ένα αρχείο με UTF-8 κωδικοποίηση, μπορεί για ένα χαρακτήρα να μεταθέσει τον δρομέα ένα ή δύο ή τέσσερα byte. Εκεί η seek...πώς θα ξεχωρίσει ποιο χαρακτήρα θέλουμε με offset;  Δεν είναι απλή υπόθεση η χρήση των εντολών αυτών.
Η ερμηνεία του βιβλίου θα έπρεπε να συμπεριλάβει το τι σημαίνει offset, είναι ανά byte,  ανά δύο, ή βάσει του μήκους σε bytes του εκάστοτε χαρακτήρα, για το όποιο ν δώσουμε στη seek.


aprekates

Παράθεση από: bugman στις 29 Μαρ 2017, 08:53:21 ΜΜ
Οπωσδήποτε η παρερμηνεία είνα φυσικό επόμενο, όταν ο μαθητής δεν δοκιμάσει τις εντολές. Η έννοια του offset, είναι δυσνόητη, χωρίς επεξήγηση. Οι seek και tell χρησιμοποιούν τον δρομέα διαφορετικά. Παίζει ρόλο το είδος του αρχείου. Πχ ένα αρχείο με UTF-8 κωδικοποίηση, μπορεί για ένα χαρακτήρα να μεταθέσει τον δρομέα ένα ή δύο ή τέσσερα byte. Εκεί η seek...πώς θα ξεχωρίσει ποιο χαρακτήρα θέλουμε με offset;  Δεν είναι απλή υπόθεση η χρήση των εντολών αυτών.
Η ερμηνεία του βιβλίου θα έπρεπε να συμπεριλάβει το τι σημαίνει offset, είναι ανά byte,  ανά δύο, ή βάσει του μήκους σε bytes του εκάστοτε χαρακτήρα, για το όποιο ν δώσουμε στη seek.

Αυτό ήθελα να πω συνάδελφε. Συμφωνώ. Και το θέμα του πως δουλεύουν οι seek αλλά και άλλες εντολές πχ read(x) με utf-8  είναι επίσης ενδιαφέρον θέμα συζήτησης. Χρειάζεται ένα ξεχωριστώ νήμα συζήτησης για το θέμα αυτό, 'υποστήριξη ελληνικων στην Python"

aprekates

Στο κεφάλαιο 6 σε αρκετά σημεία  (και στις ερωτήσεις ) πότε γίνεται λόγος για μεθόδους και πότε για συναρτήσεις. Προσωπικά δεν επηρεάζει την κατανόηση-ανάγνωση μου αλλά στους μαθητές δημιουργεί σύγχυση. Και η αναφορά σε μέθοδο fin.tell() δεν διευκολύνει  . Έχει γραφτεί στο φορουμ  και το παρατήρησα και με τους μαθητές μου ότι θεωρούν το fin ανεπαίσθητα ίσως μια δεσμευμένη λέξη.

Έχουμε δηλαδή πρόωρη ίσως έκθεση σε αντικειμενόστραφή σύνταξη, χωρίς το βιβλίο να είναι ξεκάθαρο . Και ίσως δυσκολεύει και το ότι η open θεωρούμε ότι είναι συνάρτηση που δημιουργεί αντικείμενο.

Και υπάρχει και ένα θέμα : Στην ερώτηση με ποια συνάρτηση κλείνουμε ένα άρχειο , η απάντηση μπορεί να είναι ένα στεγνό : η συνάρτηση close() ;



evry

Το σκεπτικό είναι ότι δεν χρειάζεται να φτάσουμε στο κεφάλαιο του αντικειμενοστρεφούς για να μιλήσουμε για αντικείμενα. Γίνεται μια αναφορά στο βιβλίο της Β σχετικά με το τι είναι μέθοδος. Εκεί που περιγράφονται τα strings και οι λίστες αναφέρονται οι μέθοδοι ως εγγενείς λειτουργίες των αντικειμένων. Με αυτόν τον τρόπο όταν ο μαθητής βλέπει το dot notation θα πρέπει να αντιλαμβάνεται ότι καλεί μια μέθοδο του συγκεκριμένου αντικειμένου. Σε πρώτη φάση θέλουμε απλά να τα χρησιμοποιεί.
Για το κεφάλαιο 6 θα προσπαθήσουμε να διορθώσουμε τις αναφορές αυτές όπου μπορούμε.
Για την close που λες έχεις δίκιο, η ερώτηση πρέπει να επαναδιατυπωθεί.
Αυτή την εποχή κάνουμε έναν αγώνα δρόμου για να διορθώσουμε όλα τα λάθη στο βιβλίο και του χρόνου να βγει νέα έκδοση, οπότε είναι η κατάλληλη στιγμή για τέτοιες χρήσιμες παρατηρήσεις, ή προτάσεις.

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

#41
Ευριπίδη υπάρχει σκέψη να μεταβείτε σε python 3? Υποθέτω πως όχι..

Δύο πράγματα που έρχονται στο μυαλό μου και θα σου γράψω ότι άλλο θεωρήσω καλό για διόρθωση ειναι τα εξής
1) Κατάργηση του τελεστή // από το βιβλίο
2) Στη δυαδική αναζήτηση να τονιστεί αυτή η μέθοδος που περιγράφεται στη σελίδα 75 της έντυπης έκδοσης ειναι για ταξινομημένη σε αύξουσα διάταξη λίστα και να τεθεί σαν ερώτημα στους μαθητές, τι πρέπει να αλλάξουμε για να λειτουργεί σε λίστα με φθίνουσα ταξινόμηση
3) Το κεφάλαιο 5 θα μπορούσε να τοποθετηθεί μετά το κεφάλαιο 8
4) Νομιζω οτι στην εικόνα 5.2 και στην εικόνα 5.4 οι δείκτες που υπάρχουν από πάνω (j=6, j=5, j=4 ktl) πρέπει να μετακινηθούν όλοι μία θέση δεξιά έτσι ώστε η λίστα που ειναι απο κάτω (και όχι η διπλανή της) να δείχνει το αποτέλεσμα της εκτέλεσης του κώδικα όταν π.χ j=6
5) Τετράδιο μαθητή, δραστηριότητα 13 / κεφαλαίου 8, στη λύση: Αντί για s=0, να γράφεί s=0.0 και
6) Τετράδιο μαθητή, δραστηριότητα 19 / κεφαλαίου 8, λέει "η εισαγωγή και η Ι" ενώ κανονικά θα έπρεπε να λέει "η ώθηση και η απώθηση"

evry

#42
Παράθεση από: Γιάννης Αναγνωστάκης στις 03 Απρ 2017, 05:24:06 ΜΜ
Ευριπίδη υπάρχει σκέψη να μεταβείτε σε python 3? Υποθέτω πως όχι..
όχι. Αυτή τη στιγμή προέχει να βγει μια νέα έκδοση με διορθωμένα όλα τα λάθη και κάποιες αναδιατυπώσεις. Επίσης κάποιες μικρές προσθήκες όπως ο τελεστής διαμέρισης : στην Γ, που είναι χρήσιμος.

Παράθεση
1) Κατάργηση του τελεστή // από το βιβλίο
έχει γίνει
Παράθεση
2) Στη δυαδική αναζήτηση να τονιστεί αυτή η μέθοδος που περιγράφεται στη σελίδα 75 της έντυπης έκδοσης ειναι για ταξινομημένη σε αύξουσα διάταξη λίστα και να τεθεί σαν ερώτημα στους μαθητές, τι πρέπει να αλλάξουμε για να λειτουργεί σε λίστα με φθίνουσα ταξινόμηση
οκ
Παράθεση
3) Το κεφάλαιο 5 θα μπορούσε να τοποθετηθεί μετά το κεφάλαιο 8
Θα μπορούσε αλλά δεν θα γίνει, γιατί το μάθημα έχει συνέχεια και οι μαθητές έχουν διδαχθεί λίστες στην Β όπου το μάθημα είναι 4ωρο. Είναι η πρώτη φορά που έχουμε προαπαιτούμενες γνώσεις στην πληροφορική και θα πρέπει να το συνηθίσουμε, αλλιώς ακυρώνουμε ουσιαστικά το μάθημα της Β.
Ωστόσο όποιος θέλει μπορεί να "υπενθυμίσει" στα παιδιά τις λίστες από το βιβλίο της Β. ;)

Παράθεση
4) Νομιζω οτι στην εικόνα 5.2 και στην εικόνα 5.4 οι δείκτες που υπάρχουν από πάνω (j=6, j=5, j=4 ktl) πρέπει να μετακινηθούν όλοι μία θέση δεξιά έτσι ώστε η λίστα που ειναι απο κάτω (και όχι η διπλανή της) να δείχνει το αποτέλεσμα της εκτέλεσης του κώδικα όταν π.χ j=6
Το σκεπτικό είναι να δείξει ποια στοιχεία συγκρίνονται μεταξύ τους πριν αλλάξουν θέση. Πιστεύεις ότι αυτό που προτείνεις είναι πιο κατανοητό από τους μαθητές?

Γιάννη ευχαριστώ πολύ για τις παρατηρήσεις σου
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

chris1997

Γεια σας παιδια, πρωτη φορα γραφω εδω. Λοιπον, στην σελιδα 199 του βιβλιου γραφει πως η self ειναι δεσμευμενη λεξη ενω το documentation της python γραφει πως ειναι απλα μια συμβαση.
Παραγραφο 5:
https://docs.python.org/2/tutorial/classes.html#random-remarks

Τι εχετε να πειτε;


Ευχαριστω.



evry

Έτσι ακριβώς είναι, η self δεν είναι δεσμευμένη λέξη, απλά είναι μια σύμβαση που χρησιμοποιούμε. Γενικά ότι παράμετρο βάλεις στην πρώτη θέση αναφέρεται στο αντικείμενο.
Καλύτερα όμως να μην μπλέξουμε τους μαθητές με τέτοιες λεπτομέρειες. Δεν έχει νόημα.

Πάντως το το έχουμε διορθώσει στη νέα έκδοση χωρίς να προκληθεί σύγχυση στους μαθητές.
Διάβασε και το παρακάτω άρθρο του δημιουργού της Python που εξηγεί το σκεπτικό αυτής της απόφασης:
http://neopythonic.blogspot.gr/2008/10/why-explicit-self-has-to-stay.html
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

chris1997

Ευχαριστω για την απαντηση :)
Μια ερωτηση ακομη. Επειδη ειμαι μαθητης, αν στις εξετασεις σε μια σχετικη ερωτηση απαντησω πως δεν ειναι δεσμευμενη, υποθετω πως θα το παρουν ως λαθος οι διορθωτες, σωστα; Υποθετω πως ειναι καλυτερα να το απαντησω οπως το εχει μεσα το βιβλιο, γιατι διαφορετικα μπορει να σκεφτουν που το ειδα αυτο και να το παρουν ως λαθος.

evry

Δεν νομίζω ότι θα υπάρξει τέτοια ερώτηση στις εξετάσεις, γιατί σε αυτή την περίπτωση ότι και να απαντήσεις θα είναι σωστό
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 04 Απρ 2017, 12:26:33 ΠΜ

Το σκεπτικό είναι να δείξει ποια στοιχεία συγκρίνονται μεταξύ τους πριν αλλάξουν θέση. Πιστεύεις ότι αυτό που προτείνεις είναι πιο κατανοητό από τους μαθητές?

Γιάννη ευχαριστώ πολύ για τις παρατηρήσεις σου

Να σαι καλά!

Ναι έτσι πιστεύω..Καλό θα ήταν να μας πουν και άλλοι συνάδελφοι τις παρατηρήσεις τους.

Επίσης η φυσαλίδα δεν θα ήταν πιο απλή έτσι;

for i in range(N-1):
    for j in range(N-1,i,-1):
        if L[j]<L[j-1]:
            L[j],L[j-1]=L[j-1],L[j]


evry

Το τι είναι πιο απλό σηκώνει λίγο συζήτηση. Δηλαδή δεν μας ενδιαφέρει να κάνουμε μια απλή έκδοση της φυσαλίδας την οποία θα μπορούν οι μαθητές να αποστηθίσουν εύκολα. Η τελική έκδοση θα πρέπει να προκύπτει από μια επαγωγική διαδικασία όπως αυτή που προσπαθεί να κάνει το βιβλίο.
Για παράδειγμα στην έκδοση του βιβλίου στην εξωτερική επανάληψη δίνουμε το βήμα 1 (range(1,N,1)). Θα μπορούσαμε να μην το δίναμε.

Επίσης με βάση το σχήμα που δίνουμε προηγουμένως και από το οποίο θέλουμε ο μαθητής να γενικεύσει ταιριάζει καλύτερα το i=1 για πρώτο πέρασμα, i=2 για δεύτερο πέρασμα κλπ.
Θα το ξαναδώ όμως αυτές τις μέρες που γίνονται οι διορθώσεις.
 
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 15 Απρ 2017, 01:34:02 ΠΜ
Το τι είναι πιο απλό σηκώνει λίγο συζήτηση. Δηλαδή δεν μας ενδιαφέρει να κάνουμε μια απλή έκδοση της φυσαλίδας την οποία θα μπορούν οι μαθητές να αποστηθίσουν εύκολα. Η τελική έκδοση θα πρέπει να προκύπτει από μια επαγωγική διαδικασία όπως αυτή που προσπαθεί να κάνει το βιβλίο.
Για παράδειγμα στην έκδοση του βιβλίου στην εξωτερική επανάληψη δίνουμε το βήμα 1 (range(1,N,1)). Θα μπορούσαμε να μην το δίναμε.

Επίσης με βάση το σχήμα που δίνουμε προηγουμένως και από το οποίο θέλουμε ο μαθητής να γενικεύσει ταιριάζει καλύτερα το i=1 για πρώτο πέρασμα, i=2 για δεύτερο πέρασμα κλπ.
Θα το ξαναδώ όμως αυτές τις μέρες που γίνονται οι διορθώσεις.
 

Δεν νομίζω ότι η υλοποίηση που προτείνω  πάντως ξεφεύγει απο την μέθοδο που προτείνει το βιβλίο, αφού στο 1ο πέρασμα θέλουμε να φτάσουμε απο την Ν-1 στη 0, στο 2ο περασμα απο την Ν-1 στην 1 κ.ο.κ

evry

#50
Δεν ξεφεύγει, θα μπορούσε να επαναδιατυπωθεί όλη η διαδικασία με μικρο-αλλαγές ώστε να ταιριάζει σε αυτή την εκδοχή.
Το θέμα είναι ότι δυσκολεύεσαι να μιλήσεις για βήμα 0 στους μαθητές, και να λες ότι είναι το 1ο βήμα.
Επίσης επειδή ο αλγόριθμος δεν είναι εύκολος στην κατανόηση (άσχετα αν είναι εύκολος στην απομνημόνευση) καλό θα είναι να φαίνονται όλες οι τιμές (αρχή, τέλος, βήμα). Εδώ το (1, Ν, 1) ταιριάζει καλύτερα. Το μόνο προβληματάκι στην έκδοση αυτή έχει να κάνει με το i-1 στην εσωτερική επανάληψη. Για αυτό είπα ότι θέλω να δω τι είναι καλύτερο. Εδώ όμως και i να δώσουν οι μαθητές πάλι σωστοί θα είναι, απλά θα κάνει μια περιττή σύγκριση.

Όπως και να έχει η ταξινόμηση αυτή έχει πάρα πολλές παραλλαγές και φυσικά οι μαθητές μπορούν να χρησιμοποιήσουν όποια τους αρέσει, εφόσον είναι σωστή.
Ο τρόπος παρουσίασης με απασχολεί πιο πολύ και όχι η τελική έκδοση.

Θα το κοιτάξω αυτές τις  μέρες που έχω χρόνο και θα δω ποια έκδοση προκύπτει πιο φυσιολογικά.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

Γιάννη τελικά μου φαίνεται ότι αυτό που προτείνεις μπορεί να σταθεί καλύτερα. Έχει αλλάξει όλη η παράγραφος έτσι ώστε να καταλήγει σε αυτή την έκδοση.
Αυτή που πρότεινα εγώ είχε το πρόβλημα με το i-1 στην εσωτερική επανάληψη που δεν μου άρεσε από την αρχή όπως είχα πει, αλλά θεωρούσα θετικό το γεγονός ότι ο εξωτερικός μετρητής i ταυτίζεται με τον αριθμό του περάσματος.

Παράθεση από: Γιάννης Αναγνωστάκης στις 15 Απρ 2017, 09:19:55 ΠΜ
Δεν νομίζω ότι η υλοποίηση που προτείνω  πάντως ξεφεύγει απο την μέθοδο που προτείνει το βιβλίο, αφού στο 1ο πέρασμα θέλουμε να φτάσουμε απο την Ν-1 στη 0, στο 2ο περασμα απο την Ν-1 στην 1 κ.ο.κ

What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 17 Απρ 2017, 09:45:55 ΠΜ
Γιάννη τελικά μου φαίνεται ότι αυτό που προτείνεις μπορεί να σταθεί καλύτερα. Έχει αλλάξει όλη η παράγραφος έτσι ώστε να καταλήγει σε αυτή την έκδοση.
Αυτή που πρότεινα εγώ είχε το πρόβλημα με το i-1 στην εσωτερική επανάληψη που δεν μου άρεσε από την αρχή όπως είχα πει, αλλά θεωρούσα θετικό το γεγονός ότι ο εξωτερικός μετρητής i ταυτίζεται με τον αριθμό του περάσματος.

Χαίρομαι που το βλέπουμε με την ίδια οπτική!

aprekates

Στην ενότητα 3.5
ΠαράθεσηΣύνθετος τύπος δεδομένων (Composite Data Type) είναι εκείνος, που αποτε-
λείται από Πρωτογενείς ή / και άλλους σύνθετους τύπους, όπου μια μεταβλητή
μπορεί να πάρει ως τιμή μια ενότητα τιμών. Οι σύνθετοι τύποι καλούνται και
Δομές Δεδομένων. Παραδείγματα σύνθετων τύπων είναι η Εγγραφή, το Σύνο-
λο, ο Πίνακας.

Νομίζω ότι το σωστό θα ήταν :
Σύνθετος τύπος δεδομένων (Composite Data Type) είναι εκείνος, που αποτε-
λείται από απλούς ή / και άλλους σύνθετους τύπους,

aprekates

Στις δραστηριότητες εμπέδωσης της ενότητας 11.2  όρίζεται ή κλάση
class Car:
   def __init__(self,make):
          self.make = make
...


Κρίνωντας από τις ερωτήσεις 3,5 καλύτερο όνομα της μεταβλητής θα ήταν το marka.

evry

@aprekates
όσον αφορά το απλός αντί για πρωτογενής τύπος δεδομένων πιθανόν να κατάλαβες ότι πρόκειται για μια προσπάθεια μετάφρασης του primitive. Το απλός ίσως να είναι παιδαγωγικά καλύτερο για τους μαθητές αλλά δεν μου φαίνεται δόκιμο.

Όπως και να έχει ευχαριστώ για τις παρατηρήσεις σου σε αυτό το thread , βοήθησαν πολύ.
Αυτή τη στιγμή έχουν διορθωθεί και έχουν αναδιατυπωθεί αρκετά πράγματα στα βιβλία της Β και της Γ. Επίσης έχει γίνει προσπάθεια να υπάρχει μια συνέπεια/συνέχεια με τη Β (π.χ. τελεστής διαμέρισης, τελεστής ακέραιας διαίρεσης κλπ).
Φέτος ήταν μια δύσκολη χρονιά γιατί όλα έγιναν γρήγορα. Του χρόνου αν όλα πάνε καλά οι μαθητές θα έχουν από την αρχή της χρονιάς:
1) Βιβλίο (2η έκδοση)
2) Τετράδιο μαθητή
3) Τεύχος λύσεων του τετραδίου μαθητή

και οι καθηγητές το Βιβλίο καθηγητή
Όλα τα παραπάνω έχουν ολοκληρωθεί από τη συγγραφική ομάδα.

Ωστόσο το σημαντικό είναι να αντιληφθούν όλοι οι καθηγητές ότι το μάθημα δεν είναι μόνο του στη Γ αλλά αποτελεί συνέχεια του μαθήματος της Β που είναι τετράωρο και εργαστηριακό.
Νομίζω ότι η ύλη που ζητείται υπερκαλύπτεται άνετα σε 2 τετράωρα μαθήματα, δεδομένου ότι πάνω από το 50% επαναλαμβάνεται στη Γ ως εμβάθυνση.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Νέες εκδόσεις βιβλίων Προγραμματισμού Υπολογιστών και Δίκτυα Υπολογιστών
http://www.iep.edu.gr/el/component/k2/19-tomeas-pliroforikis

tsak


evry

Υπάρχουν διορθώσεις και στα δυο βιβλία προγραμματισμού για Β και Γ ΕΠΑΛ.
Οι διορθώσεις είναι αρκετές και μερικά σημεία έχουν ξαναγραφτεί, έτσι ώστε να υπάρχει μια καλύτερη συμβατότητα μεταξύ των δυο βιβλίων. Στο βιβλίο της Γ προσοχή στα κεφάλαια με τις δομές δεδομένων όπου έχει προστεθεί η χρήση του τελεστή διαμέρισης : , ο οποίος μπορεί να χρησιμοποιείται από τους μαθητές.
Επίσης αφαιρέθηκαν κάποια παραδείγματα κλήσεων μεθόδων της Python όπως find, upper κλπ για να μην θεωρηθούν ότι είναι εντός ύλης.
Ειδικά το βιβλίο της Γ έχει σημαντικές αλλαγές σε κάποια σημεία όποτε θα πρέπει να προσέξουν οι εκπαιδευτικοί να μην χρησιμοποιήσουν τα παλιά βιβλία, ειδικά στα τελευταία κεφάλαια.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

2 ερωτήσεις

1. Τα τετράδιο μαθητή στο Προγραμματισμο δεν υπέστη καμία αλλαγή, σωστά?
2. Στο κεφάλαιο  3 / Δραστηριότητα 4 (τετράδιο μαθητή, λύσεις ασκήσεων) γιατί το Print δεν ειναι αποδεκτό όνομα μεταβλητής; Προφανώς δεν είναι δόκιμο, αλλά δεν είναι λάθος.

evry

Παράθεση από: Γιάννης Αναγνωστάκης στις 20 Αυγ 2017, 01:46:03 ΜΜ
2 ερωτήσεις

1. Τα τετράδιο μαθητή στο Προγραμματισμο δεν υπέστη καμία αλλαγή, σωστά?
Είχαμε κάνει διορθώσεις και στο τετράδιο μαθητής μετά από παρατηρήσεις που είχαμε μαζέψει, όμως από ότι βλέπω δεν έχει ανέβει η νέα έκδοση.
Υποθέτω ότι στα σχολεία θα σταλεί σε έντυπη μορφή η διορθωμένη έκδοση.

Παράθεση
2. Στο κεφάλαιο  3 / Δραστηριότητα 4 (τετράδιο μαθητή, λύσεις ασκήσεων) γιατί το Print δεν ειναι αποδεκτό όνομα μεταβλητής; Προφανώς δεν είναι δόκιμο, αλλά δεν είναι λάθος.
Η μόνη λογική εξήγηση είναι ότι όταν στο word γράφεις print και μετά πατάς space το p γίνεται κεφαλαίο :D
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

Γιάννης Αναγνωστάκης

Παράθεση από: evry στις 21 Αυγ 2017, 10:39:32 ΠΜ
Είχαμε κάνει διορθώσεις και στο τετράδιο μαθητής μετά από παρατηρήσεις που είχαμε μαζέψει, όμως από ότι βλέπω δεν έχει ανέβει η νέα έκδοση.
Υποθέτω ότι στα σχολεία θα σταλεί σε έντυπη μορφή η διορθωμένη έκδοση.
Η μόνη λογική εξήγηση είναι ότι όταν στο word γράφεις print και μετά πατάς space το p γίνεται κεφαλαίο :D
;D
Καλό θα ήταν πάντως να ανέβει και η καινούρια ηλεκτρονική έκδοση του τετραδίου  μαθητή στο iep για όσους δεν μπορούν να έχουν έντυπη έκδοση. Αν μπορεί κάποιος από τη συγγραφική ομάδα να επικοινωνήσει με το iep για αυτό το θέμα θα ήταν πολύ χρήσιμο.


vpap

#62
Στο νέο βιβλίο (έκδοση 2.0):
Σελ. 34, ποιο είναι το σωστό, τελεστής ίσον ή τελεστής εκχώρησης; Μάλλον το 2ο οπότε θα έπρεπε το τελεστής ίσον να μην αναφέρεται πουθενά στο βιβλίο
Σελ. 37, τελευταία γραμμή, από τη γενική σύνταξη λείπει η προτροπή (μήνυμα) δηλ. Σύνταξη: Όνομα μεταβλητής = raw_input ('μήνυμα')
Σελ. 43, σε ποια γλώσσα προγραμματισμού το σύμβολο := είναι πράξη (δηλ. τελεστής) ακεραίων;;

Λαμπράκης Μανώλης

 Καλημέρς σε όλους

Να ρωτήσω ( δίχως να έχω διαβάσει όλες τις προηγούμενες απαντήσει, συγνώμη αν έχει αναφερθεί ξανά, αλλά μιας που το είδα τώρα που κάνω μάθημα το στέλνω)

Σελ 77 στη νέα έκδοση, το σχόλιο δεν θα έπρεπε να είναι # μέχρι i+1 αντί μέχρι i-1 ;;;  αν είναι πχ απο 10 μέχρι 1 θα σταματήσει στο 2 όχι στο 0... δεν ξέρω αν μου διαφεύγει κάτι..

demy8

1) Στο κεφαλαιο 8.4 ουρά στη νέα έκδοση στην εισαγωγή υπάρχει η εντολή:

         queue=queue.append(item)

δεν θα έπρεπε να είναι απλά:

           queue.append(item) ;

2) επίσης θα ήθελα να ρωτήσω γιατί είναι λάθος η υπολοίηση στην πρώτη έκδοση ( queue=queue + [item]  ) ;

taxata

#65
1) θα ήταν μάλλον προτιμότερο και πιο κατανοητό από τη δημιουργία τοπικής ουράς μέσα στη συνάρτηση με το ίδιο όνομα.
2) στους αλγόριθμους υλοποίησης στοίβας και ουράς αντίστοιχα, στη συνάρτηση push και enqueue ενώ έρχεται η στοίβα( ή η ουρά) ως εξωτερική παράμετρος,  με τη δήλωση stack = stack + [item] εντός της συνάρτησης ξαναορίζεται μία κενή τοπική στοίβα stack ( ή ουρά) και προστίθεται σε αυτή το στοιχείο item. (αντί της stack.append(item) η οποία θα άλλαζε την καλούμενη στοίβα ( ή ουρά)
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

vdvas

Στο κεφάλαιο 11 και συγκεκριμένα στην ενότητα 11.3 γίνεται λόγος για το πως μπορούν να ορισθούν ιδιότητες σε μία κλάση.

Στο κείμενο αναφέρεται ότι μπορούμε να ορίσουμε μια ιδιότητα είτε μέσα σε μία κλάση, είτε σε ένα αντικείμενο μιας κλάσης και αφήνεται να εννοηθεί ότι το αποτέλεσμα είναι το ίδιο.

Αφήνοντας κατά μέρος το ότι παραβιάζονται οι προηγούμενες παροτρύνσεις ότι δεν πρέπει να αρχικοποιούμε ιδιότητες έξω από τον κατασκευαστή, δεν γίνεται σαφές ότι μια ιδιότητα κλάσης ισχύει για όλα τα αντικείμενα της κλάσης, ενώ μια ιδιότητα που ορίζεται σε ένα αντικείμενο ισχύει μόνο για αυτό.

Πέρα όμως από αυτό, ακόμα και οι ιδιότητες που ορίζονται στην κλάση δεν είναι απλή περίπτωση.
Ενώ όλα τα αντικείμενα της κλάσης μπορούν να διαβάσουν την τιμή τους, όταν κάποιο από αυτά την τροποποιήσει με το συμβολισμό Αντικείμενο.Ιδιότητα=Νέα_Τιμή, η τροποποίηση αυτή ισχύει μόνο για το συγκεκριμένο αντικείμενο.

Θα πρέπει να χρησιμοποιηθεί η έκφραση Κλάση.Ιδιότητα=Νέα_Τιμή για να αλλάξει η τιμή για όλα τα αντικείμενα και πάλι αυτό θα γίνει μόνο για αυτά στα οποία δεν έχει ήδη τροποποιηθεί μέσω του ονόματος του αντικειμένου, όπως φαίνεται και από το ακόλουθο κομμάτι κώδικα:

class Counter:
  top=100
  def __init__(self,i):
    self.i=i

c1=Counter(50)
c2=Counter(20)
c3=Counter(30)
print c1.top, c2.top, c3.top
c1.top=80
print c1.top, c2.top, c3.top
Counter.top=150
print c1.top, c2.top, c3.top


που έχει σαν αποτέλεσμα:
100 100 100
80 100 100
80 150 150

Νομίζω ότι το κομμάτι αυτό δεν είναι σαφές και πιθανώς να χρειάζεται επαναδιατύπωση.

happiness

Είμαι πολύ καινούρια στην Python. Στο τετράδιο μαθητή παρατηρώ από την πρώτη-πρώτη δραστηριότητα ότι χρησιμοποιείται η print +παράμετρο χωρίς η παράμετρος να κλείνεται σε παρενθέσεις. Στο Thonny που χρησιμοποιώ ως περιβάλλον, αυτό το πετάει syntax error και το ίδιο βλέπω και σε άλλα online tutorials. Τι είναι αυτό που δεν γνωρίζω και χρησιμοποιείται έτσι στο τετράδιο μαθητή;

seibei


Στην python2 που χρησιμοποιείται στο ΕΠΑΛ (ποτέ δεν κατάλαβα γιατί), η print δεν είναι συνάρτηση,
οπότε δεν έχει παρένθεση όπως στην python3.
Προφανώς το περιβάλλον που χρησιμοποιείς εχει python3.


happiness

Και εγώ τι να μάθω στα παιδιά; Τι χρησιμοποιείται στις πανελλήνιες; το με ή χωρίς;

polikarpos

Παράθεση από: happiness στις 19 Σεπ 2019, 09:34:57 ΠΜ
Και εγώ τι να μάθω στα παιδιά; Τι χρησιμοποιείται στις πανελλήνιες; το με ή χωρίς;
Χωρίς
www.sepchiou.gr
moodle.sepchiou.gr
museum.sepchiou.gr

likoyrgos

Πάντως οι οδηγίες που είχαν δοθεί στα κέντρα είναι να μην κοιτούν τον τρόπο σύνταξης (με ή χωρίς παρένθεση).