Αποφάσεις στην Python
if, elif, else και λογικές συνθήκες.
35 λεπτά
Θα μάθεις να
- Να γράφεις δομές επιλογής με if, elif και else, με σωστή εσοχή και άνω-κάτω τελεία.
- Να χρησιμοποιείς τους τελεστές σύγκρισης και να ξεχωρίζεις το == από το =.
- Να γράφεις σύνθετες συνθήκες με and, or και not.
- Να εξηγείς γιατί η σειρά των elif αλλάζει το αποτέλεσμα.
Ένα πρόγραμμα που αποφασίζει
Τα προγράμματα του προηγούμενου μαθήματος έκαναν πάντα τα ίδια βήματα, με την ίδια σειρά. Στη ζωή όμως οι οδηγίες έχουν «αν»: αν βρέχει, πάρε ομπρέλα· αλλιώς, γυαλιά ηλίου.
Στον ψευδοκώδικα της Β΄ αυτό λεγόταν δομή επιλογής και γραφόταν ΑΝ … ΤΟΤΕ … ΑΛΛΙΩΣ … ΤΕΛΟΣ_ΑΝ. Στην Python γράφεται με τις λέξεις if, elif και else.
n = int(input("Δώσε ακέραιο: "))
if n % 2 == 0:
print(n, "είναι άρτιος")
else:
print(n, "είναι περιττός")
Με είσοδο 7:
Δώσε ακέραιο: 7
7 είναι περιττός
Το n % 2 είναι το υπόλοιπο της διαίρεσης με το . Οι άρτιοι αφήνουν υπόλοιπο , οι περιττοί .
Άνω-κάτω τελεία και εσοχή
Δύο λεπτομέρειες που η Python δεν συγχωρεί:
- Η γραμμή του
if(και τουelif, και τουelse) τελειώνει με άνω-κάτω τελεία:. - Οι εντολές που ανήκουν στον κλάδο γράφονται με εσοχή (indentation): τέσσερα κενά πιο μέσα.
Στον ψευδοκώδικα το ΤΕΛΟΣ_ΑΝ έδειχνε πού κλείνει η επιλογή. Στην Python δεν υπάρχει τέτοια λέξη: η εσοχή είναι αυτή που το δείχνει. Μόλις μια γραμμή γυρίσει στο αριστερό περιθώριο, η επιλογή τελείωσε και η γραμμή εκτελείται πάντα.
vathmos = 8
if vathmos >= 10:
print("Πέρασες")
print("Συγχαρητήρια")
print("Τέλος προγράμματος")
Εδώ τυπώνεται μόνο το Τέλος προγράμματος. Αν η δεύτερη print δεν είχε εσοχή, το «Συγχαρητήρια» θα τυπωνόταν και σε όποιον κόπηκε.
Αν ξεχάσεις την εσοχή κάτω από ένα if, η Python δεν εκτελεί τίποτα και σταματά με IndentationError.
Τελεστές σύγκρισης
| Τελεστής | Σημαίνει | Παράδειγμα με x = 7 |
|---|---|---|
== | ίσο | x == 7 είναι True |
!= | διάφορο | x != 7 είναι False |
<, > | μικρότερο, μεγαλύτερο | x > 5 είναι True |
<=, >= | μικρότερο ή ίσο, μεγαλύτερο ή ίσο | x <= 6 είναι False |
Κάθε σύγκριση έχει αποτέλεσμα True (αληθής) ή False (ψευδής). Αυτές οι δύο τιμές έχουν δικό τους τύπο, τον bool.
Πολλές περιπτώσεις: elif
Όταν οι περιπτώσεις είναι περισσότερες από δύο, προσθέτεις κλάδους elif («else if», αλλιώς αν). Ένα μουσείο χρεώνει ανάλογα με την ηλικία:
ilikia = int(input("Ηλικία: "))
if ilikia < 6:
print("Δωρεάν είσοδος")
elif ilikia < 18:
print("Μαθητικό: 4 ευρώ")
elif ilikia >= 65:
print("Μειωμένο: 5 ευρώ")
else:
print("Κανονικό: 8 ευρώ")
Για ηλικία τυπώνεται Μαθητικό: 4 ευρώ, για τυπώνεται Κανονικό: 8 ευρώ.
Το else στο τέλος είναι προαιρετικό. Χωρίς αυτό, αν καμία συνθήκη δεν αληθεύει, απλώς δεν εκτελείται κανένας κλάδος.
Σύνθετες συνθήκες: and, or, not
| Τελεστής | Αληθής όταν | Παράδειγμα με x = 7 |
|---|---|---|
and | και οι δύο συνθήκες αληθεύουν | x > 5 and x < 6 είναι False |
or | τουλάχιστον μία αληθεύει | x > 5 or x < 6 είναι True |
not | η συνθήκη είναι ψευδής | not x > 5 είναι False |
Αντίθετα με τον ψευδοκώδικα, η Python δέχεται και τη διπλή σύγκριση των μαθηματικών: το 0 <= x <= 10 σημαίνει ακριβώς 0 <= x and x <= 10.
Λυμένα παραδείγματα
Παράδειγμα 1
Ένα έτος είναι δίσεκτο αν διαιρείται με το 4 αλλά όχι με το 100, ή αν διαιρείται με το 400. Γράψε πρόγραμμα που διαβάζει έτος και λέει αν είναι δίσεκτο.
Δοκίμασέ το πρώτα. Μετά δες τη λύση.
Παράδειγμα 2
Με vathmos = 16, τι τυπώνουν τρία ξεχωριστά if (για 10, 15 και 18) και τι τυπώνει η αλυσίδα if-elif με τους ίδιους ελέγχους από το 18 προς τα κάτω;
Δοκίμασέ το πρώτα. Μετά δες τη λύση.
Ασκήσεις
Πρώτα ερωτήσεις με επιλογές: διαλέγεις, πατάς «Έλεγξε» και μαθαίνεις αμέσως αν το βρήκες και γιατί. Στο τέλος, λίγες ασκήσεις χωρίς επιλογές — εκεί κρύβεται μόνο η απάντηση.
Τα κατάφερες;
- Να γράφεις δομές επιλογής με if, elif και else, με σωστή εσοχή και άνω-κάτω τελεία.
- Να χρησιμοποιείς τους τελεστές σύγκρισης και να ξεχωρίζεις το == από το =.
- Να γράφεις σύνθετες συνθήκες με and, or και not.
- Να εξηγείς γιατί η σειρά των elif αλλάζει το αποτέλεσμα.
Λύσε τις ασκήσεις πιο πάνω και θα δεις εδώ πού στέκεσαι.