ΤΕΣΤ (ΑΣΚΗΣΕΙΣ) ONLINE
31 Tests / Διαγωνίσματα

Ενότητα 2 – Δραστηριότητες – Σελίδα 17-20 – ΠΛΗΡΟΦΟΡΙΚΗ Γ΄ ΓΥΜΝΑΣΙΟΥ – Απαντήσεις – Λύσεις

(Πηγή: Βιβλίο Μαθητή, Πληροφορική Γ΄ Γυμνασίου, Κεφάλαιο 2 «Προγραμματισμός με τη γλώσσα Python», σελ. 17-20. Το κεφάλαιο (§2.1-2.8) έχει ήδη πλήρη θεωρία+widget+τεστ από τη Φάση 1, χωρίς lyseis (δεν έχει δικό του «Ερωτήσεις» υποκεφάλαιο στο ΠΕΡΙΕΧΟΜΕΝΑ). Οι 5 «Δραστηριότητα» παρακάτω είναι τοπικά αριθμημένα κουτιά ενσωματωμένα μέσα στη θεωρία — 3 στο §2.2.2 (σελ. 17) και 2 στο §2.6 (σελ. 20). Οι εκφωνήσεις είναι αυτούσιες από το σχολικό βιβλίο.)

Δραστηριότητες Κεφαλαίου 2

Δραστηριότητα 1 (σελ. 17, §2.2.2)

Μεταβείτε στο κέλυφος (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.

Πρόσεξε:

  • Στο shell δεν χρειάζεται print() — κάθε αποτιμημένη έκφραση τυπώνεται αυτόματα.
  • Σε C/Java ένας 32-bit ακέραιος θα «ξεχείλιζε» πολύ πριν το 2**100 — η Python όχι.

Δραστηριότητα 2. Το τρίγωνο Sierpinski (σελ. 17, §2.2.2)

Μεταβείτε στο κέλυφος (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 δεν περιλαμβάνεται).
  • Απάντηση ChatGPT/Gemini-τύπου για "python"[2:4]: p=0,y=1,t=2,h=3,o=4,n=5 → αποτέλεσμα 'th'. Γενικά κείμενο[αρχή:τέλος] εξάγει τους χαρακτήρες από τη θέση αρχή έως, αλλά όχι συμπεριλαμβανομένης, της θέσης τέλος.

Πρόσεξε:

  • Η 1η και η 2η έκφραση δεν δίνουν το ίδιο αποτέλεσμα, αν και μοιάζουν οπτικά.
  • Η αρίθμηση θέσεων σε αλφαριθμητικό ξεκινά πάντα από το 0.
  • Στο [αρχή:τέλος] η θέση τέλος δεν συμπεριλαμβάνεται — συχνή παγίδα.

Δραστηριότητα 3 (σελ. 17, §2.2.2)

Μεταβείτε στο κέλυφος (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).

Δραστηριότητα 1 (σελ. 20, §2.6)

Να γράψετε ένα πρόγραμμα σε 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).

Δραστηριότητα 2 (σελ. 20, §2.6)

Να γράψετε ένα πρόγραμμα σε 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 σταθερό). Επαληθεύτηκε (ίδια προσομοίωση) ότι όλα τα τετράγωνα μοιράζονται κοινή αρχική γωνία/κατεύθυνση, άρα είναι πραγματικά «το ένα μέσα στο άλλο».

Πρόσεξε:

  • Το Ν=4 μένει σταθερό σε κάθε κλήση — μόνο το length αλλάζει.
  • Η αρχική πλευρά (εδώ 10) είναι αυθαίρετη επιλογή — η εκφώνηση ζητά μόνο τη σχετική αύξηση +10.
  • Υπάρχουν πολλές ισοδύναμες σωστές υλοποιήσεις.
 ΣΧΟΛΙΚΟ ΒΙΒΛΙΟ