(Πηγή: Βιβλίο Μαθητή, Πληροφορική Γ΄ Γυμνασίου, Κεφάλαιο 2 «Προγραμματισμός με τη γλώσσα Python», σελ. 17-20. Το κεφάλαιο (§2.1-2.8) έχει ήδη πλήρη θεωρία+widget+τεστ από τη Φάση 1, χωρίς lyseis (δεν έχει δικό του «Ερωτήσεις» υποκεφάλαιο στο ΠΕΡΙΕΧΟΜΕΝΑ). Οι 5 «Δραστηριότητα» παρακάτω είναι τοπικά αριθμημένα κουτιά ενσωματωμένα μέσα στη θεωρία — 3 στο §2.2.2 (σελ. 17) και 2 στο §2.6 (σελ. 20). Οι εκφωνήσεις είναι αυτούσιες από το σχολικό βιβλίο.)
Μεταβείτε στο κέλυφος (shell) του Thonny και δώστε τις παρακάτω εκφράσεις:
>>> 2**10>>> 2**100>>> 2**1000>>> 2**10000
Σκέψη / Μεθοδολογία: Στο shell κάθε έκφραση αποτιμάται αμέσως και εμφανίζεται το αποτέλεσμα, χωρίς print(). Σε αντίθεση με γλώσσες όπου ο ακέραιος έχει σταθερό πλήθος bytes και «ξεχειλίζει», η Python χρησιμοποιεί ακέραιους αυθαίρετης ακρίβειας — το πλήθος ψηφίων μεγαλώνει απεριόριστα, χωρίς σφάλμα.
Λύση:
| Έκφραση | Αποτέλεσμα | Πλήθος ψηφίων |
|---|---|---|
2**10 |
1024 | 4 |
2**100 |
1267650600228229401496703205376 | 31 |
2**1000 |
(302ψήφιος αριθμός, ξεκινά 1071508607186267320948...) |
302 |
2**10000 |
(3011ψήφιος αριθμός, ξεκινά 1995063116880758384883742162683585..., τελειώνει ...131606321068639151168177430479 2596709376) |
3011 |
Το πλήθος ψηφίων αυξάνεται περίπου γραμμικά με τον εκθέτη (4 → 31 → 302 → 3011), σύμφωνα με τον τύπο πλήθος_ψηφίων ≈ εκθέτης × log₁₀(2) ≈ εκθέτης × 0,301.
Πρόσεξε:
print() — κάθε αποτιμημένη έκφραση τυπώνεται αυτόματα.2**100 — η Python όχι.Μεταβείτε στο κέλυφος (shell) του Thonny και δώστε τις παρακάτω εκφράσεις:
>>> 5*("Grace"+"Hopper"+", ")>>> 5*"Grace"+5*"Hopper"+5*", ">>> "Alan Turing"[5:10]Στη συνέχεια μεταβείτε στο ChatGPT ή στο Gemini και δώστε την προτροπή: Μπορείς να μου εξηγήσεις τη λειτουργία που επιτελεί η έκφραση "python"[2:4];
(Σημείωση: ο υπότιτλος «Το τρίγωνο Sierpinski» είναι έτσι ακριβώς τυπωμένος στο βιβλίο σε αυτή τη Δραστηριότητα, παρότι το περιεχόμενό της αφορά αλφαριθμητικά — προφανές εκδοτικό ολίσθημα (reuse του τίτλου της ομώνυμης Δραστηριότητας 2 του Κεφαλαίου 1) — μεταγράφεται αυτούσιο χωρίς διόρθωση.)
Σκέψη / Μεθοδολογία: Στην πρώτη έκφραση υπολογίζεται πρώτα η παρένθεση και μετά ο πολλαπλασιασμός (επανάληψη ολόκληρου του αποτελέσματος)· στη δεύτερη υπολογίζονται 3 ξεχωριστοί πολλαπλασιασμοί και μετά η συνένωση — διαφορετικό αποτέλεσμα, παρότι μοιάζουν οπτικά. Το [αρχή:τέλος] παίρνει χαρακτήρες από τη θέση αρχή (συμπεριλαμβανομένη) έως τη θέση τέλος (αποκλειστική), μετρώντας από το 0.
Λύση:
5*("Grace"+"Hopper"+", ") = 'GraceHopper, GraceHopper, GraceHopper, GraceHopper, GraceHopper, ' (η λέξη «GraceHopper, » επαναλαμβάνεται αυτούσια 5 φορές).5*"Grace"+5*"Hopper"+5*", " = 'GraceGraceGraceGraceGraceHopperHopperHopperHopperHopperHopper, , , , , ' — διαφορετικό από το προηγούμενο, λόγω σειράς πράξεων (πρώτα *, μετά +)."Alan Turing"[5:10] → θέσεις A=0,l=1,a=2,n=3,(κενό)=4,T=5,u=6,r=7,i=8,n=9,g=10 → 'Turin' (το g στη θέση 10 δεν περιλαμβάνεται)."python"[2:4]: p=0,y=1,t=2,h=3,o=4,n=5 → αποτέλεσμα 'th'. Γενικά κείμενο[αρχή:τέλος] εξάγει τους χαρακτήρες από τη θέση αρχή έως, αλλά όχι συμπεριλαμβανομένης, της θέσης τέλος.Πρόσεξε:
[αρχή:τέλος] η θέση τέλος δεν συμπεριλαμβάνεται — συχνή παγίδα.Μεταβείτε στο κέλυφος (shell) του Thonny και δώστε τις παρακάτω εκφράσεις:
>>> len(str(8128))>>> len(str(496))>>> len(str(10**20))>>> len(str(2**100))>>> str(len(5))Τι κάνει η συνάρτηση len και τι η str; Τι πετυχαίνουμε με τη συνδυασμένη χρήση τους;
Στη συνέχεια μεταβείτε στο ChatGPT ή στο Gemini και δώστε την προτροπή: Ποια λειτουργία επιτελεί η len(str(number));
Σκέψη / Μεθοδολογία: Η str(Χ) μετατρέπει έναν αριθμό σε αλφαριθμητικό· η len(Υ) μετράει το πλήθος χαρακτήρων ενός αλφαριθμητικού — αλλά απαιτεί το όρισμά της να είναι ακολουθία (string/list...), όχι απλός αριθμός. Ο συνδυασμός len(str(Χ)) δίνει το πλήθος ψηφίων του Χ. Η τελευταία έκφραση str(len(5)) είναι σκόπιμα «ανάποδη»: καλεί len() απευθείας πάνω σε ακέραιο, κάτι που δεν επιτρέπεται.
Λύση:
| Έκφραση | Αποτέλεσμα |
|---|---|
len(str(8128)) |
4 (ο 8128 έχει 4 ψηφία) |
len(str(496)) |
3 (ο 496 έχει 3 ψηφία) |
len(str(10**20)) |
21 (1 ακολουθούμενο από 20 μηδενικά = 21 ψηφία) |
len(str(2**100)) |
31 (ίδιος αριθμός με τη Δραστηριότητα 1) |
str(len(5)) |
ΣΦΑΛΜΑ: TypeError: object of type 'int' has no len() (επαληθεύτηκε με εκτέλεση) |
Η str() μετατρέπει αριθμό σε αλφαριθμητικό· η len() μετράει μήκος ακολουθίας. Ο συνδυασμός len(str(number)) υπολογίζει το πλήθος ψηφίων ενός αριθμού χωρίς μαθηματικό τύπο (λογάριθμο).
Απάντηση ChatGPT/Gemini-τύπου για «Ποια λειτουργία επιτελεί η len(str(number))»: Υπολογίζει το πλήθος ψηφίων του number. Πρώτα η str(number) το μετατρέπει σε αλφαριθμητικό, και μετά η len() μετράει τους χαρακτήρες — που ισούται με το πλήθος ψηφίων (αν ο αριθμός είναι αρνητικός, μετριέται επιπλέον και το πρόσημο «-»).
Πρόσεξε:
len() δουλεύει μόνο πάνω σε ακολουθίες — ποτέ απευθείας πάνω σε αριθμό.len(str(number)) μετρά και το «-» ως χαρακτήρα (π.χ. len(str(-25)) = 3, όχι 2).Να γράψετε ένα πρόγραμμα σε Python το οποίο θα σχεδιάζει 12 πολύγωνα, ξεκινώντας από ένα τετράγωνο και καταλήγοντας σε ένα δεκαπεντάγωνο, αυξάνοντας το πλήθος των πλευρών κατά 1 κάθε φορά, γράφοντας την εντολή Polygon μόνο μια φορά.
Σκέψη / Μεθοδολογία: Από 4 έως 15 πλευρές υπάρχουν ακριβώς 15−4+1 = 12 διαφορετικά πολύγωνα. «Η εντολή Polygon μόνο μια φορά» σημαίνει: μία κλήση Polygon(length, N) μέσα σε βρόχο for N in range(4, 16) (το άνω όριο του range είναι αποκλειστικό, γι' αυτό 16 και όχι 15).
Λύση:
import turtle
def Polygon(length, N):
for i in range(N):
turtle.forward(length)
turtle.left(360 / N)
for N in range(4, 16):
Polygon(100, N)
turtle.done()
Το range(4, 16) δίνει τις τιμές 4,5,...,15 (12 τιμές) — για κάθε Ν καλείται η Polygon(100, N), σχεδιάζοντας κανονικό πολύγωνο Ν πλευρών μήκους 100. Επαληθεύτηκε (προσομοίωση κίνησης turtle σε καθαρή Python, χωρίς γραφικό περιβάλλον) ότι για κάθε Ν από 4 έως 15 η «χελώνα» επιστρέφει ακριβώς στο σημείο εκκίνησης με την αρχική κατεύθυνση — δηλαδή κάθε σχήμα κλείνει σωστά.
Πρόσεξε:
range(4, 16) δεν περιλαμβάνει το 16 — γι' αυτό γράφουμε 16 για να φτάσουμε μέχρι το 15.while αντί for).Να γράψετε ένα πρόγραμμα σε Python το οποίο θα σχεδιάζει 20 τετράγωνα το ένα μέσα στο άλλο. Κάθε τετράγωνο θα έχει πλευρά μεγαλύτερη κατά 10 από το προηγούμενο.
Σκέψη / Μεθοδολογία: Χρησιμοποιούμε ξανά την Polygon(length, N) με σταθερό Ν=4 (τετράγωνο) και length που μεγαλώνει κατά 10 κάθε φορά (π.χ. 10, 20, ..., 200). Αφού μια κλειστή Polygon επαναφέρει τη χελώνα στο ίδιο σημείο/κατεύθυνση εκκίνησης (επαληθεύτηκε στη Δραστηριότητα 1), διαδοχικές κλήσεις από το ίδιο σημείο με αυξανόμενο μήκος παράγουν φυσικά εμφωλευμένα τετράγωνα (κοινή γωνία, το καθένα περιέχει το προηγούμενο).
Λύση:
import turtle
def Polygon(length, N):
for i in range(N):
turtle.forward(length)
turtle.left(360 / N)
for i in range(20):
Polygon(10 + i * 10, 4)
turtle.done()
Το for i in range(20) δίνει i=0,...,19 → πλευρά 10+i*10 = 10, 20, 30, ..., 200 (20 τετράγωνα, κάθε επόμενο +10 από το προηγούμενο, Ν=4 σταθερό). Επαληθεύτηκε (ίδια προσομοίωση) ότι όλα τα τετράγωνα μοιράζονται κοινή αρχική γωνία/κατεύθυνση, άρα είναι πραγματικά «το ένα μέσα στο άλλο».
Πρόσεξε:
length αλλάζει.