Τελευταία μηνύματα

#31
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από tpapo - 12 Ιουν 2025, 09:24:28 ΠΜ
Το ερωτημα ηταν "τροφη για σκεψη" και  οχι πεδιο αντιπαραθεσεων που εγω δε καταλαβαινω ,χαρακτηρισμοι όπως ασχετοι ,παραπληροφορηση ,επηρεασμος βαθμολογητων κτλ εγω δε τους δεχομαι απο τη στιγμη που αναφερω ότι προκάλεσε εκπληξη και σε μενα η συγκεκριμενη λύση ΠΟΥ ΟΜΩς ΤΡΕΧΕΙ ΑΨΟΓΑ ΣΕ ΟΛΑ ΤΑ ΕΠΙΠΕΔΑ .

ΣΕ ΠΡΟΚΑΛΩ ΝΑ ΤΡΕΞΕΙς ΤΟΝ ΟΛΟΚΛΗΡΩΜΕΝΟ ΚΩΔΙΚΑ ΠΟΥ ΠΑΡΕΘΕΣΑ ΣΤΟ 1ο POST (ΘΕΜΑ Δ) ΚΑΙ ΝΑ ΜΟΥ ΥΠΟΔΕΙΞΕΙΣ ΤΟ ΛΑΘΟΣ ,ΑΝ ΟΧΙ ΝΑ ΓΡΑΨΕΙς ΕΔΩ ΟΤΙ ΝΑΙ ΤΡΕΧΕΙ ΣΩΣΤΑ ΚΑΙ ΑΠΟΤΕΛΕΙ ΜΙΑ ΟΛΟΚΛΗΡΩΜΕΝΗ ΛΥΣΗ ,ΤΕΛΟς -

#32
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από evry - 12 Ιουν 2025, 09:06:28 ΠΜ
Παράθεση από: sgsfak στις 12 Ιουν 2025, 09:01:49 ΠΜΗ for πραγματι στην Python δεν ορίζει νεο scope (εμβέλεια) για τις μεταβλητές, και το official documentation λεει ξέκαθαρα "Names in the target list are not deleted when the loop is finished" (οπου "names in target list" ειναι το i στα παραδειγματα που βαλατε πιο πανω).

Με δεδομένο όμως οτι στο συγκεκριμένο θεμα δεν χρησιμοποιείται πουθενα ο "μετρητής" i
δεν βλεπω το λογο που θα έπρεπε να κοπούν μονάδες (αλλα ειμαι άσχετος με το μαθημα, και πώς θα έπρεπε να διορθώνονται τα γραπτα...) Π.χ. θα μπορουσε να χρησιμοποιήσει το underscore για δηλώσει οτι δεν μας ενδιαφέρει η τιμή του μετρητη:
for _ in range(300):
    c = input("Κώδικος:")
    # ...

Αν δεν μας ενδιαφέρουν οι τιμές του i αλλά μόνο το πλήθος των επαναλήψεων τότε δεν έχει διαφορά με το αντίστοιχο με i, j.
Το αν κάποιος βαθμολογητής θα κόψει ή όχι , είναι στην κρίση του, γιατί είναι φανερό ότι έγινε κατά λάθος και δεν δείχνει κατανόηση από την πλευρά του μαθητή. Έχει να κάνει και με την συνολική εικόνα του γραπτού.
Είναι ξεκάθαρα στην κρίση του/της βαθμολογητή/-τριας.
#33
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από sgsfak - 12 Ιουν 2025, 09:01:49 ΠΜ
Η for πραγματι στην Python δεν ορίζει νεο scope (εμβέλεια) για τις μεταβλητές, και το official documentation λεει ξέκαθαρα "Names in the target list are not deleted when the loop is finished" (οπου "names in target list" ειναι το i στα παραδειγματα που βαλατε πιο πανω).

Με δεδομένο όμως οτι στο συγκεκριμένο θεμα δεν χρησιμοποιείται πουθενα ο "μετρητής" i
δεν βλεπω το λογο που θα έπρεπε να κοπούν μονάδες (αλλα ειμαι άσχετος με το μαθημα, και πώς θα έπρεπε να διορθώνονται τα γραπτα...) Π.χ. θα μπορουσε να χρησιμοποιήσει το underscore για δηλώσει οτι δεν μας ενδιαφέρει η τιμή του μετρητη:
for _ in range(300):
    c = input("Κώδικος:")
    # ...
#34
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από evry - 12 Ιουν 2025, 08:42:53 ΠΜ
Παράθεση από: tpapo στις 12 Ιουν 2025, 08:19:30 ΠΜΚαταρχας θα παρακαλουσα να μιλας ποιο ευγενικα γιατι με προσβάλεις ,τους χαρακτηρισμους σου στους επιστρεφω ,το τμήμα κώδικα που παρεθεσα με εμφωλευμενες for κανει αυτο ακριβως που ανεφερα  ,παρεθεσα και παραδειγμα που το αγνοεις και λες τα δικα σου ,αλλά και την ολοκληρωμενη λύση του θεματος Δ η οποια τρεχει τοσο σε Python 2.7.x όσο και σε Python 3.11.x .αναφερομαι σε αυτο ακριβως στις εμφωλευμενες for και πως αντιμετωπίζονται απο τη Python γεγονός που μου προκάλεσε και μενα εκπληξη αλλά συμβαινει και οχι σε αυτα που παραθετεις εσυ με εντελως ασχετα παραδειγματα,αν έχεις να προσθεσεις κατι σε αυτα που παρεθεσα καλως  :)
Αυτά που έχεις γράψει με bold στο αρχικό σου μήνυμα, δεν ισχύουν, είναι λανθασμένα. Έγραψες

ΠαράθεσηΣτην Python, αν χρησιμοποιείς τον ίδιο δείκτη i σε δύο εμφωλευμένους βρόχους for, δεν θα υπάρξει πρόβλημα, επειδή κάθε βρόχος δημιουργεί το δικό του πεδίο (scope) για τη μεταβλητή i. Η τιμή του i στον εσωτερικό βρόχο δεν επηρεάζει την τιμή του i στον εξωτερικό βρόχο, καθώς η Python χειρίζεται σωστά την εναλλαγή των τιμών κατά την εκτέλεση.


Ούτε scope δημιουργείται, ούτε τίποτα και η τιμή της εσωτερικής επηρεάζει την εξωτερική, όπως φαίνεται από τα παραπάνω παραδείγματα.
#35
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από tpapo - 12 Ιουν 2025, 08:19:30 ΠΜ
Παράθεση από: evry στις 11 Ιουν 2025, 10:32:59 ΜΜΑς τα πάρουμε ένα ένα.
Καταρχάς ελπίζω να παραπληροφορείς από άγνοια και όχι σκόπιμα. Όλα αυτά που λες δεν ισχύουν!
Ο μαθητής σου λόγω άγχους έκανε ένα λάθος. Πολλοί μαθητές λόγω άγχους κάνουν λάθος και χάνουν μονάδες.
Ο κώδικας που δίνεις, πέρα από το γεγονός ότι είναι σε Python 3, δεν ξέρω γιατί αφού κάνουμε Python 2, δεν έχει τη λειτουργία που εσύ λες ότι έχει.
Ο εσωτερικός βρόχος μια χαρά επηρεάζει το i του εξωτερικού, Για παράδειγμα το παρακάτω τμήμα κώδικα:

Κώδικας: python
j = 2025
k = 0
for j in range(10):
    k = k + j
print("j = ", j)

θα εκτυπώσει 9 και όχι 2025 και στην Python 2 και στην Python 3 άρα ο μαθητής σου θα χάσει τις μονάδες που πρέπει να χάσει, γιατί έκανε λάθος.

Ωστόσο ακόμα  και αν είχες δίκιο πάλι θα έπρεπε να κόψουν γιατί ο μαθητής δεν το έκανε συνειδητά. Άρα το να πάρει κάποιος μονάδες κατά τύχη είναι ένα θέμα. (Αφήνω στην άκρη το γεγονός ότι μπήκες εδώ για να επηρεάσεις τους βαθμολογητές και επίσης  αναρωτήθηκες αν "ξέρουν" Python).

ΥΓ. Οι επαναλήψεις γίνονται κανονικά, και αυτό αξίζει να το διερευνήσει κάποιος γιατί συμβαίνει.
Καταρχας θα παρακαλουσα να μιλας ποιο ευγενικα γιατι με προσβάλεις ,τους χαρακτηρισμους σου στους επιστρεφω ,το τμήμα κώδικα που παρεθεσα με εμφωλευμενες for κανει αυτο ακριβως που ανεφερα  ,παρεθεσα και παραδειγμα που το αγνοεις και λες τα δικα σου ,αλλά και την ολοκληρωμενη λύση του θεματος Δ η οποια τρεχει τοσο σε Python 2.7.x όσο και σε Python 3.11.x .αναφερομαι σε αυτο ακριβως στις εμφωλευμενες for και πως αντιμετωπίζονται απο τη Python γεγονός που μου προκάλεσε και μενα εκπληξη αλλά συμβαινει και οχι σε αυτα που παραθετεις εσυ με εντελως ασχετα παραδειγματα,αν έχεις να προσθεσεις κατι σε αυτα που παρεθεσα καλως  :)
#36
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από evry - 12 Ιουν 2025, 07:29:19 ΠΜ
Είπα να μην μιλήσω για iterators, γιατί με κάτι τέτοια τρομάζει ο κόσμος και λέει τι καλά που είμασταν στην ΓΛΩΣΣΑ >:D
Λοιπόν τη συγκεκριμένη λειτουργία για να την εξηγήσω στους μαθητές έδινα παραδείγματα αντίστοιχα με το παρακάτω:
for i in [6,28,496]:
    print("πριν ", i)
    i = 2025
    print("μετά ", i)
print("τελική ", i)

Δεν μιλούσα καθόλου για iterators (προφανώς :laugh:)
Είναι σημαντικό να καταλάβουν οι μαθητές ότι δεν υφίσταται μεταβολή του i με την έννοια της αύξησης ή μείωσης αλλά ότι κάθε φορά στο i αποδίδεται το επόμενο στοιχείο της λίστας. Για αυτό χρειάζεται μια λίστα με τιμές που δεν ακολουθούν κάποιο μοτίβο.
Στο βιβλίο έχουμε αντίστοιχα παραδείγματα αλλά φοβάμαι ότι οι περισσότεροι καθηγητές ερχόμενοι από την pascal απλά λένε στους μαθητές ότι αν θες να εμφανίσεις από 1 μέχρι 10 γράψε for i in range(10)
δεν εξηγούν το range και το αντιμετωπίζουν όλο αυτό σαν ένα ιδίωμα και από εκεί ξεκινούν όλα τα προβλήματα.
για να μην πω το χειρότερο από όλα ότι κάποιοι κάνουν και μετατροπή for σε while όπως στο ΓΕΛ.
#37
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από alkisg - 12 Ιουν 2025, 05:14:45 ΠΜ
for i in range(5):
  print i
  i=3

Δεν έχει σχέση με την εμβέλεια / scope.
Σε άλλες γλώσσες προγραμματισμού το παραπάνω θα ήταν άπειρο loop αφού θέτουμε τον μετρητή στο 3 εντός του loop.
Στην python δουλεύει κανονικά επειδή η υλοποίηση της "for ... in" δεν χρησιμοποιεί καθόλου το "i".
Απλά καλεί την "next()" function του iterator.
Το i δεν είναι "μετρητής του loop", αλλά στην αρχή κάθε επανάληψης παίρνει την τρέχουσα τιμή του iterator, ο οποίος είναι "ο κρυφός μετρητής του loop".
Το ίδιο παράδειγμα χωρίς καθόλου i:

t=iter(range(5))
print next(t)
print next(t)
print next(t)
print next(t)
print next(t)
#38
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από evry - 11 Ιουν 2025, 10:50:14 ΜΜ
Η παραπάνω άσκηση θα ήταν πολύ καλή να την έδινε κάποιος σε έναν μαθητή και να του έλεγε να την εκτελέσει και να εξηγήσει τι εμφανίζει και γιατί και μετά να εξηγήσει για ποιο λόγο η εξωτερική επανάληψη δεν γίνεται ατέρμων βρόχος αφού η εσωτερική δίνει πάντα στο i την τιμή 2.
#39
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από evry - 11 Ιουν 2025, 10:32:59 ΜΜ
Ας τα πάρουμε ένα ένα.
Καταρχάς ελπίζω να παραπληροφορείς από άγνοια και όχι σκόπιμα. Όλα αυτά που λες δεν ισχύουν!
Ο μαθητής σου λόγω άγχους έκανε ένα λάθος. Πολλοί μαθητές λόγω άγχους κάνουν λάθος και χάνουν μονάδες.
Ο κώδικας που δίνεις, πέρα από το γεγονός ότι είναι σε Python 3, δεν ξέρω γιατί αφού κάνουμε Python 2, δεν έχει τη λειτουργία που εσύ λες ότι έχει.
Ο εσωτερικός βρόχος μια χαρά επηρεάζει το i του εξωτερικού, Για παράδειγμα το παρακάτω τμήμα κώδικα:

Κώδικας: python
j = 2025
k = 0
for j in range(10):
    k = k + j
print("j = ", j)

θα εκτυπώσει 9 και όχι 2025 και στην Python 2 και στην Python 3 άρα ο μαθητής σου θα χάσει τις μονάδες που πρέπει να χάσει, γιατί έκανε λάθος.

Ωστόσο ακόμα  και αν είχες δίκιο πάλι θα έπρεπε να κόψουν γιατί ο μαθητής δεν το έκανε συνειδητά. Άρα το να πάρει κάποιος μονάδες κατά τύχη είναι ένα θέμα. (Αφήνω στην άκρη το γεγονός ότι μπήκες εδώ για να επηρεάσεις τους βαθμολογητές και επίσης  αναρωτήθηκες αν "ξέρουν" Python).

ΥΓ. Οι επαναλήψεις γίνονται κανονικά, και αυτό αξίζει να το διερευνήσει κάποιος γιατί συμβαίνει.
#40
Προγραμματισμός Υπολογιστών / Απ: ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON
Τελευταίο μήνυμα από tpapo - 11 Ιουν 2025, 07:08:44 ΜΜ
Παράθεση από: tpapo στις 11 Ιουν 2025, 07:06:33 ΜΜΝα σχολιάσω κι εγω με τη σειρά μου στο ΘΕΜΑ Δ με αφορμή μαθητή μου  .Μαθητής άριστος  λοιπον 'έπεσε' να πεθανει γιατί λογω αγχους χρησιμοποιησε τον ιδιο δεικτη - i τόσο στον εξωτερικό όσο και στον εσωτερικό βροχο.Πρέπει να γνωρίζουμε ιδιως όσοι διδασκουν ή βαθμολογουν ότι :
Στην Python, αν χρησιμοποιείς τον ίδιο δείκτη i σε δύο εμφωλευμένους βρόχους for, δεν θα υπάρξει πρόβλημα, επειδή κάθε βρόχος δημιουργεί το δικό του πεδίο (scope) για τη μεταβλητή i. Η τιμή του i στον εσωτερικό βρόχο δεν επηρεάζει την τιμή του i στον εξωτερικό βρόχο, καθώς η Python χειρίζεται σωστά την εναλλαγή των τιμών κατά την εκτέλεση.
for i in range(5):
    for i in range(3):  # Χρησιμοποιεί το ίδιο όνομα μεταβλητής i
        print(f"Εσωτερικός βρόχος: i={i}")
    print(f"Εξωτερικός βρόχος: i={i}")