Skip to main content

1. Εισαγωγή στην Python

Μεταβλητές και Λίστες

Προαπαιτούμενα

Python

Βεβαιωθείτε ότι έχετε κατεβάσει μια έκδοση της python στον υπολογιστή σας.

Εάν δεν το κάνατε ακόμα, πηγαίνετε στον Οδηγός Εγκατάστασης που βρίσκεται στην αρχική του μαθήματος.

Development Environment

Για αυτό το course θα χρησιμοποιήσουμε το VS Code (Visual Studio Code) ως editor. Είναι δωρεάν, lightweight και έχει εξαιρετική υποστήριξη για Python.

Εγκατάσταση VS Code:

  1. Κατεβάστε το VS Code και τρέξτε την εγκατάσταση
  2. Εγκαταστήστε το Python extension (από τον Microsoft) python-ext-image

1.1 Ξεκινώντας με την Python

Τι είναι η Python;

Η Python είναι μια high-level γλώσσα προγραμματισμού που δημιουργήθηκε από τον Guido van Rossum στις αρχές της δεκαετίας του 1990. Η φιλοσοφία της Python είναι να κάνει τον κώδικα πιο εύκολο στο διάβασμα, επομένως και στη χρήση του. Αυτός είναι και ο λόγος που είναι τόσο δημοφιλής μεταξύ των επιστημόνων, μηχανικών και επαγγελματιών.

Το Πρώτο μας Πρόγραμμα

Ας δημιουργήσουμε το κλασικό "Hello World" πρόγραμμα:

print("Γεια σου!")

Output:

Γεια σου!

Η συνάρτηση print() είναι built-in function της Python και μπορεί να εκτυπώσει ένα μήνυμα στην οθόνη (terminal). Θα πρέπει οι χαρκακτήρες που θέλουμε να εμφανιστούν να περικλείονται με διπλά "" (double quotes) ή μονά εισαγωγικά '' (single quotes).

warning

Αν για παράδειγμα αφαιρούσαμε τα "" θα εμφανιζόταν μήνυμα λάθους!

print(Γεια σου!)
File "<stdin>", line 1
print(Γεια σου!)
^^^^^^^^
SyntaxError: invalid syntax.

Θα πρέπει λοιπόν όταν θέλουμε να εμφανίσουμε οποιοδήποτε χαρακτήρα να χρησιμοποιούμε τα "" / ''.

Δοκίμασε το!

Προσπάθησε να τρέξεις την παραπάνω παράδειγμα στο δικό σου pc χρησιμοποιώντας το VS Code.

  1. Δημιούργησε ένα αρχείο main.py

    create-file-image

  2. Χρησιμοποίησε την εντολή print εκτυπώνοντας ένα μήνυμα.

  3. Τρέξε το πρόγραμμα!

    run-file-image

Στην συνέχεια, αφαίρεσε και εσύ τα "" ή μόνο το ένα " και δες το μήνυμα που βγάζει.

Είναι πολύ σημαντικό να μάθεις να διαβάζεις τα σφάλματα από το terminal! Εάν, κάτι πάει στραβά το μήνυμα σφάλματος είναι ο οδηγός για την λύση του προβλήματος!

1.2 Μεταβλητές και τα Data Types

Τι είναι οι Μεταβλητές;

Οι μεταβλητές είναι αποθηκευτικοί χώροι και τους χρησιμοποιούμε για να αποθηκεύσουμε προσωρινά δεδομένα. Ο ορισμός μιας μεταβλητής αποτελείται μόνο από το όνομα της, τον τελεστή = και την τιμή της. Δεν χρειάζεται να δηλώσουμε τι τύπος δεδομένου είναι η μεταβλητή μας όπως κάνουμε σε άλλες γλώσσες προγραμματισμού.

# Δημιουργία μεταβλητών
name = "Γιάννης" # String (κείμενο)
age = 25 # Integer (ακέραιος αριθμός)
height = 1.75 # Float (δεκαδικός αριθμός)
is_student = True # Boolean (True/False)

print("Όνομα:", name)
print("Ηλικία:", age)
print("Ύψος:", height, "μέτρα")
print("Είναι φοιτητής;", is_student)

Παρατήρησες στο παραπάνω παράδειγμα πως εμφανίζουμε ταυτόχρονα μηνύματα και μεταβλητές;

Χρειάζεται να διαχωρίσουμε το μήνυμα από την μεταβλητή με ένα απλό κόμμα ,. Υπάρχουν και άλλοι τρόποι, αλλά θα τους δούμε παρακάτω.

Κανόνες ονοματοδοσίας των μεταβλητών

Η Python ακολουθεί συγκεκριμένες συμβάσεις (naming conventions) για την ονοματοδοσία των μεταβλητών:

Για παράδειγμα:

# Χρησιμοποιούμε μικρά γράμματα και κάτω παύλες _ (snake case) για variable names
first_name = "Μαρία"
user_age = 30
total_cost = 45.50

# Descriptive names (περιγραφικά ονόματα)
temperature_celsius = 22.5
student_count = 150

Αποφεύγετε:

# Μη περιγραφικά ονόματα
x = "Μαρία" # Τι είναι το x;
data = 30 # Τι data;
num = 45.50 # Τι αριθμός;

# Reserved keywords της Python
print = "test" # Μη χρησιμοποιείτε built-in functions
class = "A" # Μη χρησιμοποιείτε keywords

Βασικά Data Types

1. Integers (int)

Ακέραιοι αριθμοί:

year = 2025
population = 10700000 # Πληθυσμός Ελλάδας
temperature = -5 # Αρνητικός αριθμός

print("Έτος:", year)
print("Πληθυσμός:", population)

2. Floating Point Numbers (float)

Δεκαδικοί αριθμοί:

pi = 3.14159
price = 19.99
percentage = 0.85

print("Η τιμή του π:", pi)
print("Τιμή προϊόντος: €", price)
print("Ποσοστό:", percentage * 100, "%")

3. Strings (str)

Κείμενο - οτιδήποτε μέσα σε εισαγωγικά:

message = "Καλησπέρα!"
email = "user@example.com"
description = 'Αυτό είναι ένα string με single quotes'

# Multi-line strings
long_text = """Αυτό είναι ένα
πολύ μεγάλο κείμενο
που εκτείνεται σε πολλές γραμμές"""

print(message)
print("Email:", email)

4. Booleans (bool)

True ή False values:

is_raining = True
has_umbrella = False
is_weekend = True

print("Βρέχει;", is_raining)
print("Έχει ομπρέλα;", has_umbrella)
Δοκίμασε το!

Δοκίμασε να δημιουργήσεις τις δικές σου μεταβλητές με διαφορετικά data types και να τις εκτυπώσεις χρησιμοποιώντας την print().

Μετατροπή Τύπων Δεδομένων

Συχνά χρειάζεται να μετατρέψουμε έναν τύπο δεδομένων σε άλλον:

# String σε number
age_str = "25" # Αυτό είναι string
age_int = int(age_str) # Μετατροπή σε integer
print("Ηλικία + 5:", age_int + 5) # Τώρα μπορούμε να κάνουμε πράξεις

# Number σε string
score = 95
score_str = str(score)
message = "Η βαθμολογία σας είναι: " + score_str

# Float σε integer (προσοχή: χάνει τα δεκαδικά)
price = 19.99
price_rounded = int(price) # Θα γίνει 19
print("Στρογγυλοποιημένη τιμή:", price_rounded)

# String σε boolean (προσοχή στη συμπεριφορά)
bool_val = bool("False") # Θα είναι True! (όχι αυτό που περιμένετε)
empty_str = bool("") # Θα είναι False

Γιατί το bool("False") είναι True; Στην Python, οποιοδήποτε μη κενό string θεωρείται True, ενώ μόνο το κενό string "" θεωρείται False.

Προσοχή

Όταν μετατρέπετε float σε int, η Python κόβει τα δεκαδικά ψηφία χωρίς στρογγυλοποίηση. Το 19.99 γίνεται 19, όχι 20.


1.3 Αριθμητικές Πράξεις

Η Python υποστηρίζει όλες τις βασικές αριθμητικές πράξεις:

# Βασικές πράξεις
a = 10
b = 3

addition = a + b # Πρόσθεση: 13
subtraction = a - b # Αφαίρεση: 7
multiplication = a * b # Πολλαπλασιασμός: 30
division = a / b # Διαίρεση: 3.333...
integer_division = a // b # Ακέραια διαίρεση: 3
modulo = a % b # Υπόλοιπο διαίρεσης: 1
power = a ** b # Δύναμη: 1000

print(f"Πρόσθεση: {a} + {b} = {addition}")
print(f"Διαίρεση: {a} / {b} = {division}")
print(f"Υπόλοιπο: {a} % {b} = {modulo}")

Παράδειγμα: Υπολογισμός BMI

# Δεδομένα χρήστη
weight_kg = 70 # Βάρος σε κιλά
height_m = 1.75 # Ύψος σε μέτρα

# Υπολογισμός BMI (Body Mass Index)
bmi = weight_kg / (height_m ** 2)

print(f"Βάρος: {weight_kg} kg")
print(f"Ύψος: {height_m} m")
print(f"BMI: {bmi:.2f}") # Στρογγυλοποίηση στα 2 δεκαδικά
Δοκίμασε το!

Δοκίμασε να αλλάξεις τις τιμές του weight_kg και height_m και δες πώς αλλάζει το BMI.

Δοκίμασε το!

Τώρα μπορείς να φτιάξεις ένα πρόγραμμα που μετατρέπει τους βαθμούς κελσίου σε φαρενάιτ και αντίστροφα;

Δίνεται ο τύπος:

C=(F32)×5/9C = (F - 32) \times 5/9
# Βαθμοί Κελσίου
celsius = 25
# Μετατροπή σε Φαρενάιτ

1.4 String Operations

Τα strings είναι πολύ χρήσιμα και πολύ εύχρηστα! Ας δούμε τι μπορούμε να κάνουμε με αυτά:

String Concatenation (Συνένωση)

Συχνά θέλουμε να ενώσουμε (concatenate) δύο ή περισσότερα strings. Για να το πετύχουμε αυτό, χρησιμοποιούμε τον τελεστή +:

first_name = "Μαρία"
last_name = "Παπαδοπούλου"

# Συνένωση με +
full_name = first_name + " " + last_name
print("Πλήρες όνομα:", full_name)

F-strings (Formatted Strings)

Όταν θέλουμε να ενσωματώσουμε μεταβλητές μέσα σε μηνύματα, τα f-strings είναι ο πιο εύκολος και καθαρός τρόπος:

full_name = "Γιάννης Κωνσταντίνου"
age = 28
height = 1.68
print(f"O {full_name} είναι {age} ετών και έχει ύψος {height} μέτρα.")

Χρήσιμες String Methods

text = "  Αυτό είναι ένα παράδειγμα κειμένου  "

# Καθαρισμός whitespace
clean_text = text.strip() # Αφαιρεί spaces από αρχή/τέλος
print(f"'{clean_text}'")

# Αλλαγή case
upper_text = text.upper() # ΚΕΦΑΛΑΙΑ
lower_text = text.lower() # μικρά

print("Κεφαλαία:", upper_text)
print("Μικρά:", lower_text)

# Αντικατάσταση
new_text = text.replace("παράδειγμα", "δείγμα")
print("Αντικατάσταση:", new_text)

# Χωρισμός σε λίστα
words = text.strip().split(" ") # Χωρίζει στα spaces
print("Λέξεις:", words)

Slicing

Μερικές φορές θέλουμε να πάρουμε μόνο ένα μέρος του string. Αυτό γίνεται για να διαχωρίσουμε ή να εξάγουμε συγκεκριμένους χαρακτήρες:

Στο παράδειγμα παρακάτω παίρνουμε τους πρώτους 6 χαρακτήρες, δηλώνοντας το εύρος με 0:6 (από τον 0ο έως τον 5ο). Στο δεύτερο παράδειγμα παίρνουμε τους υπόλοιπους από τον 7ο χαρακτήρα μέχρι το τέλος με 7:.

message = "Python Programming"

# Πρώτοι 6 χαρακτήρες
first_part = message[0:6] # "Python"
print("Πρώτο μέρος:", first_part)

# Τελευταίοι 11 χαρακτήρες
second_part = message[7:] # "Programming"
print("Δεύτερο μέρος:", second_part)
Δοκίμασε το!

Δοκίμασε να δημιουργήσεις ένα πρόγραμμα που:

  1. Αποθηκεύει το όνομά σου σε μια μεταβλητή
  2. Αποθηκεύει την ηλικία σου σε μια άλλη μεταβλητή
  3. Εκτυπώνει ένα μήνυμα χρησιμοποιώντας f-string που να λέει: "Γεια σου, είμαι [όνομά σου] και είμαι [ηλικία σου] ετών."
  4. Χρησιμοποιεί string methods για να εμφανίσει το όνομά σου σε κεφαλαία και την ηλικία σου ως string.
Δοκίμασε το!

Τώρα δοκίμασε να πειραματιστείς με slicing. Δημιούργησε ένα πρόγραμμα που:

  1. Αποθηκεύει μια πρόταση σε μια μεταβλητή
  2. Χρησιμοποιεί slicing για να πάρει και να εκτυπώσει:
    • Τους πρώτους 5 χαρακτήρες
    • Τους τελευταίους 5 χαρακτήρες
    • Από τον 3ο έως τον 8ο χαρακτήρα

1.5 Εισαγωγή στις Λίστες

Τι είναι οι Λίστες;

Οι λίστες είναι μια συλλογή στοιχείων. Είναι πολύ χρήσιμες όταν θέλουμε να αποθηκεύσουμε πολλά δεδομένα σε μια μεταβλητή. Σκεφτείτε μια λίστα με ψώνια, μια λίστα με ονόματα φίλων ή μια λίστα με βαθμολογίες. Επίσης, μπορούν να περιέχουν διαφορετικούς τύπους δεδομένων (strings, integers, floats, booleans). Ορίζονται με αγκύλες [] και τα στοιχεία διαχωρίζονται με κόμμα ,.

# Δημιουργία λίστας
cities = ["Αθήνα", "Θεσσαλονίκη", "Πάτρα", "Ηράκλειο"]
numbers = [1, 5, 10, 15, 20]
mixed_list = ["Python", 2025, True, 3.14]

print("Πόλεις:", cities)
print("Αριθμοί:", numbers)
print("Μικτή λίστα:", mixed_list)

Πότε χρησιμοποιούμε Λίστες;

Οι λίστες είναι χρήσιμες όταν:

  • Έχουμε πολλά παρόμοια δεδομένα (π.χ. ονόματα μαθητών)
  • Θέλουμε να κρατήσουμε τη σειρά των στοιχείων (π.χ. λίστα αναμονής)
  • Χρειαζόμαστε να προσθέσουμε ή αφαιρέσουμε στοιχεία (π.χ. καλάθι eshop)

Πρόσβαση σε Στοιχεία Λίστας

Η πρόσβαση σε στοιχεία λίστας γίνεται μέσω του index (δείκτη) που ξεκινάει από το 0. Μπορούμε επίσης να χρησιμοποιήσουμε αρνητικούς δείκτες για να ξεκινήσουμε από το τέλος της λίστας.

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

first_fruit = fruits[0] # "μήλο"
second_fruit = fruits[1] # "μπανάνα"
last_fruit = fruits[-1] # "σταφύλι" (τελευταίο)
second_last = fruits[-2] # "πορτοκάλι"

print("Πρώτο φρούτο:", first_fruit)
print("Τελευταίο φρούτο:", last_fruit)

Μέγεθος Λίστας

Αν θέλουμε να μάθουμε πόσα στοιχεία έχει μια λίστα, χρησιμοποιούμε την built-in function len().

# Πόσα στοιχεία έχει η λίστα;
list_length = len(fruits)
print("Αριθμός φρούτων:", list_length)

Τροποποίηση Λίστας

Η Python παρέχει διάφορους τρόπους για να τροποποιήσουμε μια λίστα. Η πιο συνηθισμένη μέθοδος είναι η append() για να προσθέσουμε στοιχεία στο τέλος της λίστας. H insert() μας επιτρέπει να προσθέσουμε ένα στοιχείο σε μια συγκεκριμένη θέση. Η remove() αφαιρεί το πρώτο στοιχείο που ταιριάζει με την τιμή που δίνουμε.

shopping_list = ["γάλα", "ψωμί", "αυγά"]
print("Αρχική λίστα:", shopping_list)

# Προσθήκη στοιχείου στο τέλος
shopping_list.append("τυρί")
print("Μετά την προσθήκη:", shopping_list)

# Προσθήκη σε συγκεκριμένη θέση
shopping_list.insert(1, "βούτυρο") # Στη θέση 1
print("Μετά το insert:", shopping_list)

# Αφαίρεση στοιχείου
shopping_list.remove("αυγά") # Αφαιρεί το πρώτο στοιχείο "αυγά"
print("Μετά την αφαίρεση:", shopping_list)

# Αλλαγή στοιχείου
shopping_list[0] = "αμυγδαλογάλα" # Αλλάζει το πρώτο στοιχείο
print("Τελική λίστα:", shopping_list)
Δοκίμασε το!

Δοκίμασε να δημιουργήσεις μια λίστα με τα ονόματα 5 φίλων σου και να εκτυπώσεις:

  1. Το πρώτο και το τελευταίο όνομα
  2. Τον αριθμό των φίλων σου
  3. Να προσθέσεις ένα νέο φίλο στο τέλος της λίστας
  4. Να αφαιρέσεις έναν φίλο από τη λίστα

Αφού το κάνεις, προσπάθησε να προσθέσεις έναν φίλο στη δεύτερη θέση της λίστας. Παρατήρησε πώς αλλάζει η σειρά των ονομάτων!

List Slicing

Όπως και στα strings, μπορούμε να πάρουμε κομμάτι από την λίστα χρησιμοποιώντας slicing.

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

# Πρώτα 5 στοιχεία
first_five = numbers[0:5] # [0, 1, 2, 3, 4]
print("Πρώτα πέντε:", first_five)

# Από το 3ο έως το 7ο
middle_part = numbers[3:7] # [3, 4, 5, 6]
print("Μεσαία μέρος:", middle_part)

# Κάθε δεύτερο στοιχείο
every_second = numbers[::2] # [0, 2, 4, 6, 8]
print("Κάθε δεύτερο:", every_second)

# Αντίστροφη σειρά
reversed_list = numbers[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print("Αντίστροφα:", reversed_list)

Στα τελευταία δύο παραδείγματα, το ::2 σημαίνει "πάρε κάθε δεύτερο στοιχείο" (βήμα 2) και το [::-1] σημαίνει "πάρε όλα τα στοιχεία με αντίστροφη σειρά". Πως συμβαίνει αυτό; Το -1 σημαίνει με βήμα -1, δηλαδή ξεκινάμε από το τέλος και πηγαίνουμε προς την αρχή.

Δοκίμασε το!

Δοκίμασε να δημιουργήσεις μια λίστα με τους αριθμούς από το 1 έως το 20 και να εκτυπώσεις:

  1. Τα πρώτα 10 στοιχεία
  2. Τα τελευταία 5 στοιχεία
  3. Κάθε τρίτο στοιχείο
  4. Την λίστα σε αντίστροφη σειρά

1.7. Built-in Συναρτήσεις

Η Python έχει πολλές built-in functions που μας βοηθούν να κάνουμε διάφορες εργασίες πιο εύκολα.

numbers = [10, 20, 30, 40, 50]
print("Λίστα αριθμών:", numbers)
print("Μήκος λίστας:", len(numbers)) # Μέγεθος λίστας
print("Μέγιστος αριθμός:", max(numbers)) # Μέγιστο
print("Ελάχιστος αριθμός:", min(numbers)) # Ελάχιστο
print("Άθροισμα αριθμών:", sum(numbers)) # Άθροισμα

1.7. Πρόβλημα: Διαχείριση Βαθμολογιών 🤔

Περιγραφή προβλήματος: Ένας καθηγητής θέλει να διαχειριστεί τις βαθμολογίες των μαθητών του. Πρώτα, θέλει να υπολογίσει τον μέσο όρο των βαθμολογιών. Στην συνέχεια, να υπολογίσει τον καλύτερο και τον χειρότερο βαθμό. Επίσης, θέλει να μπορεί να προσθέτει νέες βαθμολογίες στην λίστα. Τέλος, θέλει να δει τον ενημερωμένο μέσο όρο μετά την προσθήκη νέων βαθμολογιών.

# Δεδομένα μαθητή
student_name = "Αλέξανδρος Κωνσταντίνου"
subject = "Μαθηματικά"

# Βαθμολογίες σε διαφορετικές εξετάσεις
grades = [18.5, 16.0, 19.5, 17.0, 20.0]

print(f"Μαθητής: {student_name}")
print(f"Μάθημα: {subject}")
print(f"Βαθμολογίες: {grades}")

# 1. Υπολογισμοί
# Ο ΚΩΔΙΚΑΣ ΕΔΩ!


print(f"Συνολικές εξετάσεις: {total_grades}")
print(f"Άθροισμα βαθμών: {sum_grades}")
print(f"Μέσος όρος: {average_grade:.2f}")

# 2. Εύρεση καλύτερης και χειρότερης επίδοσης
# Ο ΚΩΔΙΚΑΣ ΕΔΩ!

print(f"Καλύτερος βαθμός: {best_grade}")
print(f"Χειρότερος βαθμός: {worst_grade}")

# 3. Προσθήκη νέου βαθμού
# Ο ΚΩΔΙΚΑΣ ΕΔΩ!
print(f"\nΜετά την προσθήκη νέου βαθμού: {grades}")

# 4. Ενημερωμένος μέσος όρος
# Ο ΚΩΔΙΚΑΣ ΕΔΩ!
print(f"Νέος μέσος όρος: {new_average:.2f}")

Output:

Μαθητής: Αλέξανδρος Κωνσταντίνου
Μάθημα: Μαθηματικά
Βαθμολογίες: [18.5, 16.0, 19.5, 17.0, 20.0]

Συνολικές εξετάσεις: 5
Άθροισμα βαθμών: 91.0
Μέσος όρος: 18.20

Καλύτερος βαθμός: 20.0
Χειρότερος βαθμός: 16.0

Μετά την προσθήκη νέου βαθμού: [18.5, 16.0, 19.5, 17.0, 20.0, 18.0]
Νέος μέσος όρος: 18.17

1.7 Σύνοψη

💡 Τι μάθαμε μέχρι τώρα;

  1. Naming Conventions: Χρησιμοποιείτε περιγραφικά ονόματα μεταβλητών σε μικρά και κάτω παύλες (snake_case)
  2. Comments: Προσθέτετε comments για να εξηγείτε το "γιατί", όχι το "τι"
  3. Type Conversion: Προσέχετε τις μετατροπές τύπων - δεν είναι πάντα αυτό που περιμένετε
  4. F-strings: Προτιμάτε f-strings για εκτύπωση μεταβλητών μέσα σε κείμενο
  5. Lists: Χρησιμοποιείτε λίστες για να οργανώνετε δεδομένα και να κάνετε επαναλαμβανόμενες εργασίες πιο εύκολες