ΠΑΝΕΛΛΑΔΙΚΕΣ 2025-PYTHON

Ξεκίνησε από tpapo, 11 Ιουν 2025, 07:06:33 ΜΜ

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

tpapo

Να σχολιάσω κι εγω με τη σειρά μου στο ΘΕΜΑ Δ με αφορμή μαθητή μου  .Μαθητής άριστος  λοιπον 'έπεσε' να πεθανει γιατί λογω αγχους χρησιμοποιησε τον ιδιο δεικτη - 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}")

Υ.Γ Ελπίζω να το γνωρίζουν οι βαθμολογητές και να πράξουν σωστα !

Παρατίθεται και λυμένο το ΘΕΜΑ Δ και χρήση ίδιου δείκτη με 'breakpoints" για τις τιμές του i ( ειναι σε Python 3.11)
ΘΕΜΑ_Δ_2025.py

tpapo

Παράθεση από: 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}")

evry

#2
Ας τα πάρουμε ένα ένα.
Καταρχάς ελπίζω να παραπληροφορείς από άγνοια και όχι σκόπιμα. Όλα αυτά που λες δεν ισχύουν!
Ο μαθητής σου λόγω άγχους έκανε ένα λάθος. Πολλοί μαθητές λόγω άγχους κάνουν λάθος και χάνουν μονάδες.
Ο κώδικας που δίνεις, πέρα από το γεγονός ότι είναι σε 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).

ΥΓ. Οι επαναλήψεις γίνονται κανονικά, και αυτό αξίζει να το διερευνήσει κάποιος γιατί συμβαίνει.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

evry

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

alkisg

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)

evry

#5
Είπα να μην μιλήσω για 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 όπως στο ΓΕΛ.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

tpapo

#6
Παράθεση από: 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 γεγονός που μου προκάλεσε και μενα εκπληξη αλλά συμβαινει και οχι σε αυτα που παραθετεις εσυ με εντελως ασχετα παραδειγματα,αν έχεις να προσθεσεις κατι σε αυτα που παρεθεσα καλως  :)

evry

#7
Παράθεση από: tpapo στις Χθες στις 08:19:30 ΠΜΚαταρχας θα παρακαλουσα να μιλας ποιο ευγενικα γιατι με προσβάλεις ,τους χαρακτηρισμους σου στους επιστρεφω ,το τμήμα κώδικα που παρεθεσα με εμφωλευμενες for κανει αυτο ακριβως που ανεφερα  ,παρεθεσα και παραδειγμα που το αγνοεις και λες τα δικα σου ,αλλά και την ολοκληρωμενη λύση του θεματος Δ η οποια τρεχει τοσο σε Python 2.7.x όσο και σε Python 3.11.x .αναφερομαι σε αυτο ακριβως στις εμφωλευμενες for και πως αντιμετωπίζονται απο τη Python γεγονός που μου προκάλεσε και μενα εκπληξη αλλά συμβαινει και οχι σε αυτα που παραθετεις εσυ με εντελως ασχετα παραδειγματα,αν έχεις να προσθεσεις κατι σε αυτα που παρεθεσα καλως  :)
Αυτά που έχεις γράψει με bold στο αρχικό σου μήνυμα, δεν ισχύουν, είναι λανθασμένα. Έγραψες

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


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

sgsfak

Η 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("Κώδικος:")
    # ...
--
Stelios

evry

Παράθεση από: sgsfak στις Χθες στις 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.
Το αν κάποιος βαθμολογητής θα κόψει ή όχι , είναι στην κρίση του, γιατί είναι φανερό ότι έγινε κατά λάθος και δεν δείχνει κατανόηση από την πλευρά του μαθητή. Έχει να κάνει και με την συνολική εικόνα του γραπτού.
Είναι ξεκάθαρα στην κρίση του/της βαθμολογητή/-τριας.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr

tpapo

Το ερωτημα ηταν "τροφη για σκεψη" και  οχι πεδιο αντιπαραθεσεων που εγω δε καταλαβαινω ,χαρακτηρισμοι όπως ασχετοι ,παραπληροφορηση ,επηρεασμος βαθμολογητων κτλ εγω δε τους δεχομαι απο τη στιγμη που αναφερω ότι προκάλεσε εκπληξη και σε μενα η συγκεκριμενη λύση ΠΟΥ ΟΜΩς ΤΡΕΧΕΙ ΑΨΟΓΑ ΣΕ ΟΛΑ ΤΑ ΕΠΙΠΕΔΑ .

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


evry

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

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

Προκαλείς κιόλας και θέλεις και να γράψω εδώ ότι ο κώδικάς σου τρέχει σωστά και αποτελεί ολοκληρωμένη λύση? Για ποιον λόγο άραγε;

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

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

tpapo

#12
Παράθεση από: evry στις Χθες στις 10:14:50 ΠΜΠροκαλείς κιόλας και θέλεις και να γράψω εδώ ότι ο κώδικάς σου τρέχει σωστά και αποτελεί ολοκληρωμένη λύση? Για ποιον λόγο άραγε;

Μπήκες εδώ και είπες τα εξής:
τα οποία δεν ισχύουν! Και αυτό ακριβώς σου είπα. ότι παραπληροφορείς.
Μην τα ξαναλέμε, δεν υπάρχει scope και η τιμή του i επηρεάζεται.
Είπες πράγματα που δεν ισχύουν και ο κώδικας που παρέθεσες με τα print το αποδεικνύει.
Επίσης εσύ έκανες σχόλια για τους βαθμολογητές και καλά μήπως δεν τα ξέρουν κλπ.
Εγώ δεν χρησιμοποίησα χαρακτηρισμούς και ήμουν πολύ προσεκτικός σε αυτά που έγραψα.

NA ΑΠΑΝΤΗΣΕΙΣ ( σε προκαλώ ναι ) ΑΝ Ο ΚΩΔΙΚΑΣ ΠΟΥ ΠΑΡΕΘΕΣΑ ΕΧΕΙ ΛΑΘΟΣ ΚΑΙ ΠΟΥ ,ΕΔΩ ΤΩΡΑ ,ΑΣΕ ΤΑ ΥΠΟΛΟΙΠΑ ΚΑΙ ΑΝ ΑΠΟΤΕΛΕΙ ΛΥΣΗ ΤΟΥ ΘΕΜΑΤΟΣ Δ.οτι ακριβως εχω γραψει τιποτε αλλο

evry

Παράθεση από: tpapo στις Χθες στις 10:22:05 ΠΜNA ΑΠΑΝΤΗΣΕΙΣ ΑΝ Ο ΚΩΔΙΚΑΣ ΠΟΥ ΠΑΡΕΘΕΣΑ ΕΧΕΙ ΛΑΘΟΣ ΚΑΙ ΠΟΥ ,ΕΔΩ ΤΩΡΑ ,ΑΣΕ ΤΑ ΥΠΟΛΟΙΠΑ ΚΑΙ ΑΝ ΑΠΟΤΕΛΕΙ ΛΥΣΗ ΤΟΥ ΘΕΜΑΤΟΣ Δ.οτι ακριβως εχω γραψει τιποτε αλλο
Για ποιο λόγο; Δεν μπορείς να χρησιμοποιήσεις ένα περιβάλλον για να δεις αν είναι σωστό;
Γιατί θέλεις την επικύρωση άλλων?
Επίσης λίγο προσοχή στο υφάκι σου., τις διαταγές αλλού και μάθε να γράφεις με μικρά.

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

tpapo

Παράθεση από: evry στις Χθες στις 10:24:49 ΠΜΓια ποιο λόγο; Δεν μπορείς να χρησιμοποιήσεις ένα περιβάλλον για να δεις αν είναι σωστό;
Γιατί θέλεις την επικύρωση άλλων?
Επίσης λίγο προσοχή στο υφάκι σου., τις διαταγές αλλού και μάθε να γράφεις με μικρά.

ΣΕ ΠΡΟΚΑΛΩ ΝΑ ΜΟΥ ΑΠΟΔΕΙΞΕΙΣ ΜΙΑ ΚΑΙ ΕΙΣΑΙ ΓΝΩΣΤΗΣ ΤΗς PYTHON που υπάρχει λαθος στον κωδικα που παρεθεσα ! Τους προσβλητικους χαρακτηρισμους περι ασχετοσυνης ,αγνοιας κτλ που ΠΡΩΤΟΣ ΕΓΡΑΨΕΣ στους επιστρεφω