Blog post

Ολοκληρωμένος Οδηγός Python 2.7.x για Γ ΕΠΑΛ - Από το Μηδέν στις Πανελλήνιες

55 min readGR

🎯 Αυτός ο οδηγός είναι σχεδιασμένος για αρχάριους! Ακόμη κι αν δεν έχετε ξαναδεί προγραμματισμό, θα μάθετε όλα όσα χρειάζεστε για τις πανελλήνιες.

Καλύπτει όλη την ύλη της Python 2.7.x για Γ' ΕΠΑΛ με:

  • 📚 Πλήρη θεωρία και ορισμούς
  • 🔍 Λεπτομερείς εξηγήσεις για κάθε έννοια
  • 💡 Παραδείγματα βήμα προς βήμα
  • 🏆 Ασκήσεις πανελληνίων με λύσεις
  • Tips & tricks για επιτυχία

🚀 Πώς να Ξεκινήσετε (Για Αρχάριους)#

📱 Βήμα 1: Εγκατάσταση Python 2.7.x#

Τι χρειάζεστε:

  • Υπολογιστή (Windows, Mac, Linux)
  • Python 2.7.x (όχι Python 3!)
  • Έναν editor κώδικα (π.χ. IDLE, Notepad++, VS Code)

Πού να γράφετε κώδικα:

  • IDLE: Έρχεται με την Python (καλό για αρχάριους)
  • Online: repl.it, trinket.io (δεν χρειάζεται εγκατάσταση)
  • VS Code: Προχωρημένος editor

📝 Βήμα 2: Πρώτες Δοκιμές#

Ανοίξτε την Python και δοκιμάστε:

print "Γεια σου, κόσμε!"
print 2 + 3
print "Το όνομά μου είναι Γιάννης"

Αν δουλεύει, είστε έτοιμοι! 🎉

📖 Βήμα 3: Πώς να Διαβάσετε Αυτόν τον Οδηγό#

  1. Διαβάστε τη θεωρία κάθε ενότητας
  2. Δοκιμάστε τα παραδείγματα στον υπολογιστή σας
  3. Κάντε τις ασκήσεις μόνοι σας
  4. Επιστρέψτε αν κάτι δεν είναι σαφές

🔍 Συμβουλή: Μη βιαστείτε! Προτιμότερα να καταλάβετε καλά κάθε ενότητα παρά να τα διαβάσετε όλα γρήγορα.

🎯 Βήμα 4: Δομή Μάθησης#

Εβδομάδα 1-2: Βασικές έννοιες, μεταβλητές, τελεστές Εβδομάδα 3-4: Δομές ελέγχου (if, for, while) Εβδομάδα 5-6: Συναρτήσεις Εβδομάδα 7-8: Λίστες, strings, dictionaries Εβδομάδα 9-10: Αρχεία, εξαιρέσεις Εβδομάδα 11-12: Ασκήσεις πανελληνίων

🏁 Τι είναι ο Προγραμματισμός;#

Προγραμματισμός = Η διαδικασία δημιουργίας οδηγιών που δίνουμε στον υπολογιστή για να εκτελέσει συγκεκριμένες εργασίες.

Φανταστείτε ότι δίνετε οδηγίες σε έναν φίλο για να φτιάξει ένα σάντουιτς:

  1. Πάρε 2 φέτες ψωμί
  2. Άλειψε βούτυρο
  3. Βάλε τυρί
  4. Κλείσε το σάντουιτς

Στον προγραμματισμό κάνουμε το ίδιο, αλλά με γλώσσα προγραμματισμού που καταλαβαίνει ο υπολογιστής!

🧠 Βασικές Έννοιες που Πρέπει να Ξέρετε#

🔤 Αλγόριθμος#

Αλγόριθμος = Μια σειρά βημάτων για να λύσουμε ένα πρόβλημα.

Παράδειγμα - Αλγόριθμος για βάψιμο δωματίου:

  1. Αγόρασε μπογιά
  2. Απλώστε νάιλον στο πάτωμα
  3. Βάψε τους τοίχους
  4. Άσε να στεγνώσει
  5. Καθάρισε τα εργαλεία

Στον προγραμματισμό:

# Αλγόριθμος για εύρεση μεγαλύτερου αριθμού
def find_max(a, b):
    if a > b:
        return a
    else:
        return b

💾 Δεδομένα#

Δεδομένα = Οι πληροφορίες που επεξεργάζεται το πρόγραμμά μας.

Παραδείγματα δεδομένων:

  • Αριθμοί: 5, 3.14, -10
  • Κείμενο: "Γεια σας", "Python"
  • Λογικές τιμές: Αληθές, Ψευδές

🎛️ Πρόγραμμα#

Πρόγραμμα = Ένα σύνολο εντολών που εκτελεί ο υπολογιστής.

Δομή προγράμματος:

ΕΙΣΟΔΟΣ  ΕΠΕΞΕΡΓΑΣΙΑ  ΕΞΟΔΟΣ

Παράδειγμα:

# ΕΙΣΟΔΟΣ
name = raw_input("Ποιο είναι το όνομά σας; ")

# ΕΠΕΞΕΡΓΑΣΙΑ  
greeting = "Γεια σου, " + name + "!"

# ΕΞΟΔΟΣ
print greeting

🐛 Σφάλματα (Bugs)#

Σφάλμα = Λάθος στον κώδικα που εμποδίζει το πρόγραμμα να δουλέψει σωστά.

Τύποι σφαλμάτων:

  • Syntax Errors: Λάθος γραμματική Python
  • Runtime Errors: Το πρόγραμμα "κρασάρει" κατά την εκτέλεση
  • Logic Errors: Το πρόγραμμα δουλεύει αλλά δίνει λάθος αποτέλεσμα

🔧 Debugging#

Debugging = Η διαδικασία εύρεσης και διόρθωσης σφαλμάτων.

Τεχνικές debugging:

  • Χρήση print για να δούμε τιμές μεταβλητών
  • Ανάγνωση μηνυμάτων σφαλμάτων
  • Έλεγχος του κώδικα γραμμή προς γραμμή

1. Βασικές Έννοιες - Η Αρχή!#

🤔 Τι είναι η Python;#

Python = Μία γλώσσα προγραμματισμού που έφτιαξε ο Guido van Rossum το 1989.

Χαρακτηριστικά της Python:

  • Υψηλού επιπέδου: Μοιάζει με την ανθρώπινη γλώσσα
  • Ερμηνευόμενη: Δεν χρειάζεται compilation (μετάφραση) πριν τρέξει
  • Γενικής χρήσης: Μπορεί να κάνει πολλά πράγματα (ιστοσελίδες, παιχνίδια, εφαρμογές)

Γιατί Python 2.7.x; Στα ΕΠΑΛ χρησιμοποιούμε αυτή την έκδοση για τις εξετάσεις.

📝 Πρώτο Βήμα: Γράφουμε Κώδικα!#

Κώδικας = Οι οδηγίες που γράφουμε για τον υπολογιστή.

# Το κλασικό "Hello World" - το πρώτο πρόγραμμα κάθε προγραμματιστή!
print "Hello, World!"

# Εμφάνιση με μεταβλητή (θα τις μάθουμε παρακάτω)
name = "Μαθητής"
print "Γεια σου,", name

Εξήγηση:

  • print = εντολή για εμφάνιση κειμένου στην οθόνη
  • "Hello, World!" = κείμενο (string) που θέλουμε να εμφανίσουμε
  • # = σχόλιο (το αγνοεί ο υπολογιστής, το διαβάζουν οι άνθρωποι)

🔧 Βασικοί Κανόνες Python#

1. Εσοχές (Indentation)#

Στην Python, τα κενά στην αρχή κάθε γραμμής είναι ΣΗΜΑΝΤΙΚΑ!

# ΣΩΣΤΟ
if True:
    print "Αυτό είναι μέσα στο if"  # 4 κενά στην αρχή

# ΛΑΘΟΣ
if True:
print "Αυτό δεν θα δουλέψει!"  # Δεν έχει εσοχή!

2. Σχόλια#

Χρησιμοποιούμε το # για να γράψουμε σημειώσεις:

# Αυτό είναι σχόλιο - το αγνοεί ο υπολογιστής
print "Hello"  # Μπορούμε να βάλουμε σχόλιο και στο τέλος της γραμμής

🎯 Γιατί Μαθαίνουμε Προγραμματισμό;#

  • Λύνουμε προβλήματα συστηματικά
  • Αυτοματοποιούμε επαναλαμβανόμενες εργασίες
  • Δημιουργούμε εφαρμογές, παιχνίδια, ιστοσελίδες
  • Αναπτύσσουμε λογική σκέψη

2. Μεταβλητές και Τύποι Δεδομένων - Αποθηκεύουμε Πληροφορίες!#

🗂️ Τι είναι Μεταβλητή;#

Μεταβλητή = Ένα "κουτί" στη μνήμη του υπολογιστή όπου αποθηκεύουμε πληροφορίες.

Φανταστείτε μια ετικέτα που κολλάμε σε ένα κουτί:

  • Όνομα κουτιού: age (το όνομα της μεταβλητής)
  • Περιεχόμενο: 18 (η τιμή που αποθηκεύουμε)

📊 Τύποι Δεδομένων#

Ο υπολογιστής χρειάζεται να ξέρει τι είδους πληροφορία αποθηκεύουμε:

1. Ακέραιοι (int) - Ολόκληροι Αριθμοί#

age = 18           # Ηλικία
year = 2025        # Έτος
temperature = -5   # Αρνητικός αριθμός

2. Δεκαδικοί (float) - Αριθμοί με Κόμμα#

price = 19.99      # Τιμή προϊόντος
pi = 3.14159       # Ο αριθμός π
height = 1.75      # Ύψος σε μέτρα

3. Συμβολοσειρές (str) - Κείμενο#

name = "Γιάννης"           # Με διπλά εισαγωγικά
surname = 'Παπαδόπουλος'   # Με μονά εισαγωγικά (και τα δύο είναι ΟΚ)
message = "Καλησπέρα!"     # Οποιοδήποτε κείμενο

4. Λογικοί (bool) - Αληθές ή Ψευδές#

is_student = True      # Αληθές (είναι μαθητής)
has_license = False    # Ψευδές (δεν έχει δίπλωμα)

🔍 Πώς Ελέγχουμε τον Τύπο;#

age = 18
print type(age)        # <type 'int'> - Δείχνει ότι είναι ακέραιος

name = "Γιάννης"
print type(name)       # <type 'str'> - Δείχνει ότι είναι κείμενο

price = 19.99
print type(price)      # <type 'float'> - Δείχνει ότι είναι δεκαδικός

🔄 Μετατροπές Τύπων - Αλλάζουμε Μορφή#

Μερικές φορές θέλουμε να αλλάξουμε τον τύπο μιας μεταβλητής:

# Από κείμενο σε αριθμό
age_str = "18"              # Αυτό είναι κείμενο, όχι αριθμός!
age = int(age_str)          # Τώρα είναι αριθμός
print age + 2               # 20 - Μπορούμε να κάνουμε πράξεις!

# Από κείμενο σε δεκαδικό
price_str = "19.99"
price = float(price_str)    # Μετατροπή σε δεκαδικό

# Από αριθμό σε κείμενο
age = 18
age_str = str(age)          # Τώρα είναι κείμενο "18"

⚠️ Προσοχή: Δεν μπορούμε να μετατρέψουμε κάθε κείμενο σε αριθμό!

# Αυτό θα δώσει λάθος:
# number = int("Γεια σας")  # ΛΑΘΟΣ! Το "Γεια σας" δεν είναι αριθμός

📝 Κανόνες Ονομάτων Μεταβλητών#

Επιτρεπόμενα:

  • Γράμματα: name, onoma
  • Αριθμοί: age2, test1 (αλλά ΌΧΙ στην αρχή!)
  • Underscore: first_name, max_grade

Απαγορευμένα:

  • Κενά: first name
  • Ειδικοί χαρακτήρες: @name, price$
  • Αριθμός στην αρχή: 2name
  • Ελληνικά: όνομα ❌ (καλύτερα να αποφεύγουμε)

🎯 Άσκηση 1 - Στοιχεία Μαθητή#

# Δημιουργήστε μεταβλητές για στοιχεία μαθητή
student_name = "Μαρία"      # Όνομα (string)
student_age = 17            # Ηλικία (int)
math_grade = 18.5           # Βαθμός Μαθηματικών (float)
passed_exam = True          # Πέρασε εξετάσεις (bool)

# Εμφάνιση στοιχείων
print "=== ΣΤΟΙΧΕΙΑ ΜΑΘΗΤΗ ==="
print "Όνομα:", student_name
print "Ηλικία:", student_age
print "Βαθμός Μαθηματικών:", math_grade
print "Πέρασε εξετάσεις:", passed_exam

# Έλεγχος τύπων
print "\n=== ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ==="
print "Τύπος ονόματος:", type(student_name)
print "Τύπος ηλικίας:", type(student_age)
print "Τύπος βαθμού:", type(math_grade)
print "Τύπος επιτυχίας:", type(passed_exam)

💡 Tips για Αρχάριους#

  1. Επιλέγετε περιγραφικά ονόματα: student_age καλύτερα από x
  2. Χρησιμοποιείτε underscore: first_name αντί για firstname
  3. Προσοχή στους τύπους: "5" είναι διαφορετικό από 5
  4. Δοκιμάστε με print: Εμφανίστε τις μεταβλητές για να δείτε τι περιέχουν

🔥 Συχνά Λάθη Αρχαρίων#

Λάθος 1: Σύγχυση Τύπων#

# ΛΑΘΟΣ
age = "18"
if age > 16:  # Συγκρίνουμε string με int!
    print "Ενήλικας"

# ΣΩΣΤΟ  
age = int("18")  # Μετατρέπουμε σε αριθμό
if age > 16:
    print "Ενήλικας"

Λάθος 2: Χρήση = αντί για ==#

# ΛΑΘΟΣ
age = 18
if age = 18:  # Ανάθεση αντί για σύγκριση!
    print "Ενήλικας"

# ΣΩΣΤΟ
age = 18  
if age == 18:  # Σύγκριση με ==
    print "Ενήλικας"

Λάθος 3: Εσοχές#

# ΛΑΘΟΣ
if True:
print "Αυτό δεν θα δουλέψει!"  # Δεν έχει εσοχή

# ΣΩΣΤΟ
if True:
    print "Αυτό θα δουλέψει!"  # Έχει εσοχή 4 κενών

Λάθος 4: Ξεχνάμε Άνω-Κάτω Τελεία#

# ΛΑΘΟΣ
if age >= 18  # Λείπει το :
    print "Ενήλικας"

# ΣΩΣΤΟ
if age >= 18:  # Με άνω-κάτω τελεία
    print "Ενήλικας"

3. Τελεστές - Κάνουμε Πράξεις και Συγκρίσεις!#

🧮 Αριθμητικοί Τελεστές - Μαθηματικές Πράξεις#

Τελεστής = Σύμβολο που λέει στον υπολογιστή τι πράξη να κάνει.

a = 10
b = 3

# Βασικές πράξεις
print a + b   # 13 (πρόσθεση) - προσθέτουμε
print a - b   # 7  (αφαίρεση) - αφαιρούμε  
print a * b   # 30 (πολλαπλασιασμός) - πολλαπλασιάζουμε
print a / b   # 3  (διαίρεση) - διαιρούμε

# Ειδικές πράξεις
print a % b   # 1  (υπόλοιπο διαίρεσης) - τι "περισσεύει"
print a ** b  # 1000 (ύψωση σε δύναμη) - 10³ = 10×10×10

⚠️ ΠΡΟΣΟΧΗ στη Διαίρεση! Στην Python 2.7.x, όταν διαιρούμε ακέραιους, παίρνουμε ακέραιο αποτέλεσμα:

print 10 / 3        # 3 (όχι 3.333...)
print 10.0 / 3      # 3.33333... (τώρα είναι δεκαδικό!)
print float(10) / 3 # 3.33333... (μετατρέπουμε σε δεκαδικό)

⚖️ Τελεστές Σύγκρισης - Συγκρίνουμε Τιμές#

Αυτοί επιστρέφουν True (αληθές) ή False (ψευδές):

x = 5
y = 10

print x == y  # False (ισότητα) - είναι το x ίσο με το y;
print x != y  # True  (ανισότητα) - είναι το x διαφορετικό από το y;
print x < y   # True  (μικρότερο) - είναι το x μικρότερο από το y;
print x > y   # False (μεγαλύτερο) - είναι το x μεγαλύτερο από το y;
print x <= y  # True  (μικρότερο ή ίσο)
print x >= y  # False (μεγαλύτερο ή ίσο)

Πρακτικό Παράδειγμα:

age = 18
print age >= 18  # True - Είναι ενήλικας;

grade = 15
print grade >= 10  # True - Πέρασε το μάθημα;

🧠 Λογικοί Τελεστές - Συνδυάζουμε Συνθήκες#

Χρησιμοποιούμε όταν θέλουμε να συνδυάσουμε περισσότερες από μία συνθήκες:

age = 20
has_license = True

# AND (και) - Πρέπει ΚΑΙ οι δύο να είναι αληθείς
can_drive = age >= 18 and has_license
print can_drive  # True (είναι >18 ΚΑΙ έχει δίπλωμα)

# OR (ή) - Αρκεί Ο ΕΝΑΣ να είναι αληθής  
is_adult_or_student = age >= 18 or age >= 16
print is_adult_or_student  # True

# NOT (όχι) - Αντιστρέφει το αποτέλεσμα
is_minor = not (age >= 18)
print is_minor  # False (ΔΕΝ είναι ανήλικος)

Πίνακας Αλήθειας για AND:

True  and True  = True   
True  and False = False  
False and True  = False  
False and False = False  

Πίνακας Αλήθειας για OR:

True  or True  = True   
True  or False = True   
False or True  = True   
False or False = False  

🎯 Πρακτικό Παράδειγμα - Έλεγχος Βαθμού#

# Έλεγχος αν ο μαθητής πέρασε με άριστα
math_grade = 18.5
physics_grade = 17.0

# Συνθήκες
passed_math = math_grade >= 10      # Πέρασε μαθηματικά;
passed_physics = physics_grade >= 10 # Πέρασε φυσική;
excellent_student = math_grade >= 18 and physics_grade >= 18  # Άριστος;

print "Πέρασε Μαθηματικά:", passed_math      # True
print "Πέρασε Φυσική:", passed_physics       # True  
print "Άριστος μαθητής:", excellent_student  # False (φυσική < 18)

# Γενικός έλεγχος επιτυχίας
overall_success = passed_math and passed_physics
print "Γενική επιτυχία:", overall_success    # True

� Σειρά Προτεραιότητας Τελεστών#

Ο υπολογιστής εκτελεί τις πράξεις με συγκεκριμένη σειρά:

  1. Παρενθέσεις ()
  2. Δυνάμεις **
  3. Πολλαπλασιασμός/Διαίρεση *, /, %
  4. Πρόσθεση/Αφαίρεση +, -
  5. Συγκρίσεις <, >, ==, !=
  6. Λογικοί τελεστές and, or, not
# Παράδειγμα
result = 5 + 3 * 2    # Πρώτα 3*2=6, μετά 5+6=11
print result          # 11

result2 = (5 + 3) * 2 # Πρώτα (5+3)=8, μετά 8*2=16  
print result2         # 16

💡 Tips για Εξετάσεις#

  1. Διαίρεση: Προσοχή! 10/3 = 3 στην Python 2.7.x
  2. Σύγκριση: Χρησιμοποιήστε == για σύγκριση, όχι =
  3. Παρενθέσεις: Όταν αμφιβάλλετε, βάλτε παρενθέσεις!
  4. Λογικοί τελεστές: and χρειάζεται ΚΑΙ τα δύο, or αρκεί το ένα

4. Δομές Ελέγχου - Παίρνουμε Αποφάσεις!#

🤔 Τι είναι οι Δομές Ελέγχου;#

Δομές Ελέγχου = Εντολές που αλλάζουν τη σειρά εκτέλεσης του προγράμματος.

Στην καθημερινή ζωή:

  • ΑΝ βρέχει, ΤΟΤΕ παίρνω ομπρέλα
  • ΑΛΛΙΩΣ δεν παίρνω τίποτα

Στον προγραμματισμό κάνουμε το ίδιο!

🔀 Εντολή if - Παίρνουμε Αποφάσεις#

Συντακτικό:

if συνθήκη:
    # Κώδικας που εκτελείται ΑΝ η συνθήκη είναι αληθής

Απλό Παράδειγμα:

age = 18

if age >= 18:
    print "Είσαι ενήλικας!"

Με else (ΑΛΛΙΩΣ):

age = 16

if age >= 18:
    print "Είσαι ενήλικας!"
else:
    print "Είσαι ανήλικος!"

Με elif (ΑΛΛΙΩΣ ΑΝ) - Πολλές Επιλογές:

age = 15

if age >= 18:
    print "Ενήλικας"
elif age >= 13:      # elif = else + if
    print "Έφηβος"
elif age >= 6:
    print "Παιδί σχολικής ηλικίας"
else:
    print "Νήπιο"

🎯 Πρακτικό Παράδειγμα - Σύστημα Βαθμολόγησης:

grade = 16

if grade >= 18:
    print "Άριστα! 🏆"
elif grade >= 15:
    print "Πολύ καλά! 👍"
elif grade >= 10:
    print "Καλά, πέρασες! ✓"
else:
    print "Δυστυχώς δεν πέρασες... 😞"

🔄 Βρόχος for - Επαναλαμβάνουμε#

Βρόχος (Loop) = Επαναλαμβάνουμε τον ίδιο κώδικα πολλές φορές.

Βρόχος με range()#

range(n) = Δημιουργεί αριθμούς από 0 έως n-1

# Εκτύπωση αριθμών 0, 1, 2, 3, 4
for i in range(5):
    print "Αριθμός:", i

# Αποτέλεσμα:
# Αριθμός: 0
# Αριθμός: 1  
# Αριθμός: 2
# Αριθμός: 3
# Αριθμός: 4

range(start, stop) = Από start έως stop-1

# Αριθμοί από 1 έως 5
for i in range(1, 6):
    print i
# Θα εκτυπώσει: 1, 2, 3, 4, 5

range(start, stop, step) = Με βήμα

# Ζυγοί αριθμοί από 0 έως 10
for i in range(0, 11, 2):
    print i
# Θα εκτυπώσει: 0, 2, 4, 6, 8, 10

Βρόχος σε Λίστα#

fruits = ["μήλο", "μπανάνα", "πορτοκάλι"]

for fruit in fruits:
    print "Μου αρέσει το", fruit

# Αποτέλεσμα:
# Μου αρέσει το μήλο
# Μου αρέσει το μπανάνα  
# Μου αρέσει το πορτοκάλι

♻️ Βρόχος while - Επαναλαμβάνουμε με Συνθήκη#

while = Επαναλαμβάνει ΌΣΟΣ ΚΑΙΡΟΣ μια συνθήκη είναι αληθής

counter = 0

while counter < 5:
    print "Counter:", counter
    counter += 1    # counter = counter + 1

# Αποτέλεσμα:
# Counter: 0
# Counter: 1
# Counter: 2
# Counter: 3
# Counter: 4

⚠️ ΠΡΟΣΟΧΗ: Μη φτιάχνετε άπειρο βρόχο!

# ΛΑΘΟΣ - Άπειρος βρόχος!
counter = 0
while counter < 5:
    print counter
    # Ξεχάσαμε να αυξήσουμε το counter!

Χρήσιμο Pattern - Είσοδος με Έλεγχο#

while True:                    # Άπειρος βρόχος
    user_input = raw_input("Πληκτρολογήστε 'exit' για έξοδο: ")
    
    if user_input == "exit":
        break                  # Βγαίνουμε από τον βρόχο
        
    print "Πληκτρολογήσατε:", user_input

print "Αντίο!"

🛑 Εντολές Ελέγχου Βρόχων#

break - Σταματάμε τον Βρόχο#

for i in range(10):
    if i == 5:
        break           # Σταματάμε όταν i = 5
    print i
# Εκτυπώνει: 0, 1, 2, 3, 4

continue - Πηδάμε στην Επόμενη Επανάληψη#

for i in range(5):
    if i == 2:
        continue        # Παραλείπουμε το 2
    print i
# Εκτυπώνει: 0, 1, 3, 4

🎯 Άσκηση 2 - Υπολογισμός Αθροίσματος#

Πρόβλημα: Υπολογίστε το άθροισμα των αριθμών από 1 έως 100.

Λύση με for:

sum_total = 0

for i in range(1, 101):    # 1 έως 100
    sum_total += i         # sum_total = sum_total + i

print "Το άθροισμα από 1 έως 100 είναι:", sum_total
# Αποτέλεσμα: 5050

Λύση με while:

sum_total = 0
i = 1

while i <= 100:
    sum_total += i
    i += 1

print "Το άθροισμα από 1 έως 100 είναι:", sum_total
# Αποτέλεσμα: 5050

🧮 Μαθηματικός Τύπος: 1+2+...+n = n×(n+1)/2

n = 100
math_result = n * (n + 1) / 2
print "Με μαθηματικό τύπο:", math_result  # 5050

💡 Tips για Αρχάριους#

  1. Εσοχές: Ο κώδικας μέσα σε if/for/while πρέπει να έχει εσοχή!
  2. Δώσεις: Στην Python 2.7.x χρησιμοποιούμε : μετά από if/for/while
  3. range(): Θυμηθείτε ότι σταματάει ΠΡΙΝ τον τελευταίο αριθμό
  4. Άπειροι βρόχοι: Πάντα προσέχετε να αλλάζει η συνθήκη στον while!

5. Συναρτήσεις - Οργανώνουμε τον Κώδικά μας!#

🔧 Τι είναι μια Συνάρτηση;#

Συνάρτηση (Function) = Ένα "κουτί" που περιέχει κώδικα και μπορούμε να τον καλέσουμε όποτε θέλουμε.

Γιατί χρησιμοποιούμε συναρτήσεις;

  • Οργάνωση: Χωρίζουμε το πρόγραμμα σε μικρότερα κομμάτια
  • Επαναχρησιμοποίηση: Γράφουμε κώδικα μία φορά, τον χρησιμοποιούμε πολλές
  • Ευκολία: Πιο εύκολη συντήρηση και εύρεση λαθών

Αναλογία: Η συνάρτηση είναι σαν μια συνταγή μαγειρικής:

  • Όνομα: "Φτιάξε ομελέτα"
  • Υλικά (παράμετροι): Αυγά, αλάτι, λάδι
  • Διαδικασία: Τα βήματα
  • Αποτέλεσμα: Η έτοιμη ομελέτα

📝 Δημιουργία Συνάρτησης#

Βασική Δομή:

def όνομα_συνάρτησης():
    """Περιγραφή τι κάνει η συνάρτηση"""
    # Κώδικας που εκτελείται
    return αποτέλεσμα  # (προαιρετικό)

Απλό Παράδειγμα:

def greet():
    """Συνάρτηση για χαιρετισμό"""
    print "Γεια σου!"

# Κάλεσμα (εκτέλεση) της συνάρτησης
greet()  # Εμφανίζει: Γεια σου!

🎯 Συναρτήσεις με Παραμέτρους#

Παράμετρος = Μεταβλητή που δέχεται η συνάρτηση για να δουλέψει

def greet(name):
    """Συνάρτηση για προσωπικό χαιρετισμό"""
    print "Γεια σου,", name + "!"

# Καλέσματα
greet("Γιάννης")    # Γεια σου, Γιάννης!
greet("Μαρία")      # Γεια σου, Μαρία!

Πολλαπλές Παράμετροι:

def calculate_area(length, width):
    """Υπολογισμός εμβαδού ορθογωνίου"""
    area = length * width
    return area  # Επιστρέφουμε το αποτέλεσμα

# Κάλεσμα
rectangle_area = calculate_area(5, 3)
print "Εμβαδόν:", rectangle_area  # Εμβαδόν: 15

⚠️ Διαφορά: Παράμετρος vs Όρισμα (Argument)

  • Παράμετρος: Το name στον ορισμό της συνάρτησης
  • Όρισμα: Το "Γιάννης" που περνάμε όταν καλούμε τη συνάρτηση

🔄 Return - Επιστροφή Αποτελέσματος#

return = Επιστρέφει μια τιμή από τη συνάρτηση

def add_numbers(a, b):
    """Πρόσθεση δύο αριθμών"""
    result = a + b
    return result

# Χρήση
sum_result = add_numbers(10, 5)
print sum_result  # 15

# Μπορούμε να το χρησιμοποιήσουμε απευθείας
print "Άθροισμα:", add_numbers(7, 3)  # Άθροισμα: 10

Συνάρτηση χωρίς return:

def print_info(name, age):
    """Εμφάνιση στοιχείων"""
    print "Όνομα:", name
    print "Ηλικία:", age
    # Δεν έχει return - επιστρέφει None

result = print_info("Αλέξης", 17)
print result  # None

🎛️ Προεπιλεγμένες Τιμές Παραμέτρων#

Μπορούμε να δώσουμε προεπιλεγμένες τιμές στις παραμέτρους:

def power(base, exponent=2):
    """Ύψωση σε δύναμη με προεπιλεγμένο εκθέτη 2"""
    return base ** exponent

# Καλέσματα
print power(5)     # 25 ( - χρησιμοποιεί το 2)
print power(5, 3)  # 125 ( - χρησιμοποιεί το 3)
print power(2, 4)  # 16 (2⁴)

Περισσότερες Προεπιλεγμένες Τιμές:

def create_user(name, age=18, city="Αθήνα", active=True):
    """Δημιουργία χρήστη"""
    return {
        "name": name,
        "age": age, 
        "city": city,
        "active": active
    }

# Διάφοροι τρόποι κλήσης
user1 = create_user("Γιάννης")  # Χρησιμοποιεί προεπιλεγμένες τιμές
user2 = create_user("Μαρία", 20)  # Αλλάζει μόνο την ηλικία
user3 = create_user("Πέτρος", 25, "Θεσσαλονίκη")  # Αλλάζει ηλικία και πόλη

🌐 Εμβέλεια Μεταβλητών (Scope)#

Εμβέλεια = Πού "ζει" μια μεταβλητή και πού μπορούμε να την χρησιμοποιήσουμε

Τοπικές Μεταβλητές#

def test_function():
    x = 20  # Τοπική μεταβλητή - υπάρχει μόνο μέσα στη συνάρτηση
    print "Τοπική x:", x

test_function()  # Τοπική x: 20
# print x  # ΛΑΘΟΣ! Η x δεν υπάρχει εδώ

Καθολικές Μεταβλητές#

x = 10  # Καθολική μεταβλητή - υπάρχει παντού

def test_function():
    x = 20  # Νέα τοπική μεταβλητή (σκιάζει την καθολική)
    print "Μέσα στη συνάρτηση:", x

test_function()        # Μέσα στη συνάρτηση: 20
print "Έξω από τη συνάρτηση:", x  # Έξω από τη συνάρτηση: 10

Χρήση global#

counter = 0  # Καθολική μεταβλητή

def increase_counter():
    global counter  # Λέμε ότι θέλουμε την καθολική
    counter += 1    # Τροποποιούμε την καθολική

print counter  # 0
increase_counter()
print counter  # 1

🎯 Άσκηση 3 - Υπολογισμός Παραγοντικού#

Παραγοντικό (n!) = 1 × 2 × 3 × ... × n

Παραδείγματα:

  • 5! = 1 × 2 × 3 × 4 × 5 = 120
  • 3! = 1 × 2 × 3 = 6
  • 0! = 1 (ειδική περίπτωση)
def factorial(n):
    """Υπολογισμός παραγοντικού"""
    # Ειδικές περιπτώσεις
    if n == 0 or n == 1:
        return 1
    
    # Γενική περίπτωση
    result = 1
    for i in range(2, n + 1):
        result *= i  # result = result * i
    
    return result

# Δοκιμές
print "0! =", factorial(0)  # 1
print "1! =", factorial(1)  # 1  
print "3! =", factorial(3)  # 6
print "5! =", factorial(5)  # 120

# Πρακτική χρήση
n = 5
result = factorial(n)
print "Το παραγοντικό του {} είναι {}".format(n, result)

📚 Πρακτικό Παράδειγμα - Αριθμομηχανή#

def calculator():
    """Απλή αριθμομηχανή"""
    
    def add(a, b):
        return a + b
    
    def subtract(a, b):
        return a - b
    
    def multiply(a, b):
        return a * b
    
    def divide(a, b):
        if b == 0:
            return "Σφάλμα: Διαίρεση με μηδέν!"
        return float(a) / b
    
    # Κύριο πρόγραμμα
    print "=== ΑΡΙΘΜΟΜΗΧΑΝΗ ==="
    print "Επιλογές: +, -, *, /, quit"
    
    while True:
        operation = raw_input("Πράξη: ")
        
        if operation == "quit":
            print "Αντίο!"
            break
            
        if operation in ["+", "-", "*", "/"]:
            try:
                num1 = float(raw_input("Πρώτος αριθμός: "))
                num2 = float(raw_input("Δεύτερος αριθμός: "))
                
                if operation == "+":
                    result = add(num1, num2)
                elif operation == "-":
                    result = subtract(num1, num2)
                elif operation == "*":
                    result = multiply(num1, num2)
                elif operation == "/":
                    result = divide(num1, num2)
                
                print "Αποτέλεσμα:", result
                
            except ValueError:
                print "Σφάλμα: Εισάγετε έγκυρους αριθμούς!"
        else:
            print "Άγνωστη πράξη!"

# Εκτέλεση (σχολιάστε για να μην τρέχει)
# calculator()

💡 Tips για Συναρτήσεις#

  1. Ονόματα: Χρησιμοποιήστε περιγραφικά ονόματα (calculate_area όχι calc)
  2. Μέγεθος: Κρατήστε τις συναρτήσεις μικρές (κάτω από 20 γραμμές)
  3. Ένας σκοπός: Κάθε συνάρτηση να κάνει ένα πράγμα καλά
  4. Docstrings: Πάντα γράφετε τι κάνει η συνάρτηση με """
  5. Return: Αν η συνάρτηση υπολογίζει κάτι, χρησιμοποιήστε return

6. Λίστες και Tuples - Αποθηκεύουμε Πολλά Στοιχεία!#

📝 Τι είναι μια Λίστα;#

Λίστα (List) = Μια συλλογή στοιχείων που μπορούμε να αλλάξουμε (μεταβλητή).

Αναλογία: Σαν μια λίστα αγορών όπου μπορούμε:

  • Να προσθέσουμε νέα προϊόντα
  • Να αφαιρέσουμε προϊόντα
  • Να αλλάξουμε τη σειρά
  • Να δούμε τι περιέχει

Χαρακτηριστικά Λίστας:

  • Διατεταγμένη: Κάθε στοιχείο έχει συγκεκριμένη θέση (δείκτη)
  • Μεταβλητή: Μπορούμε να την αλλάξουμε
  • Επιτρέπει διπλά: Το ίδιο στοιχείο μπορεί να υπάρχει πολλές φορές

🏗️ Δημιουργία Λίστας#

# Κενή λίστα
empty_list = []

# Λίστα με αριθμούς
numbers = [1, 2, 3, 4, 5]

# Λίστα με κείμενα
fruits = ["μήλο", "μπανάνα", "πορτοκάλι"]

# Μικτή λίστα (διάφοροι τύποι)
mixed = [1, "δύο", 3.0, True, [5, 6]]  # Μπορεί να περιέχει και άλλες λίστες!

# Λίστα από range
range_list = list(range(5))  # [0, 1, 2, 3, 4]

🎯 Πρόσβαση σε Στοιχεία - Indexing#

Δείκτης (Index) = Η θέση του στοιχείου στη λίστα (ξεκινάει από 0!)

fruits = ["μήλο", "μπανάνα", "πορτοκάλι", "κεράσι"]
#         [  0   ,    1    ,     2     ,    3   ]

# Πρόσβαση με θετικό δείκτη
print fruits[0]    # "μήλο" (πρώτο στοιχείο)
print fruits[1]    # "μπανάνα" (δεύτερο στοιχείο)  
print fruits[3]    # "κεράσι" (τέταρτο στοιχείο)

# Πρόσβαση με αρνητικό δείκτη (από το τέλος)
print fruits[-1]   # "κεράσι" (τελευταίο)
print fruits[-2]   # "πορτοκάλι" (προτελευταίο)

# Έλεγχος μεγέθους
print len(fruits)  # 4 (πλήθος στοιχείων)

⚠️ Προσοχή: Αν ζητήσουμε δείκτη που δεν υπάρχει, παίρνουμε σφάλμα!

# fruits[10]  # IndexError: list index out of range

✂️ Slicing - Κομμάτια Λίστας#

Slicing = Παίρνουμε ένα κομμάτι της λίστας

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Βασικό slicing: [start:stop]
print numbers[2:5]    # [2, 3, 4] (από θέση 2 έως 4)
print numbers[0:3]    # [0, 1, 2] (πρώτα 3 στοιχεία)
print numbers[5:]     # [5, 6, 7, 8, 9] (από θέση 5 έως τέλος)
print numbers[:4]     # [0, 1, 2, 3] (από αρχή έως θέση 3)

# Με βήμα: [start:stop:step]
print numbers[::2]    # [0, 2, 4, 6, 8] (κάθε δεύτερο)
print numbers[1::2]   # [1, 3, 5, 7, 9] (κάθε δεύτερο από τη θέση 1)
print numbers[::-1]   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (αντίστροφα)

🔧 Μέθοδοι Λιστών - Αλλάζουμε τη Λίστα#

Προσθήκη Στοιχείων#

fruits = ["μήλο", "μπανάνα"]

# append() - Προσθήκη στο τέλος
fruits.append("πορτοκάλι")
print fruits  # ["μήλο", "μπανάνα", "πορτοκάλι"]

# insert() - Προσθήκη σε συγκεκριμένη θέση
fruits.insert(1, "ακτινίδιο")  # Θέση 1
print fruits  # ["μήλο", "ακτινίδιο", "μπανάνα", "πορτοκάλι"]

# extend() - Προσθήκη πολλών στοιχείων
more_fruits = ["σταφύλι", "ροδάκινο"]
fruits.extend(more_fruits)
print fruits  # ["μήλο", "ακτινίδιο", "μπανάνα", "πορτοκάλι", "σταφύλι", "ροδάκινο"]

Αφαίρεση Στοιχείων#

fruits = ["μήλο", "μπανάνα", "πορτοκάλι", "μπανάνα"]

# remove() - Αφαιρεί την πρώτη εμφάνιση
fruits.remove("μπανάνα")  # Αφαιρεί την πρώτη "μπανάνα"
print fruits  # ["μήλο", "πορτοκάλι", "μπανάνα"]

# pop() - Αφαιρεί και επιστρέφει στοιχείο
last_fruit = fruits.pop()  # Αφαιρεί το τελευταίο
print last_fruit  # "μπανάνα"
print fruits       # ["μήλο", "πορτοκάλι"]

first_fruit = fruits.pop(0)  # Αφαιρεί το πρώτο
print first_fruit  # "μήλο"
print fruits       # ["πορτοκάλι"]

# clear() - Αδειάζει τη λίστα
fruits.clear()
print fruits  # []

# del - Διαγραφή με δείκτη
numbers = [1, 2, 3, 4, 5]
del numbers[1]  # Διαγράφει το στοιχείο στη θέση 1
print numbers   # [1, 3, 4, 5]

📊 Χρήσιμες Λειτουργίες#

numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]

# Στατιστικά
print len(numbers)      # 9 (πλήθος στοιχείων)
print max(numbers)      # 9 (μέγιστο)
print min(numbers)      # 1 (ελάχιστο)  
print sum(numbers)      # 36 (άθροισμα)

# Αναζήτηση
print numbers.count(5)   # 2 (πόσες φορές εμφανίζεται το 5)
print numbers.index(4)   # 2 (θέση πρώτης εμφάνισης του 4)

# Έλεγχος ύπαρξης
print 7 in numbers      # False (το 7 δεν υπάρχει)
print 5 in numbers      # True (το 5 υπάρχει)

# Ταξινόμηση
numbers.sort()          # Ταξινομεί τη λίστα (την αλλάζει!)
print numbers           # [1, 1, 2, 3, 4, 5, 5, 6, 9]

numbers.sort(reverse=True)  # Φθίνουσα σειρά
print numbers               # [9, 6, 5, 5, 4, 3, 2, 1, 1]

# Αντιστροφή
numbers.reverse()
print numbers           # [1, 1, 2, 3, 4, 5, 5, 6, 9]

🔄 Επανάληψη σε Λίστες#

fruits = ["μήλο", "μπανάνα", "πορτοκάλι"]

# Επανάληψη στα στοιχεία
for fruit in fruits:
    print "Μου αρέσει το", fruit

# Επανάληψη με δείκτη
for i in range(len(fruits)):
    print "Θέση {}: {}".format(i, fruits[i])

# Επανάληψη με enumerate (θέση και στοιχείο μαζί)
for index, fruit in enumerate(fruits):
    print "Θέση {}: {}".format(index, fruit)

🔒 Tuples - Αμετάβλητες Λίστες#

Tuple = Σαν λίστα, αλλά δεν μπορούμε να την αλλάξουμε (αμετάβλητη).

Πότε χρησιμοποιούμε tuples;

  • Συντεταγμένες (x, y)
  • Ημερομηνίες (έτος, μήνας, ημέρα)
  • Σταθερά δεδομένα που δεν αλλάζουν
# Δημιουργία tuple
coordinates = (3, 5)          # Συντεταγμένες
colors = ("κόκκινο", "πράσινο", "μπλε")
date = (2025, 7, 11)          # Ημερομηνία

# Πρόσβαση (όπως στη λίστα)
print coordinates[0]          # 3
print colors[-1]              # "μπλε"
print len(date)               # 3

# Τα tuples ΔΕΝ αλλάζουν!
# coordinates[0] = 4          # ΛΑΘΟΣ! TypeError
# colors.append("κίτρινο")    # ΛΑΘΟΣ! Δεν έχει append

# Unpacking - Ανάθεση σε πολλές μεταβλητές
x, y = coordinates
print "x =", x, "y =", y      # x = 3 y = 5

year, month, day = date
print "Έτος:", year           # Έτος: 2025

📝 List Comprehensions - Δημιουργία Λιστών Γρήγορα#

List Comprehension = Τρόπος δημιουργίας λίστας με μία γραμμή

# Κλασικός τρόπος
squares = []
for i in range(5):
    squares.append(i ** 2)
print squares  # [0, 1, 4, 9, 16]

# Με list comprehension
squares = [i ** 2 for i in range(5)]
print squares  # [0, 1, 4, 9, 16]

# Με συνθήκη
evens = [i for i in range(10) if i % 2 == 0]
print evens    # [0, 2, 4, 6, 8]

# Επεξεργασία λίστας
fruits = ["ΜΗΛΟ", "ΜΠΑΝΑΝΑ", "ΠΟΡΤΟΚΑΛΙ"]
lowercase_fruits = [fruit.lower() for fruit in fruits]
print lowercase_fruits  # ["μηλο", "μπανανα", "πορτοκαλι"]

🎯 Άσκηση 4 - Διαχείριση Βαθμών#

def grade_manager():
    """Σύστημα διαχείρισης βαθμών με λίστα"""
    grades = []  # Λίστα για αποθήκευση βαθμών
    
    while True:
        print "\n=== ΔΙΑΧΕΙΡΙΣΗ ΒΑΘΜΩΝ ==="
        print "1. Προσθήκη βαθμού"
        print "2. Εμφάνιση όλων των βαθμών"
        print "3. Υπολογισμός στατιστικών"
        print "4. Αφαίρεση βαθμού"
        print "5. Ταξινόμηση βαθμών"
        print "6. Έξοδος"
        
        choice = raw_input("Επιλογή: ")
        
        if choice == "1":
            try:
                grade = float(raw_input("Εισάγετε βαθμό (0-20): "))
                if 0 <= grade <= 20:
                    grades.append(grade)
                    print "Βαθμός {} προστέθηκε!".format(grade)
                else:
                    print "Ο βαθμός πρέπει να είναι 0-20!"
            except ValueError:
                print "Εισάγετε έγκυρο αριθμό!"
                
        elif choice == "2":
            if grades:
                print "\nΟΛΟΙ ΟΙ ΒΑΘΜΟΙ:"
                for i, grade in enumerate(grades):
                    print "{}. {}".format(i + 1, grade)
            else:
                print "Δεν υπάρχουν βαθμοί!"
                
        elif choice == "3":
            if grades:
                print "\n=== ΣΤΑΤΙΣΤΙΚΑ ==="
                print "Πλήθος βαθμών:", len(grades)
                print "Μέγιστος βαθμός:", max(grades)
                print "Ελάχιστος βαθμός:", min(grades)
                print "Άθροισμα:", sum(grades)
                print "Μέσος όρος: {:.2f}".format(sum(grades) / len(grades))
                
                # Βαθμοί άνω του 10
                passed = [g for g in grades if g >= 10]
                print "Βαθμοί επιτυχίας: {} από {}".format(len(passed), len(grades))
            else:
                print "Δεν υπάρχουν βαθμοί για στατιστικά!"
                
        elif choice == "4":
            if grades:
                print "Τρέχοντες βαθμοί:", grades
                try:
                    index = int(raw_input("Θέση βαθμού για αφαίρεση (1-{}): ".format(len(grades))))
                    if 1 <= index <= len(grades):
                        removed = grades.pop(index - 1)
                        print "Αφαιρέθηκε ο βαθμός {}".format(removed)
                    else:
                        print "Λάθος θέση!"
                except ValueError:
                    print "Εισάγετε έγκυρο αριθμό!"
            else:
                print "Δεν υπάρχουν βαθμοί!"
                
        elif choice == "5":
            if grades:
                order = raw_input("Ταξινόμηση (a)ύξουσα ή (φ)θίνουσα: ").lower()
                if order == "a":
                    grades.sort()
                    print "Ταξινομήθηκαν αύξουσα!"
                elif order == "φ" or order == "f":
                    grades.sort(reverse=True)
                    print "Ταξινομήθηκαν φθίνουσα!"
                else:
                    print "Λάθος επιλογή!"
            else:
                print "Δεν υπάρχουν βαθμοί!"
                
        elif choice == "6":
            print "Αντίο!"
            break
            
        else:
            print "Λάθος επιλογή!"

# Εκτέλεση (σχολιάστε για να μην τρέχει)
# grade_manager()

💡 Tips για Λίστες#

  1. Δείκτες: Θυμηθείτε ότι ξεκινούν από 0!
  2. Αλλαγή κατά την επανάληψη: Προσοχή όταν αλλάζετε λίστα ενώ την επαναλαμβάνετε
  3. Shallow vs Deep copy: new_list = old_list[:] για αντιγραφή
  4. Μνήμη: Μεγάλες λίστες καταλαμβάνουν περισσότερη μνήμη
  5. List vs Tuple: Χρησιμοποιήστε tuple αν τα δεδομένα δεν αλλάζουν

7. Strings (Συμβολοσειρές)#

Βασικές Λειτουργίες#

text = "Python Programming"

print len(text)         # 18 (μήκος)
print text.upper()      # "PYTHON PROGRAMMING"
print text.lower()      # "python programming"
print text.title()      # "Python Programming"
print text.capitalize() # "Python programming"

Αναζήτηση και Αντικατάσταση#

sentence = "Η Python είναι μια υπέροχη γλώσσα"

print "Python" in sentence     # True
print sentence.find("Python")  # 2 (θέση εύρεσης)
print sentence.count("α")      # 4 (πλήθος εμφανίσεων)

# Αντικατάσταση
new_sentence = sentence.replace("Python", "Java")
print new_sentence

Διαχωρισμός και Ένωση#

# Split
words = "Python,Java,C++,JavaScript".split(",")
print words  # ['Python', 'Java', 'C++', 'JavaScript']

# Join
languages = ["Python", "Java", "C++"]
result = " - ".join(languages)
print result  # "Python - Java - C++"

Μορφοποίηση Strings#

name = "Γιάννης"
age = 20
grade = 18.5

# Παλιός τρόπος
message1 = "Το όνομά μου είναι %s, είμαι %d ετών και έχω βαθμό %.1f" % (name, age, grade)

# Νέος τρόπος
message2 = "Το όνομά μου είναι {}, είμαι {} ετών και έχω βαθμό {:.1f}".format(name, age, grade)

print message1
print message2

🎯 Άσκηση 5 - Ανάλυση Κειμένου#

def text_analyzer(text):
    """Ανάλυση χαρακτηριστικών κειμένου"""
    print "Κείμενο:", text
    print "Μήκος:", len(text)
    print "Λέξεις:", len(text.split())
    print "Κεφαλαία γράμματα:", sum(1 for c in text if c.isupper())
    print "Μικρά γράμματα:", sum(1 for c in text if c.islower())
    print "Ψηφία:", sum(1 for c in text if c.isdigit())
    print "Κενά:", text.count(" ")

# Δοκιμή
sample_text = "Η Python 2.7 είναι μια ΥΠΕΡΟΧΗ γλώσσα προγραμματισμού!"
text_analyzer(sample_text)

8. Dictionaries (Λεξικά)#

Δημιουργία και Πρόσβαση#

# Δημιουργία dictionary
student = {
    "name": "Γιάννης",
    "age": 18,
    "grade": 19.5,
    "subjects": ["Μαθηματικά", "Φυσική", "Προγραμματισμός"]
}

# Πρόσβαση σε τιμές
print student["name"]        # "Γιάννης"
print student.get("age")     # 18
print student.get("height", "Άγνωστο")  # "Άγνωστο" (προεπιλεγμένη τιμή)

Τροποποίηση Dictionary#

# Προσθήκη/Τροποποίηση
student["height"] = 1.75
student["age"] = 19

# Αφαίρεση
del student["subjects"]
removed_grade = student.pop("grade")

# Έλεγχος ύπαρξης
if "name" in student:
    print "Το όνομα υπάρχει"

Μέθοδοι Dictionary#

grades = {"Μαθηματικά": 18, "Φυσική": 17, "Χημεία": 19}

print grades.keys()    # ['Μαθηματικά', 'Φυσική', 'Χημεία']
print grades.values()  # [18, 17, 19]
print grades.items()   # [('Μαθηματικά', 18), ('Φυσική', 17), ('Χημεία', 19)]

# Επανάληψη
for subject, grade in grades.items():
    print subject + ":", grade

🎯 Άσκηση 6 - Σύστημα Καταλόγου#

def phonebook():
    """Απλός τηλεφωνικός κατάλογος"""
    contacts = {}
    
    while True:
        print "\n=== ΤΗΛΕΦΩΝΙΚΟΣ ΚΑΤΑΛΟΓΟΣ ==="
        print "1. Προσθήκη επαφής"
        print "2. Αναζήτηση επαφής"
        print "3. Εμφάνιση όλων"
        print "4. Διαγραφή επαφής"
        print "5. Έξοδος"
        
        choice = raw_input("Επιλογή: ")
        
        if choice == "1":
            name = raw_input("Όνομα: ")
            phone = raw_input("Τηλέφωνο: ")
            contacts[name] = phone
            print "Επαφή προστέθηκε!"
            
        elif choice == "2":
            name = raw_input("Όνομα για αναζήτηση: ")
            if name in contacts:
                print name + ":", contacts[name]
            else:
                print "Δεν βρέθηκε!"
                
        elif choice == "3":
            if contacts:
                for name, phone in contacts.items():
                    print name + ":", phone
            else:
                print "Κενός κατάλογος!"
                
        elif choice == "4":
            name = raw_input("Όνομα για διαγραφή: ")
            if name in contacts:
                del contacts[name]
                print "Επαφή διαγράφηκε!"
            else:
                print "Δεν βρέθηκε!"
                
        elif choice == "5":
            break
            
        else:
            print "Λάθος επιλογή!"

# Εκτέλεση (σχολιάστε για να μην τρέχει)
# phonebook()

9. Αρχεία#

Ανάγνωση Αρχείου#

# Άνοιγμα και ανάγνωση
try:
    file = open("data.txt", "r")
    content = file.read()
    print content
    file.close()
except IOError:
    print "Σφάλμα: Το αρχείο δεν υπάρχει!"

# Ασφαλής τρόπος με with
try:
    with open("data.txt", "r") as file:
        content = file.read()
        print content
except IOError:
    print "Σφάλμα ανάγνωσης αρχείου!"

Εγγραφή σε Αρχείο#

# Εγγραφή (αντικαθιστά το περιεχόμενο)
with open("output.txt", "w") as file:
    file.write("Γεια σας!\n")
    file.write("Αυτό είναι ένα τεστ.\n")

# Προσθήκη (append)
with open("output.txt", "a") as file:
    file.write("Αυτή η γραμμή προστίθεται.\n")

Ανάγνωση Γραμμή προς Γραμμή#

try:
    with open("data.txt", "r") as file:
        for line_number, line in enumerate(file, 1):
            print "Γραμμή {}: {}".format(line_number, line.strip())
except IOError:
    print "Σφάλμα ανάγνωσης!"

🎯 Άσκηση 7 - Καταγραφή Βαθμών#

def grade_file_manager():
    """Διαχείριση βαθμών με αρχεία"""
    
    def save_grades(grades, filename="grades.txt"):
        """Αποθήκευση βαθμών σε αρχείο"""
        try:
            with open(filename, "w") as file:
                for subject, grade in grades.items():
                    file.write("{}: {}\n".format(subject, grade))
            print "Βαθμοί αποθηκεύτηκαν!"
        except IOError:
            print "Σφάλμα αποθήκευσης!"
    
    def load_grades(filename="grades.txt"):
        """Φόρτωση βαθμών από αρχείο"""
        grades = {}
        try:
            with open(filename, "r") as file:
                for line in file:
                    if ":" in line:
                        subject, grade = line.strip().split(": ")
                        grades[subject] = float(grade)
            print "Βαθμοί φορτώθηκαν!"
            return grades
        except IOError:
            print "Αρχείο δεν υπάρχει. Δημιουργία νέου..."
            return {}
        except ValueError:
            print "Σφάλμα μορφής αρχείου!"
            return {}
    
    # Κύριο πρόγραμμα
    grades = load_grades()
    
    while True:
        print "\n=== ΔΙΑΧΕΙΡΙΣΗ ΒΑΘΜΩΝ ==="
        print "1. Προσθήκη βαθμού"
        print "2. Εμφάνιση βαθμών"
        print "3. Αποθήκευση"
        print "4. Έξοδος"
        
        choice = raw_input("Επιλογή: ")
        
        if choice == "1":
            subject = raw_input("Μάθημα: ")
            try:
                grade = float(raw_input("Βαθμός: "))
                grades[subject] = grade
                print "Βαθμός προστέθηκε!"
            except ValueError:
                print "Λάθος μορφή βαθμού!"
                
        elif choice == "2":
            if grades:
                print "\nΒΑΘΜΟΙ:"
                for subject, grade in grades.items():
                    print "{}: {}".format(subject, grade)
                average = sum(grades.values()) / len(grades)
                print "Μέσος όρος: {:.2f}".format(average)
            else:
                print "Δεν υπάρχουν βαθμοί!"
                
        elif choice == "3":
            save_grades(grades)
            
        elif choice == "4":
            save_grades(grades)
            break
            
        else:
            print "Λάθος επιλογή!"

# Εκτέλεση (σχολιάστε για να μην τρέχει)
# grade_file_manager()

10. Εξαιρέσεις (Exceptions) - Χειρισμός Σφαλμάτων#

🐛 Τι είναι οι Εξαιρέσεις;#

Εξαίρεση (Exception) = Ένα σφάλμα που συμβαίνει κατά την εκτέλεση του προγράμματος και το σταματάει.

Γιατί συμβαίνουν;

  • Ο χρήστης δίνει λάθος είσοδο
  • Προσπαθούμε να διαβάσουμε αρχείο που δεν υπάρχει
  • Διαιρούμε με μηδέν
  • Προσπαθούμε να μετατρέψουμε κείμενο σε αριθμό

Παράδειγμα προβλήματος:

# Αυτός ο κώδικας θα "κρασάρει"
age = int(raw_input("Ηλικία: "))  # Αν γράψει "abc" αντί για αριθμό
result = 10 / age                 # Αν γράψει 0

🛡️ Try-Except - Προστασία από Σφάλματα#

Βασική Δομή:

try:
    # Κώδικας που μπορεί να δώσει σφάλμα
    risky_code()
except:
    # Τι να κάνουμε αν υπάρξει σφάλμα
    print "Κάτι πήγε στραβά!"

Πρακτικό Παράδειγμα:

try:
    age = int(raw_input("Δώστε την ηλικία σας: "))
    result = 100 / age
    print "Αποτέλεσμα:", result
except:
    print "Σφάλμα! Ελέγξτε τα δεδομένα σας."

🎯 Συγκεκριμένοι Τύποι Εξαιρέσεων#

ValueError - Λάθος Τιμή#

try:
    number = int(raw_input("Δώστε αριθμό: "))
    print "Ο αριθμός είναι:", number
except ValueError:
    print "Αυτό δεν είναι αριθμός!"

ZeroDivisionError - Διαίρεση με Μηδέν#

try:
    a = float(raw_input("Αριθμητής: "))
    b = float(raw_input("Παρονομαστής: "))
    result = a / b
    print "Αποτέλεσμα:", result
except ZeroDivisionError:
    print "Δεν μπορώ να διαιρέσω με μηδέν!"
except ValueError:
    print "Εισάγετε έγκυρους αριθμούς!"

IndexError - Λάθος Δείκτης#

numbers = [1, 2, 3]

try:
    index = int(raw_input("Δείκτης (0-2): "))
    print "Στοιχείο:", numbers[index]
except IndexError:
    print "Ο δείκτης δεν υπάρχει!"
except ValueError:
    print "Εισάγετε έγκυρο αριθμό!"

KeyError - Λάθος Κλειδί σε Dictionary#

grades = {"math": 18, "physics": 17}

try:
    subject = raw_input("Μάθημα: ")
    grade = grades[subject]
    print "Βαθμός:", grade
except KeyError:
    print "Το μάθημα δεν υπάρχει!"

📁 IOError - Προβλήματα με Αρχεία#

try:
    filename = raw_input("Όνομα αρχείου: ")
    with open(filename, "r") as file:
        content = file.read()
        print content
except IOError:
    print "Το αρχείο δεν βρέθηκε ή δεν μπορεί να ανοίξει!"

🔗 Πολλαπλές Εξαιρέσεις#

def safe_calculator():
    """Ασφαλής αριθμομηχανή"""
    try:
        num1 = float(raw_input("Πρώτος αριθμός: "))
        operator = raw_input("Πράξη (+, -, *, /): ")
        num2 = float(raw_input("Δεύτερος αριθμός: "))
        
        if operator == "+":
            result = num1 + num2
        elif operator == "-":
            result = num1 - num2
        elif operator == "*":
            result = num1 * num2
        elif operator == "/":
            result = num1 / num2
        else:
            print "Άγνωστη πράξη!"
            return
            
        print "Αποτέλεσμα: {:.2f}".format(result)
        
    except ValueError:
        print "Σφάλμα: Εισάγετε έγκυρους αριθμούς!"
    except ZeroDivisionError:
        print "Σφάλμα: Διαίρεση με μηδέν!"
    except Exception as e:
        print "Άγνωστο σφάλμα:", str(e)

# safe_calculator()

🎬 Finally - Πάντα Εκτελείται#

def read_file_safe(filename):
    """Ασφαλές άνοιγμα αρχείου"""
    file = None
    try:
        file = open(filename, "r")
        content = file.read()
        print "Περιεχόμενο:", content
        return content
    except IOError:
        print "Σφάλμα ανάγνωσης αρχείου!"
        return None
    finally:
        # Αυτό εκτελείται ΠΑΝΤΑ
        if file:
            file.close()
            print "Αρχείο έκλεισε"

🚨 Δημιουργία Δικών μας Εξαιρέσεων#

def check_grade(grade):
    """Έλεγχος εγκυρότητας βαθμού"""
    if not isinstance(grade, (int, float)):
        raise TypeError("Ο βαθμός πρέπει να είναι αριθμός!")
    
    if grade < 0:
        raise ValueError("Ο βαθμός δεν μπορεί να είναι αρνητικός!")
    
    if grade > 20:
        raise ValueError("Ο βαθμός δεν μπορεί να είναι πάνω από 20!")
    
    return True

# Χρήση
try:
    grade = float(raw_input("Βαθμός: "))
    check_grade(grade)
    print "Έγκυρος βαθμός:", grade
except ValueError as e:
    print "Σφάλμα τιμής:", str(e)
except TypeError as e:
    print "Σφάλμα τύπου:", str(e)

🎯 Πρακτικό Παράδειγμα - Ανθεκτική Είσοδος#

def get_valid_input(prompt, input_type=str, min_val=None, max_val=None):
    """Λήψη έγκυρης εισόδου από χρήστη"""
    while True:
        try:
            user_input = raw_input(prompt)
            
            # Μετατροπή στον επιθυμητό τύπο
            if input_type == int:
                value = int(user_input)
            elif input_type == float:
                value = float(user_input)
            else:
                value = user_input
            
            # Έλεγχος ορίων
            if min_val is not None and value < min_val:
                print "Η τιμή πρέπει να είναι >= {}".format(min_val)
                continue
                
            if max_val is not None and value > max_val:
                print "Η τιμή πρέπει να είναι <= {}".format(max_val)
                continue
            
            return value
            
        except ValueError:
            print "Λάθος μορφή! Δοκιμάστε ξανά."
        except KeyboardInterrupt:
            print "\nΠρόγραμμα διακόπηκε από το χρήστη."
            return None

# Παραδείγματα χρήσης
age = get_valid_input("Ηλικία (0-120): ", int, 0, 120)
grade = get_valid_input("Βαθμός (0-20): ", float, 0, 20)
name = get_valid_input("Όνομα: ", str)

if age and grade and name:
    print "Όνομα: {}, Ηλικία: {}, Βαθμός: {}".format(name, age, grade)

💡 Tips για Χειρισμό Σφαλμάτων#

  1. Προβλέψτε προβλήματα: Σκεφτείτε τι μπορεί να πάει στραβά
  2. Συγκεκριμένες εξαιρέσεις: Καλύτερα except ValueError: παρά except:
  3. Μηνύματα βοήθειας: Δώστε σαφείς οδηγίες στο χρήστη
  4. Μη κρύβετε σφάλματα: Καλύτερα να δείξετε τι πήγε στραβά
  5. Χρησιμοποιήστε finally: Για καθαρισμό (κλείσιμο αρχείων κ.λπ.)

11. Ασκήσεις Πανελληνίων#

🏆 Άσκηση Α1 - Υπολογισμός ΦΠΑ#

def calculate_vat():
    """Υπολογισμός τελικής τιμής με ΦΠΑ"""
    try:
        price = float(raw_input("Εισάγετε τιμή χωρίς ΦΠΑ: "))
        vat_rate = float(raw_input("Εισάγετε ποσοστό ΦΠΑ (%): "))
        
        vat_amount = price * (vat_rate / 100)
        final_price = price + vat_amount
        
        print "Τιμή χωρίς ΦΠΑ: {:.2f}€".format(price)
        print "ΦΠΑ ({:.0f}%): {:.2f}€".format(vat_rate, vat_amount)
        print "Τελική τιμή: {:.2f}€".format(final_price)
        
    except ValueError:
        print "Σφάλμα: Εισάγετε έγκυρους αριθμούς!"

# calculate_vat()

🏆 Άσκηση Α2 - Στατιστικά Λίστας#

def list_statistics():
    """Υπολογισμός στατιστικών μιας λίστας αριθμών"""
    numbers = []
    
    print "Εισάγετε αριθμούς (πληκτρολογήστε 'stop' για τέλος):"
    
    while True:
        user_input = raw_input("Αριθμός: ")
        if user_input.lower() == "stop":
            break
        try:
            number = float(user_input)
            numbers.append(number)
        except ValueError:
            print "Λάθος μορφή! Εισάγετε αριθμό ή 'stop'."
    
    if not numbers:
        print "Δεν εισαγάγατε αριθμούς!"
        return
    
    # Υπολογισμοί
    total = sum(numbers)
    count = len(numbers)
    average = total / count
    maximum = max(numbers)
    minimum = min(numbers)
    
    # Εμφάνιση αποτελεσμάτων
    print "\n=== ΣΤΑΤΙΣΤΙΚΑ ==="
    print "Πλήθος αριθμών:", count
    print "Άθροισμα:", total
    print "Μέσος όρος: {:.2f}".format(average)
    print "Μέγιστος:", maximum
    print "Ελάχιστος:", minimum
    
    # Αριθμοί πάνω από τον μέσο όρο
    above_average = [x for x in numbers if x > average]
    print "Αριθμοί πάνω από τον μέσο όρο:", len(above_average)

# list_statistics()

🏆 Άσκηση Α3 - Διαχείριση Βιβλιοθήκης#

def library_system():
    """Σύστημα διαχείρισης βιβλιοθήκης"""
    
    books = {
        "isbn001": {"title": "Python για Αρχάριους", "author": "Γιάννης", "available": True},
        "isbn002": {"title": "Αλγόριθμοι", "author": "Μαρία", "available": False},
        "isbn003": {"title": "Δομές Δεδομένων", "author": "Πέτρος", "available": True}
    }
    
    def display_books():
        """Εμφάνιση όλων των βιβλίων"""
        print "\n=== ΚΑΤΑΛΟΓΟΣ ΒΙΒΛΙΩΝ ==="
        for isbn, book in books.items():
            status = "Διαθέσιμο" if book["available"] else "Δανεισμένο"
            print "ISBN: {} | Τίτλος: {} | Συγγραφέας: {} | Κατάσταση: {}".format(
                isbn, book["title"], book["author"], status)
    
    def search_book():
        """Αναζήτηση βιβλίου"""
        search_term = raw_input("Εισάγετε τίτλο ή συγγραφέα: ").lower()
        found = False
        
        for isbn, book in books.items():
            if (search_term in book["title"].lower() or 
                search_term in book["author"].lower()):
                status = "Διαθέσιμο" if book["available"] else "Δανεισμένο"
                print "Βρέθηκε: {} - {} ({})".format(
                    book["title"], book["author"], status)
                found = True
        
        if not found:
            print "Δεν βρέθηκε βιβλίο!"
    
    def borrow_book():
        """Δανεισμός βιβλίου"""
        isbn = raw_input("Εισάγετε ISBN: ")
        if isbn in books:
            if books[isbn]["available"]:
                books[isbn]["available"] = False
                print "Το βιβλίο '{}' δανείστηκε επιτυχώς!".format(books[isbn]["title"])
            else:
                print "Το βιβλίο είναι ήδη δανεισμένο!"
        else:
            print "Το βιβλίο δεν υπάρχει!"
    
    def return_book():
        """Επιστροφή βιβλίου"""
        isbn = raw_input("Εισάγετε ISBN: ")
        if isbn in books:
            if not books[isbn]["available"]:
                books[isbn]["available"] = True
                print "Το βιβλίο '{}' επιστράφηκε επιτυχώς!".format(books[isbn]["title"])
            else:
                print "Το βιβλίο δεν είναι δανεισμένο!"
        else:
            print "Το βιβλίο δεν υπάρχει!"
    
    # Κύριο μενού
    while True:
        print "\n=== ΣΥΣΤΗΜΑ ΒΙΒΛΙΟΘΗΚΗΣ ==="
        print "1. Εμφάνιση όλων των βιβλίων"
        print "2. Αναζήτηση βιβλίου"
        print "3. Δανεισμός βιβλίου"
        print "4. Επιστροφή βιβλίου"
        print "5. Έξοδος"
        
        choice = raw_input("Επιλογή: ")
        
        if choice == "1":
            display_books()
        elif choice == "2":
            search_book()
        elif choice == "3":
            borrow_book()
        elif choice == "4":
            return_book()
        elif choice == "5":
            print "Αντίο!"
            break
        else:
            print "Λάθος επιλογή!"

# library_system()

12. Tips & Tricks για Πανελλήνιες#

💡 Στρατηγικές για την Εξέταση#

📖 1. Ανάλυση Εκφώνησης#

Βήματα:

  1. Διαβάστε ολόκληρη την άσκηση πριν ξεκινήσετε
  2. Υπογραμμίστε τα κλειδιά: τι ζητάει, τι δεδομένα έχετε
  3. Χωρίστε σε υπο-προβλήματα: μην προσπαθήσετε να λύσετε όλα μαζί
  4. Σκεφτείτε τον αλγόριθμο πριν γράψετε κώδικα

Παράδειγμα ανάλυσης:

"Γράψτε πρόγραμμα που διαβάζει βαθμούς μαθητών και υπολογίζει τον μέσο όρο"

Ανάλυση:

  • Είσοδος: Βαθμοί (πόσοι; πώς σταματάμε;)
  • Επεξεργασία: Άθροισμα, πλήθος, διαίρεση
  • Έξοδος: Μέσος όρος
  • Ειδικές περιπτώσεις: Μηδέν βαθμοί; Άκυροι βαθμοί;

🕐 2. Διαχείριση Χρόνου#

Προτεινόμενος χρόνος ανά φάση:

  • 5 λεπτά: Ανάγνωση και κατανόηση
  • 10 λεπτά: Σχεδιασμός αλγορίθμου
  • 60 λεπτά: Γραφή κώδικα
  • 10 λεπτά: Έλεγχος και διορθώσεις
  • 5 λεπτά: Τελικός έλεγχος

🎯 3. Διάβασμα Κώδικα (Trace)#

Όταν σας δίνουν κώδικα να αναλύσετε:

Μέθοδος "Βήμα προς Βήμα":

def mystery_function(n):
    result = 0
    for i in range(1, n + 1):
        if i % 2 == 0:
            result += i
    return result

# Trace για n = 5:
# i=1: 1%2=1 (όχι 0)  δεν προσθέτουμε
# i=2: 2%2=0  result = 0+2 = 2
# i=3: 3%2=1 (όχι 0)  δεν προσθέτουμε  
# i=4: 4%2=0  result = 2+4 = 6
# i=5: 5%2=1 (όχι 0)  δεν προσθέτουμε
# Επιστρέφει: 6

Κρατήστε πίνακα τιμών:

i | i%2 | result
1 |  1  |   0
2 |  0  |   2  
3 |  1  |   2
4 |  0  |   6
5 |  1  |   6

🚨 Συχνά Λάθη που Πρέπει να Αποφύγετε#

1. Σύγχυση = και ==#

# ΛΑΘΟΣ
if x = 5:  # Ανάθεση!
    print "x is 5"

# ΣΩΣΤΟ  
if x == 5:  # Σύγκριση!
    print "x is 5"

2. Εσοχές#

# ΛΑΘΟΣ
if True:
print "Hello"  # Δεν έχει εσοχή

# ΣΩΣΤΟ
if True:
    print "Hello"  # 4 κενά εσοχή

3. Τροποποίηση λίστας κατά την επανάληψη#

# ΕΠΙΚΙΝΔΥΝΟ
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)  # Μπορεί να προκαλέσει πρόβλημα!

# ΑΣΦΑΛΕΣ
numbers = [1, 2, 3, 4, 5]
numbers = [num for num in numbers if num % 2 != 0]

4. Διαίρεση στην Python 2.7.x#

# Προσοχή!
print 5 / 2    # 2 (όχι 2.5!)
print 5.0 / 2  # 2.5 (δεκαδικό)

5. Ξεχνάμε να ελέγξουμε ακραίες περιπτώσεις#

def calculate_average(numbers):
    # ΛΑΘΟΣ - Τι αν η λίστα είναι κενή;
    return sum(numbers) / len(numbers)

def calculate_average_safe(numbers):
    # ΣΩΣΤΟ
    if not numbers:  # Έλεγχος κενής λίστας
        return 0
    return sum(numbers) / len(numbers)

📝 Χρήσιμα Patterns για Εξετάσεις#

Pattern 1: Έλεγχος εγκυρότητας εισόδου#

def get_grade():
    """Λήψη έγκυρου βαθμού"""
    while True:
        try:
            grade = float(raw_input("Βαθμός (0-20): "))
            if 0 <= grade <= 20:
                return grade
            else:
                print "Ο βαθμός πρέπει να είναι 0-20!"
        except ValueError:
            print "Εισάγετε έγκυρο αριθμό!"

Pattern 2: Μετρητής με λεξικό#

def count_items(items):
    """Μέτρηση εμφανίσεων"""
    counts = {}
    for item in items:
        if item in counts:
            counts[item] += 1
        else:
            counts[item] = 1
    return counts

Pattern 3: Εύρεση μεγίστου/ελαχίστου#

def find_max_manual(numbers):
    """Εύρεση μεγίστου χωρίς max()"""
    if not numbers:
        return None
        
    max_num = numbers[0]
    for num in numbers[1:]:
        if num > max_num:
            max_num = num
    return max_num

Pattern 4: Φιλτράρισμα δεδομένων#

def filter_passing_grades(grades):
    """Επιστροφή βαθμών επιτυχίας"""
    passing = []
    for grade in grades:
        if grade >= 10:
            passing.append(grade)
    return passing

✅ Checklist Πριν Παραδώσετε#

Έλεγχος Συντακτικού:

  • [ ] Όλες οι εσοχές είναι σωστές;
  • [ ] Όλες οι παρενθέσεις κλείνουν;
  • [ ] Έχω : μετά από if/for/while/def;
  • [ ] Χρησιμοποιώ == για σύγκριση (όχι =);

Έλεγχος Λογικής:

  • [ ] Το πρόγραμμα κάνει αυτό που ζητάει η άσκηση;
  • [ ] Χειρίζομαι τις ακραίες περιπτώσεις;
  • [ ] Οι μεταβλητές έχουν σωστές αρχικές τιμές;
  • [ ] Οι βρόχοι τερματίζουν σωστά;

Έλεγχος Δεδομένων:

  • [ ] Ελέγχω για κενές λίστες/strings;
  • [ ] Ελέγχω για διαίρεση με μηδέν;
  • [ ] Χειρίζομαι λάθος είσοδο χρήστη;

🎓 Τελευταίες Συμβουλές#

  1. Μη σκυφτείτε! Αν δεν ξέρετε κάτι, συνεχίστε και επιστρέψτε
  2. Γράψτε σχόλια για να θυμάστε τι κάνει ο κώδικας
  3. Δοκιμάστε με παραδείγματα στο μυαλό σας
  4. Προτιμήστε απλούς αλγορίθμους από σύνθετους
  5. Διαβάστε προσεκτικά τι ζητάει η άσκηση

📝 Σύνοψη - Ό,τι Πρέπει να Θυμάστε!#

🏗️ Βασικά Δομικά Στοιχεία#

Τύποι Δεδομένων#

# Αριθμοί
age = 18           # int (ακέραιος)
price = 19.99      # float (δεκαδικός)

# Κείμενο  
name = "Γιάννης"   # str (string)

# Λογικές τιμές
is_student = True  # bool (boolean)

# Συλλογές
grades = [18, 17, 19]           # list (λίστα) 
point = (3, 5)                  # tuple (tuple)
student = {"name": "Γιάννης"}   # dict (λεξικό)

Βασικές Εντολές που Χρησιμοποιούμε Συχνά#

print "Hello"              # Εμφάνιση
name = raw_input("Όνομα: ") # Είσοδος από χρήστη
len(my_list)               # Μήκος λίστας/string
range(5)                   # Ακολουθία αριθμών: 0,1,2,3,4
type(variable)             # Τύπος μεταβλητής

# Μετατροπές
int("5")     # String σε ακέραιο
float("5.5") # String σε δεκαδικό  
str(5)       # Αριθμό σε string

🔀 Δομές Ελέγχου - Πώς Παίρνουμε Αποφάσεις#

if-elif-else (Συνθήκες)#

if συνθήκη1:
    # Κώδικας αν η συνθήκη1 είναι αληθής
elif συνθήκη2:
    # Κώδικας αν η συνθήκη2 είναι αληθής
else:
    # Κώδικας αν καμία συνθήκη δεν είναι αληθής

for (Βρόχος με Καθορισμένες Επαναλήψεις)#

# Επανάληψη με αριθμούς
for i in range(5):        # 0, 1, 2, 3, 4
    print i

# Επανάληψη σε λίστα
for item in my_list:
    print item

while (Βρόχος με Συνθήκη)#

while συνθήκη:
    # Κώδικας που επαναλαμβάνεται
    # ΠΡΟΣΟΧΗ: Η συνθήκη πρέπει να αλλάζει!

🔧 Συναρτήσεις - Οργανώνουμε τον Κώδικα#

Βασική Δομή#

def όνομα_συνάρτησης(παράμετρος1, παράμετρος2):
    """Περιγραφή τι κάνει"""
    # Κώδικας
    return αποτέλεσμα  # Προαιρετικό

Παράδειγμα

def calculate_average(numbers):
    """Υπολογισμός μέσου όρου"""
    if not numbers:  # Έλεγχος κενής λίστας
        return 0
    return sum(numbers) / len(numbers)

📊 Τελεστές που Χρησιμοποιούμε#

Αριθμητικοί

+   # Πρόσθεση
-   # Αφαίρεση  
*   # Πολλαπλασιασμός
/   # Διαίρεση (ΠΡΟΣΟΧΗ: ακέραια στην Python 2.7!)
%   # Υπόλοιπο διαίρεσης
**  # Ύψωση σε δύναμη

Σύγκρισης

==  # Ίσο
!=  # Διαφορετικό
<   # Μικρότερο
>   # Μεγαλύτερο  
<=  # Μικρότερο ή ίσο
>=  # Μεγαλύτερο ή ίσο

Λογικοί

and  # Και (πρέπει ΚΑΙ τα δύο να είναι αληθή)
or   # Ή (αρκεί ΕΝΑ να είναι αληθές)
not  # Όχι (αντιστρέφει)

📝 Λίστες - Το Πιο Σημαντικό!#

Βασικές Λειτουργίες#

my_list = [1, 2, 3]

# Πρόσβαση
my_list[0]     # Πρώτο στοιχείο
my_list[-1]    # Τελευταίο στοιχείο

# Προσθήκη
my_list.append(4)        # Στο τέλος
my_list.insert(0, 0)     # Στη θέση 0

# Αφαίρεση  
my_list.remove(2)        # Αφαιρεί το 2
my_list.pop()            # Αφαιρεί το τελευταίο

# Χρήσιμες συναρτήσεις
len(my_list)   # Πλήθος στοιχείων
max(my_list)   # Μέγιστο
min(my_list)   # Ελάχιστο
sum(my_list)   # Άθροισμα

🛡️ Χειρισμός Σφαλμάτων#

Βασική Δομή#

try:
    # Κώδικας που μπορεί να δώσει σφάλμα
    risky_operation()
except ValueError:
    # Τι να κάνουμε αν έχουμε ValueError
    print "Λάθος τιμή!"
except:
    # Γενικός χειρισμός για όλα τα άλλα σφάλματα
    print "Κάτι πήγε στραβά!"

🎯 Το Πιο Σημαντικό για Εξετάσεις#

1. Πάντα Ελέγχετε:#

  • Κενές λίστες: if not my_list:
  • Διαίρεση με μηδέν: if denominator != 0:
  • Έγκυρη είσοδος: Χρησιμοποιήστε try-except

2. Θυμηθείτε:#

  • Εσοχές = 4 κενά (ή 1 tab)
  • Δώσεις : μετά από if/for/while/def
  • Σύγκριση == (όχι =)
  • range(5) = 0,1,2,3,4 (όχι 5!)

3. Συχνά Patterns:#

# Εύρεση μεγίστου
max_val = numbers[0]
for num in numbers[1:]:
    if num > max_val:
        max_val = num

# Μέτρηση εμφανίσεων
count = 0
for item in my_list:
    if item == target:
        count += 1

# Φιλτράρισμα
result = []
for item in my_list:
    if condition(item):
        result.append(item)

🏆 Τελικές Συμβουλές#

  1. Ξεκινήστε απλά - Πρώτα λύστε το βασικό πρόβλημα
  2. Προσθέστε ελέγχους - Μετά προσθέστε έλεγχο σφαλμάτων
  3. Δοκιμάστε με παραδείγματα - Στο μυαλό σας ή σε χαρτί
  4. Μη φοβάστε τα λάθη - Είναι φυσικό μέρος της μάθησης!

Θυμηθείτε: Η Python είναι φιλική γλώσσα. Αν κάτι φαίνεται πολύπλοκο, πιθανώς υπάρχει απλούστερος τρόπος!

🎯 Το Δικό σας Ταξίδι με την Python!#

🗺️ Roadmap Μάθησης#

Αρχάριος (Εβδομάδες 1-4):

  • ✅ Κατανοήσατε τι είναι προγραμματισμός
  • ✅ Μπορείτε να χρησιμοποιήσετε μεταβλητές και τελεστές
  • ✅ Γράφετε απλά προγράμματα με if και loops
  • 🎯 Στόχος: Γράψτε ένα πρόγραμμα που υπολογίζει μέσο όρο βαθμών

Ενδιάμεσος (Εβδομάδες 5-8):

  • ✅ Δημιουργείτε και χρησιμοποιείτε συναρτήσεις
  • ✅ Χειρίζεστε λίστες με άνεση
  • ✅ Κατανοείτε strings και dictionaries
  • 🎯 Στόχος: Φτιάξτε ένα απλό παιχνίδι ή σύστημα διαχείρισης

Προχωρημένος (Εβδομάδες 9-12):

  • ✅ Διαχειρίζεστε αρχεία και εξαιρέσεις
  • ✅ Λύνετε πολύπλοκα προβλήματα
  • ✅ Είστε έτοιμοι για πανελλήνιες!
  • 🎯 Στόχος: Λύστε όλες τις ασκήσεις πανελληνίων με σιγουριά

📚 Πώς να Συνεχίσετε τη Μάθηση#

1. Πρακτική κάθε μέρα#

# Ακόμη και 15 λεπτά την ημέρα κάνουν τη διαφορά!
daily_practice = True
if daily_practice:
    skills += 1  # Τα skills σας αυξάνονται!

2. Φτιάξτε projects#

  • Αριθμομηχανή με όλες τις πράξεις
  • Παιχνίδι μαντέματος αριθμού
  • Σύστημα διαχείρισης βιβλιοθήκης
  • Ανάλυση κειμένου (πλήθος λέξεων, συχνότερες λέξεις)

3. Ενταχθείτε στην κοινότητα#

  • Κάντε ερωτήσεις σε forums (Stack Overflow, Reddit)
  • Μοιραστείτε τον κώδικά σας με φίλους
  • Βοηθήστε άλλους αρχάριους

💪 Αν Κολλήσετε...#

Αυτό είναι ΦΥΣΙΚΟ! Κάθε προγραμματιστής κολλάει. Εδώ τι να κάνετε:

  1. Πάρτε ένα διάλειμμα
  2. Διαβάστε ξανά τη θεωρία 📖
  3. Δοκιμάστε σε χαρτί πρώτα ✏️
  4. Ψάξτε παραδείγματα στο internet 🔍
  5. Ρωτήστε κάποιον (καθηγητή, φίλο) 🤝

🌟 Η Δύναμη της Python#

Η Python δεν είναι μόνο για σχολείο! Μπορείτε να φτιάξετε:

  • 🌐 Ιστοσελίδες (Django, Flask)
  • 🤖 Τεχνητή Νοημοσύνη (TensorFlow, PyTorch)
  • 📊 Ανάλυση δεδομένων (Pandas, NumPy)
  • 🎮 Παιχνίδια (Pygame)
  • 📱 Εφαρμογές desktop (Tkinter, PyQt)
  • 🔬 Επιστημονικά προγράμματα

🏆 Μήνυμα Ενθάρρυνσης#

Θυμηθείτε: Κάθε expert ήταν κάποτε αρχάριος!

"Ο προγραμματισμός δεν είναι για τους έξυπνους - είναι για όσους δεν τα παρατάνε!"

Συμβουλές από προγραμματιστές:

  • 🐛 Τα bugs είναι φίλοι σας - σας μαθαίνουν!
  • 🔄 Η επανάληψη είναι κλειδί - όσο περισσότερο κώδικα γράφετε, τόσο καλύτεροι γίνεστε
  • 🎯 Επικεντρωθείτε στο πρόβλημα - η Python είναι απλώς το εργαλείο
  • 🤝 Μην φοβάστε να ρωτήσετε - η κοινότητα είναι φιλική!

🎉 Συγχαρητήρια!#

Έφτάσατε στο τέλος! 🎊

Τώρα έχετε όλα τα εφόδια για να πετύχετε στις πανελλήνιες και να συνεχίσετε το ταξίδι σας στον προγραμματισμό.

Η Python σας περιμένει να εξερευνήσετε τις δυνατότητές της!

📞 Τελευταίες Συμβουλές#

  1. Μη σταματήσετε μετά τις εξετάσεις - η Python είναι για τη ζωή!
  2. Κάντε projects που σας ενθουσιάζουν - η διασκέδαση είναι ο καλύτερος τρόπος μάθησης
  3. Μοιραστείτε τη γνώση - μάθετε άλλους και θα μάθετε και εσείς
  4. Μείνετε περίεργοι - υπάρχουν πάντα νέα πράγματα να μάθετε

Καλή επιτυχία στις πανελλήνιες και καλό κοδάρισμα! 🚀💻


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

Happy coding! 🐍✨

📋 Διαγωνίσματα Πανελληνίων - Πρακτική Εξάσκηση#

🏆 Διαγώνισμα Α' - Βασικές Έννοιες (2023)#

ΘΕΜΑ 1ο (25 μόρια)

Α1. Να γράψετε πρόγραμμα που διαβάζει την ηλικία ενός ατόμου και εμφανίζει κατάλληλο μήνυμα ανάλογα με την κατηγορία που ανήκει:

  • 0-12: "Παιδί"
  • 13-17: "Έφηβος"
  • 18-64: "Ενήλικας"
  • 65+: "Τρίτη ηλικία"

💡 Λύση Α1:

# Διάβασμα ηλικίας
try:
    age = int(raw_input("Εισάγετε την ηλικία: "))
    
    # Έλεγχος εγκυρότητας
    if age < 0:
        print "Η ηλικία δεν μπορεί να είναι αρνητική!"
    elif age <= 12:
        print "Παιδί"
    elif age <= 17:
        print "Έφηβος"
    elif age <= 64:
        print "Ενήλικας"
    else:
        print "Τρίτη ηλικία"
        
except ValueError:
    print "Σφάλμα: Εισάγετε έγκυρο αριθμό!"

Α2. Να γράψετε συνάρτηση calculate_discount(price, percentage) που υπολογίζει την τελική τιμή ενός προϊόντος μετά από έκπτωση.

💡 Λύση Α2:

def calculate_discount(price, percentage):
    """Υπολογισμός τελικής τιμής μετά από έκπτωση"""
    if percentage < 0 or percentage > 100:
        return "Σφάλμα: Το ποσοστό πρέπει να είναι 0-100%"
    
    discount_amount = price * (percentage / 100.0)
    final_price = price - discount_amount
    
    return final_price

# Δοκιμή
original_price = 100.0
discount_percent = 20

final = calculate_discount(original_price, discount_percent)
print "Αρχική τιμή: {:.2f}€".format(original_price)
print "Έκπτωση: {}%".format(discount_percent)
print "Τελική τιμή: {:.2f}€".format(final)

🏆 Διαγώνισμα Β' - Λίστες και Βρόχοι (2022)#

ΘΕΜΑ 2ο (35 μόρια)

Β1. Να γράψετε πρόγραμμα που:

  1. Διαβάζει 5 βαθμούς από το χρήστη
  2. Αποθηκεύει τους σε λίστα
  3. Υπολογίζει και εμφανίζει:
    • Μέσο όρο
    • Μέγιστο βαθμό
    • Πλήθος βαθμών επιτυχίας (≥10)

💡 Λύση Β1:

def grade_analyzer():
    """Ανάλυση 5 βαθμών"""
    grades = []
    
    # Διάβασμα 5 βαθμών
    for i in range(5):
        while True:
            try:
                grade = float(raw_input("Εισάγετε βαθμό {} (0-20): ".format(i + 1)))
                if 0 <= grade <= 20:
                    grades.append(grade)
                    break
                else:
                    print "Ο βαθμός πρέπει να είναι 0-20!"
            except ValueError:
                print "Εισάγετε έγκυρο αριθμό!"
    
    # Υπολογισμοί
    average = sum(grades) / len(grades)
    maximum = max(grades)
    passed_count = len([g for g in grades if g >= 10])
    
    # Εμφάνιση αποτελεσμάτων
    print "\n=== ΑΠΟΤΕΛΕΣΜΑΤΑ ==="
    print "Βαθμοί:", grades
    print "Μέσος όρος: {:.2f}".format(average)
    print "Μέγιστος βαθμός: {}".format(maximum)
    print "Βαθμοί επιτυχίας: {} από {}".format(passed_count, len(grades))
    
    # Κατάταξη επίδοσης
    if average >= 18:
        print "Άριστη επίδοση! 🏆"
    elif average >= 15:
        print "Πολύ καλή επίδοση! 👍"
    elif average >= 10:
        print "Καλή επίδοση! ✓"
    else:
        print "Χρειάζεται βελτίωση."

# Εκτέλεση
grade_analyzer()

Β2. Δίνεται η λίστα numbers = [12, 7, 3, 14, 9, 6, 11, 8]. Να γράψετε κώδικα που:

  1. Βρίσκει όλους τους ζυγούς αριθμούς
  2. Τους ταξινομεί σε φθίνουσα σειρά
  3. Εμφανίζει το αποτέλεσμα

💡 Λύση Β2:

def process_numbers():
    """Επεξεργασία λίστας αριθμών"""
    numbers = [12, 7, 3, 14, 9, 6, 11, 8]
    
    print "Αρχική λίστα:", numbers
    
    # Εύρεση ζυγών αριθμών
    even_numbers = []
    for num in numbers:
        if num % 2 == 0:
            even_numbers.append(num)
    
    print "Ζυγοί αριθμοί:", even_numbers
    
    # Ταξινόμηση σε φθίνουσα σειρά
    even_numbers.sort(reverse=True)
    print "Ταξινομημένοι φθίνουσα:", even_numbers
    
    # Εναλλακτικός τρόπος με list comprehension
    alternative = sorted([num for num in numbers if num % 2 == 0], reverse=True)
    print "Εναλλακτικός τρόπος:", alternative

# Εκτέλεση
process_numbers()

🏆 Διαγώνισμα Γ' - Συναρτήσεις και Strings (2021)#

ΘΕΜΑ 3ο (40 μόρια)

Γ1. Να γράψετε συνάρτηση analyze_text(text) που αναλύει ένα κείμενο και επιστρέφει dictionary με:

  • Πλήθος χαρακτήρων
  • Πλήθος λέξεων
  • Πλήθος προτάσεων (τελειώνουν σε ., !, ;)
  • Πιο συχνή λέξη

💡 Λύση Γ1:

def analyze_text(text):
    """Ανάλυση κειμένου"""
    if not text.strip():
        return {"error": "Κενό κείμενο!"}
    
    # Βασικές μετρήσεις
    char_count = len(text)
    word_count = len(text.split())
    
    # Μέτρηση προτάσεων
    sentence_endings = ['.', '!', ';']
    sentence_count = 0
    for char in text:
        if char in sentence_endings:
            sentence_count += 1
    
    # Εύρεση πιο συχνής λέξης
    words = text.lower().split()
    word_frequency = {}
    
    for word in words:
        # Καθαρισμός σημείων στίξης
        clean_word = word.strip('.,!;:')
        if clean_word:
            if clean_word in word_frequency:
                word_frequency[clean_word] += 1
            else:
                word_frequency[clean_word] = 1
    
    # Εύρεση μέγιστης συχνότητας
    most_frequent = ""
    max_frequency = 0
    for word, frequency in word_frequency.items():
        if frequency > max_frequency:
            max_frequency = frequency
            most_frequent = word
    
    return {
        "characters": char_count,
        "words": word_count,
        "sentences": sentence_count,
        "most_frequent_word": most_frequent,
        "frequency": max_frequency
    }

# Δοκιμή
sample_text = "Η Python είναι υπέροχη! Μου αρέσει η Python. Η Python είναι εύκολη."
result = analyze_text(sample_text)

print "=== ΑΝΑΛΥΣΗ ΚΕΙΜΕΝΟΥ ==="
print "Κείμενο:", sample_text
print "Χαρακτήρες:", result["characters"]
print "Λέξεις:", result["words"] 
print "Προτάσεις:", result["sentences"]
print "Πιο συχνή λέξη: '{}' ({} φορές)".format(
    result["most_frequent_word"], result["frequency"])

Γ2. Να γράψετε συνάρτηση generate_password(length, include_numbers=True) που δημιουργεί τυχαίο κωδικό με δεδομένο μήκος.

💡 Λύση Γ2:

import random
import string

def generate_password(length, include_numbers=True):
    """Δημιουργία τυχαίου κωδικού"""
    if length < 4:
        return "Σφάλμα: Το μήκος πρέπει να είναι τουλάχιστον 4"
    
    # Χαρακτήρες που μπορούμε να χρησιμοποιήσουμε
    letters = string.ascii_letters  # A-Z, a-z
    characters = letters
    
    if include_numbers:
        numbers = string.digits  # 0-9
        characters += numbers
    
    # Δημιουργία κωδικού
    password = ""
    for i in range(length):
        random_char = random.choice(characters)
        password += random_char
    
    return password

# Δοκιμές
print "Κωδικός 8 χαρακτήρων:", generate_password(8)
print "Κωδικός 12 χαρακτήρων:", generate_password(12)
print "Κωδικός μόνο γράμματα:", generate_password(10, include_numbers=False)

# Εναλλακτική υλοποίηση χωρίς import random
def simple_password(length):
    """Απλή δημιουργία κωδικού χωρίς random module"""
    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
    password = ""
    
    # Χρήση απλής μεθόδου για "τυχαιότητα"
    seed = len(chars)
    for i in range(length):
        index = (i * 7 + seed) % len(chars)
        password += chars[index]
        seed = (seed + 3) % len(chars)
    
    return password

print "Απλός κωδικός:", simple_password(8)

🏆 Διαγώνισμα Δ' - Αρχεία και Dictionaries (2020)#

ΘΕΜΑ 4ο (35 μόρια)

Δ1. Να γράψετε πρόγραμμα που διαχειρίζεται βαθμούς μαθητών:

  1. Διαβάζει από αρχείο "grades.txt" στη μορφή: Όνομα:Βαθμός
  2. Υπολογίζει στατιστικά ανά μαθητή
  3. Γράφει αποτελέσματα σε νέο αρχείο "results.txt"

💡 Λύση Δ1:

def student_grade_manager():
    """Διαχείριση βαθμών μαθητών από αρχείο"""
    
    def read_grades(filename):
        """Ανάγνωση βαθμών από αρχείο"""
        students = {}
        try:
            with open(filename, "r") as file:
                for line_num, line in enumerate(file, 1):
                    line = line.strip()
                    if not line or ':' not in line:
                        continue
                    
                    try:
                        name, grade_str = line.split(':')
                        grade = float(grade_str)
                        
                        if name not in students:
                            students[name] = []
                        students[name].append(grade)
                        
                    except ValueError:
                        print "Σφάλμα στη γραμμή {}: {}".format(line_num, line)
                        
        except IOError:
            print "Σφάλμα: Δεν βρέθηκε το αρχείο {}".format(filename)
            return {}
        
        return students
    
    def calculate_statistics(students):
        """Υπολογισμός στατιστικών"""
        results = {}
        
        for name, grades in students.items():
            if grades:
                average = sum(grades) / len(grades)
                maximum = max(grades)
                minimum = min(grades)
                passed = len([g for g in grades if g >= 10])
                
                results[name] = {
                    "grades": grades,
                    "average": average,
                    "max": maximum,
                    "min": minimum,
                    "passed_count": passed,
                    "total_count": len(grades),
                    "status": "ΕΠΙΤΥΧΙΑ" if average >= 10 else "ΑΠΟΤΥΧΙΑ"
                }
        
        return results
    
    def write_results(results, filename):
        """Εγγραφή αποτελεσμάτων σε αρχείο"""
        try:
            with open(filename, "w") as file:
                file.write("=== ΑΠΟΤΕΛΕΣΜΑΤΑ ΜΑΘΗΤΩΝ ===\n\n")
                
                for name, stats in results.items():
                    file.write("ΜΑΘΗΤΗΣ: {}\n".format(name))
                    file.write("Βαθμοί: {}\n".format(stats["grades"]))
                    file.write("Μέσος όρος: {:.2f}\n".format(stats["average"]))
                    file.write("Μέγιστος: {:.1f}\n".format(stats["max"]))
                    file.write("Ελάχιστος: {:.1f}\n".format(stats["min"]))
                    file.write("Επιτυχίες: {} από {}\n".format(
                        stats["passed_count"], stats["total_count"]))
                    file.write("Κατάσταση: {}\n".format(stats["status"]))
                    file.write("-" * 40 + "\n\n")
                
                # Γενικά στατιστικά
                all_averages = [stats["average"] for stats in results.values()]
                if all_averages:
                    class_average = sum(all_averages) / len(all_averages)
                    file.write("ΓΕΝΙΚΟΣ ΜΕΣΟΣ ΟΡΟΣ ΤΑΞΗΣ: {:.2f}\n".format(class_average))
                    
            print "Αποτελέσματα αποθηκεύτηκαν στο {}".format(filename)
            
        except IOError:
            print "Σφάλμα εγγραφής στο αρχείο {}".format(filename)
    
    # Κύρια εκτέλεση
    print "Ανάγνωση βαθμών..."
    students = read_grades("grades.txt")
    
    if students:
        print "Υπολογισμός στατιστικών..."
        results = calculate_statistics(students)
        
        print "Εγγραφή αποτελεσμάτων..."
        write_results(results, "results.txt")
        
        # Εμφάνιση σύντομου πίνακα
        print "\n=== ΣΥΝΟΨΗ ==="
        for name, stats in results.items():
            print "{}: Μ.Ο. {:.1f} - {}".format(
                name, stats["average"], stats["status"])
    else:
        print "Δεν βρέθηκαν δεδομένα μαθητών."

# Δημιουργία δείγματος αρχείου για δοκιμή
def create_sample_file():
    """Δημιουργία δείγματος αρχείου grades.txt"""
    sample_data = [
        "Γιάννης:18.5",
        "Μαρία:16.0", 
        "Πέτρος:12.5",
        "Γιάννης:17.0",
        "Μαρία:19.5",
        "Άννα:8.5",
        "Πέτρος:15.0",
        "Άννα:11.0"
    ]
    
    try:
        with open("grades.txt", "w") as file:
            for line in sample_data:
                file.write(line + "\n")
        print "Δημιουργήθηκε δείγμα αρχείου grades.txt"
    except IOError:
        print "Σφάλμα δημιουργίας αρχείου"

# Εκτέλεση
create_sample_file()  # Δημιουργία δείγματος
student_grade_manager()  # Εκτέλεση κύριου προγράμματος

🏆 Διαγώνισμα Ε' - Ολοκληρωμένη Άσκηση (2019)#

ΘΕΜΑ 5ο (50 μόρια)

Ε1. Να αναπτύξετε ολοκληρωμένο σύστημα διαχείρισης βιβλιοθήκης με τις εξής λειτουργίες:

  1. Καταχώρηση βιβλίου (τίτλος, συγγραφέας, ISBN, διαθεσιμότητα)
  2. Αναζήτηση βιβλίου (με τίτλο ή συγγραφέα)
  3. Δανεισμός/Επιστροφή βιβλίου
  4. Στατιστικά (συνολικά βιβλία, διαθέσιμα, δανεισμένα)
  5. Αποθήκευση σε αρχείο και φόρτωση από αρχείο

💡 Πλήρης Λύση Ε1:

def library_management_system():
    """Ολοκληρωμένο σύστημα διαχείρισης βιβλιοθήκης"""
    
    # Αρχικοποίηση βάσης δεδομένων
    library = {}
    
    def add_book():
        """Προσθήκη νέου βιβλίου"""
        print "\n=== ΠΡΟΣΘΗΚΗ ΒΙΒΛΙΟΥ ==="
        
        title = raw_input("Τίτλος: ").strip()
        if not title:
            print "Ο τίτλος δεν μπορεί να είναι κενός!"
            return
        
        author = raw_input("Συγγραφέας: ").strip()
        if not author:
            print "Ο συγγραφέας δεν μπορεί να είναι κενός!"
            return
        
        isbn = raw_input("ISBN: ").strip()
        if not isbn:
            print "Το ISBN δεν μπορεί να είναι κενό!"
            return
        
        if isbn in library:
            print "Βιβλίο με αυτό το ISBN υπάρχει ήδη!"
            return
        
        library[isbn] = {
            "title": title,
            "author": author,
            "available": True,
            "borrower": None,
            "borrow_date": None
        }
        
        print "Βιβλίο προστέθηκε επιτυχώς!"
    
    def search_books():
        """Αναζήτηση βιβλίων"""
        print "\n=== ΑΝΑΖΗΤΗΣΗ ΒΙΒΛΙΩΝ ==="
        
        if not library:
            print "Η βιβλιοθήκη είναι κενή!"
            return
        
        search_term = raw_input("Αναζήτηση (τίτλος ή συγγραφέας): ").lower().strip()
        if not search_term:
            print "Εισάγετε όρο αναζήτησης!"
            return
        
        found = False
        for isbn, book in library.items():
            if (search_term in book["title"].lower() or 
                search_term in book["author"].lower()):
                
                status = "✓ Διαθέσιμο" if book["available"] else "✗ Δανεισμένο"
                print "\nISBN: {}".format(isbn)
                print "Τίτλος: {}".format(book["title"])
                print "Συγγραφέας: {}".format(book["author"])
                print "Κατάσταση: {}".format(status)
                
                if not book["available"]:
                    print "Δανείστηκε από: {}".format(book["borrower"])
                
                found = True
        
        if not found:
            print "Δεν βρέθηκαν βιβλία!"
    
    def borrow_book():
        """Δανεισμός βιβλίου"""
        print "\n=== ΔΑΝΕΙΣΜΟΣ ΒΙΒΛΙΟΥ ==="
        
        if not library:
            print "Η βιβλιοθήκη είναι κενή!"
            return
        
        isbn = raw_input("ISBN βιβλίου: ").strip()
        if isbn not in library:
            print "Βιβλίο με αυτό το ISBN δεν υπάρχει!"
            return
        
        if not library[isbn]["available"]:
            print "Το βιβλίο είναι ήδη δανεισμένο από: {}".format(
                library[isbn]["borrower"])
            return
        
        borrower = raw_input("Όνομα δανειζόμενου: ").strip()
        if not borrower:
            print "Το όνομα δεν μπορεί να είναι κενό!"
            return
        
        library[isbn]["available"] = False
        library[isbn]["borrower"] = borrower
        library[isbn]["borrow_date"] = "2025-07-11"  # Προσομοίωση ημερομηνίας
        
        print "Το βιβλίο '{}' δανείστηκε επιτυχώς στον/στην {}!".format(
            library[isbn]["title"], borrower)
    
    def return_book():
        """Επιστροφή βιβλίου"""
        print "\n=== ΕΠΙΣΤΡΟΦΗ ΒΙΒΛΙΟΥ ==="
        
        isbn = raw_input("ISBN βιβλίου: ").strip()
        if isbn not in library:
            print "Βιβλίο με αυτό το ISBN δεν υπάρχει!"
            return
        
        if library[isbn]["available"]:
            print "Το βιβλίο δεν είναι δανεισμένο!"
            return
        
        borrower = library[isbn]["borrower"]
        library[isbn]["available"] = True
        library[isbn]["borrower"] = None
        library[isbn]["borrow_date"] = None
        
        print "Το βιβλίο '{}' επιστράφηκε επιτυχώς από τον/την {}!".format(
            library[isbn]["title"], borrower)
    
    def show_statistics():
        """Εμφάνιση στατιστικών"""
        print "\n=== ΣΤΑΤΙΣΤΙΚΑ ΒΙΒΛΙΟΘΗΚΗΣ ==="
        
        if not library:
            print "Η βιβλιοθήκη είναι κενή!"
            return
        
        total_books = len(library)
        available_books = len([b for b in library.values() if b["available"]])
        borrowed_books = total_books - available_books
        
        print "Συνολικά βιβλία: {}".format(total_books)
        print "Διαθέσιμα βιβλία: {}".format(available_books)
        print "Δανεισμένα βιβλία: {}".format(borrowed_books)
        
        if borrowed_books > 0:
            print "\nΔανεισμένα βιβλία:"
            for isbn, book in library.items():
                if not book["available"]:
                    print "- '{}' (από: {})".format(book["title"], book["borrower"])
    
    def save_to_file():
        """Αποθήκευση σε αρχείο"""
        print "\n=== ΑΠΟΘΗΚΕΥΣΗ ==="
        
        try:
            filename = raw_input("Όνομα αρχείου (π.χ. library.txt): ").strip()
            if not filename:
                filename = "library.txt"
            
            with open(filename, "w") as file:
                file.write("=== ΒΙΒΛΙΟΘΗΚΗ ===\n\n")
                
                for isbn, book in library.items():
                    file.write("ISBN: {}\n".format(isbn))
                    file.write("Τίτλος: {}\n".format(book["title"]))
                    file.write("Συγγραφέας: {}\n".format(book["author"]))
                    file.write("Διαθέσιμο: {}\n".format("Ναι" if book["available"] else "Όχι"))
                    
                    if not book["available"]:
                        file.write("Δανείστηκε από: {}\n".format(book["borrower"]))
                        file.write("Ημερομηνία δανεισμού: {}\n".format(book["borrow_date"]))
                    
                    file.write("-" * 40 + "\n\n")
            
            print "Δεδομένα αποθηκεύτηκαν στο αρχείο '{}'!".format(filename)
            
        except IOError:
            print "Σφάλμα κατά την αποθήκευση!"
    
    def load_sample_data():
        """Φόρτωση δείγματος δεδομένων"""
        sample_books = [
            ("978-960-14-0001-1", "Το Ταξίδι", "Νίκος Καζαντζάκης"),
            ("978-960-14-0002-8", "Python για Όλους", "Γιάννης Παπαδόπουλος"),
            ("978-960-14-0003-5", "Ιστορία της Ελλάδας", "Μαρία Αντωνίου"),
            ("978-960-14-0004-2", "Μαθηματικά Γ' Λυκείου", "Πέτρος Γεωργίου")
        ]
        
        for isbn, title, author in sample_books:
            library[isbn] = {
                "title": title,
                "author": author,
                "available": True,
                "borrower": None,
                "borrow_date": None
            }
        
        print "Φορτώθηκαν {} δείγματα βιβλίων!".format(len(sample_books))
    
    # Κύριο μενού
    load_sample_data()  # Φόρτωση αρχικών δεδομένων
    
    while True:
        print "\n" + "="*50
        print "          ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΒΙΒΛΙΟΘΗΚΗΣ"
        print "="*50
        print "1. Προσθήκη βιβλίου")
        print "2. Αναζήτηση βιβλίων")
        print "3. Δανεισμός βιβλίου")
        print "4. Επιστροφή βιβλίου")
        print "5. Στατιστικά")
        print "6. Αποθήκευση σε αρχείο")
        print "7. Έξοδος")
        print "-"*50
        
        choice = raw_input("Επιλογή (1-7): ").strip()
        
        if choice == "1":
            add_book()
        elif choice == "2":
            search_books()
        elif choice == "3":
            borrow_book()
        elif choice == "4":
            return_book()
        elif choice == "5":
            show_statistics()
        elif choice == "6":
            save_to_file()
        elif choice == "7":
            print "\nΕυχαριστούμε που χρησιμοποιήσατε το σύστημα!"
            break
        else:
            print "Λάθος επιλογή! Δοκιμάστε ξανά."

# Εκτέλεση του συστήματος
# library_management_system()

📊 Συμβουλές για Αντιμετώπιση Διαγωνισμάτων#

🕐 Χρονοδιάγραμμα Εξέτασης (3 ώρες)#

Λεπτά 0-15:   📖 Ανάγνωση όλων των θεμάτων
Λεπτά 15-30:  ✏️ Σχεδιασμός λύσεων 
Λεπτά 30-150: 💻 Γραφή κώδικα
Λεπτά 150-165: 🔍 Έλεγχος και διορθώσεις
Λεπτά 165-180:  Τελικός έλεγχος

🎯 Στρατηγική Βαθμολογίας#

  1. Ξεκινήστε από εύκολα θέματα (25-30 μόρια εύκολα)
  2. Γράψτε μερικό κώδικα αν δεν τελειώσετε (παίρνετε μερικούς βαθμούς)
  3. Σχολιάστε τη λογική σας (οι βαθμολογητές βλέπουν τη σκέψη)
  4. Ελέγξτε τη σύνταξη (εσοχές, άνω-κάτω τελείες, παρενθέσεις)

💡 Last-Minute Tips#

  • Κρατήστε νερό και σοκολάτα για ενέργεια
  • Μην πανικοβληθείτε αν κολλήσετε - προχωρήστε στο επόμενο
  • Γράψτε καθαρά - η αναγνωσιμότητα μετράει
  • Δοκιμάστε τον κώδικα στο μυαλό σας με παραδείγματα

🎓 Τελική Ευχή#

Θυμηθείτε: Αυτά τα διαγωνίσματα είναι εξάσκηση! Στις πραγματικές πανελλήνιες θα είστε ακόμη καλύτεροι!

Καλή επιτυχία! 🍀💪