Πρώτα βήματα
Δεδομένα
Αποφάσεις
Επανάληψη
Συναρτήσεις και σφάλματα
Συνθήκες με if
Ένα e-shop χρεώνει 3.50 ευρώ μεταφορικά, εκτός αν η παραγγελία φτάνει τα 40 ευρώ. Η σύγκριση
order_total >= 40 δίνει True ή False, αλλά από μόνη της δεν αλλάζει τι κάνει το πρόγραμμα. Χρειάζεται να βάλει 0 στα μεταφορικά στη μία περίπτωση και 3.50 στην άλλη.Αυτό το γράφεις με το
if:python
Η γραμμή με το
if κάνει μια ερώτηση. Αν η απάντηση είναι True, τρέχουν οι γραμμές κάτω από το if. Αν είναι False, τρέχουν οι γραμμές κάτω από το else. Η ερώτηση μετά το if λέγεται συνθήκη: κάτι που δίνει True ή False, συνήθως μια σύγκριση. Το if είναι η δομή επιλογής του σχολικού βιβλίου.Οι δύο τελευταίες γραμμές τρέχουν σε κάθε περίπτωση, γιατί δεν ανήκουν ούτε στο
if ούτε στο else. Τρέξε το πρόγραμμα, μετά άλλαξε το order_total σε 52 και ξανατρέξε. Στο τέλος πρόσθεσε κάτω από το πρόγραμμα ένα δεύτερο if για τους βαθμούς. Φτιάξε μια μεταβλητή grade = 12 και τύπωσε «Προάγεσαι» αν ο βαθμός είναι τουλάχιστον 10, αλλιώς «Επανεξέταση». Δοκίμασέ το με 9, 10 και 18.Η εσοχή δείχνει τι ανήκει στο if
Πώς ξέρει η Python ποιες γραμμές ανήκουν στο
if; Από τα κενά στην αρχή της γραμμής. Οι γραμμές που τρέχουν μόνο όταν ισχύει η συνθήκη ξεκινούν τέσσερα κενά πιο μέσα. Αυτή η μετατόπιση λέγεται εσοχή (στα αγγλικά indentation). Στον editor την κάνεις με το πλήκτρο Tab.Η γραμμή του
if και η γραμμή του else τελειώνουν με άνω και κάτω τελεία :. Το κομμάτι που ανήκει σε αυτά τελειώνει στην πρώτη γραμμή που ξεκινάει ξανά χωρίς εσοχή, όπως το print στο παράδειγμα.Στην Python η εσοχή είναι μέρος της γλώσσας: αν οι γραμμές δε στοιχίζονται σωστά, το πρόγραμμα αλλάζει ή σταματάει με σφάλμα.
Το παρακάτω πρόγραμμα σταματάει πριν τυπώσει οτιδήποτε. Τρέξε το και φτιάξε την εσοχή που λείπει.
python
Το μήνυμα λέει
IndentationError: expected an indented block after 'if' statement on line 2: μετά από ένα if η Python περιμένει τουλάχιστον μία γραμμή με εσοχή. Το αντίθετο λάθος, μια γραμμή με εσοχή εκεί που δεν ανήκει πουθενά, δίνει IndentationError: unexpected indent.Τα δύο πιο συνηθισμένα λάθη στη γραμμή του
if είναι αυτά:- Αν ξεχάσεις την
:στο τέλος, παίρνειςSyntaxError: expected ':'. - Αν γράψεις
if age = 18:με ένα ίσον, παίρνειςSyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?. Η συνθήκη ρωτάει, οπότε θέλει==.
Περισσότερες από δύο περιπτώσεις
Ένα μουσείο έχει τρεις τιμές: δωρεάν για παιδιά κάτω από 6 ετών, 5 ευρώ κάτω από 18, 10 ευρώ για τους υπόλοιπους. Με το
elif, συντομογραφία του «else if», προσθέτεις όσες ερωτήσεις χρειάζεσαι ανάμεσα στο if και στο else:pythonif age < 6: price = 0 elif age < 18: price = 5 else: price = 10
Η Python κάνει τις ερωτήσεις με τη σειρά, από πάνω προς τα κάτω. Μόλις μία δώσει
True, τρέχει εκείνο το κομμάτι και προσπερνάει όλα τα υπόλοιπα, ακόμα κι αν κάποια επόμενη συνθήκη θα ίσχυε κι αυτή. Το else τρέχει μόνο αν καμία συνθήκη δεν ίσχυσε.Προχώρα βήμα βήμα με έναν επισκέπτη 15 ετών και κοίτα ποιες γραμμές τρέχουν και ποιες προσπερνιούνται.
Βήμα προς βήμαΒήμα 1 από 5age = 15if age < 6:price = 0elif age < 18:price = 5else:price = 10print("Εισιτήριο:", price)Μεταβλητέςage = 15
Η ηλικία του επισκέπτη.
Η σειρά των ερωτήσεων
Έχει σημασία η σειρά των ερωτήσεων; Εδώ κάποιος έγραψε τις ίδιες ερωτήσεις ανάποδα:
Πρόβλεψεage = 4 if age < 18: print("Μειωμένο") elif age < 6: print("Δωρεάν") else: print("Κανονικό")Τι τυπώνει για ένα παιδί 4 ετών;
Διάλεξε μία
Το πρόγραμμα δεν έβγαλε κανένα σφάλμα. Έτρεξε και χρέωσε λάθος τιμή, γιατί η Python σταματάει στην πρώτη συνθήκη που ισχύει. Όταν οι περιπτώσεις επικαλύπτονται, όπως το «κάτω από 6» που είναι και «κάτω από 18», βάζεις πρώτη τη στενότερη.
Το μουσείο θέλει τώρα και μειωμένο εισιτήριο 5 ευρώ για όσους είναι 65 ετών και πάνω. Πρόσθεσε αυτή την περίπτωση στο πρόγραμμα και δοκίμασέ το με ηλικίες 4, 15, 40 και 70.
python
Το ίδιο σε ψευδοκώδικα
Το εισιτήριο του μουσείου σε ψευδοκώδικα, όπως γράφεις τους αλγορίθμους στο σχολείο και στις Πανελλήνιες:
ΓΛΩΣΣΑΠΡΟΓΡΑΜΜΑ ΕΙΣΙΤΗΡΙΟ ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: ΗΛΙΚΙΑ, ΤΙΜΗ ΑΡΧΗ ΗΛΙΚΙΑ ← 15 ΑΝ ΗΛΙΚΙΑ < 6 ΤΟΤΕ ΤΙΜΗ ← 0 ΑΛΛΙΩΣ_ΑΝ ΗΛΙΚΙΑ < 18 ΤΟΤΕ ΤΙΜΗ ← 5 ΑΛΛΙΩΣ ΤΙΜΗ ← 10 ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ 'Εισιτήριο:', ΤΙΜΗ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Η λογική είναι ίδια, γραμμή προς γραμμή. Το
elif της Python είναι το ΑΛΛΙΩΣ_ΑΝ και την ανάθεση τη γράφεις με ← αντί για =. Εκεί που τελειώνει η δομή, η ΓΛΩΣΣΑ γράφει ΤΕΛΟΣ_ΑΝ, ενώ η Python το καταλαβαίνει από την πρώτη γραμμή χωρίς εσοχή. Στη ΓΛΩΣΣΑ η εσοχή είναι μόνο για να διαβάζεται το πρόγραμμα. Στην Python μετράει.Σύνοψη
- Το
ifτρέχει ένα κομμάτι κώδικα μόνο όταν η συνθήκη του δίνειTrue. Τοelseτρέχει όταν δίνειFalse. - Η συνθήκη είναι κάτι που δίνει
TrueήFalse, συνήθως μια σύγκριση. Για ισότητα γράφεις==και η γραμμή τελειώνει με:. - Η εσοχή, τέσσερα κενά, δείχνει ποιες γραμμές ανήκουν στο
ifή στοelse. Η πρώτη γραμμή χωρίς εσοχή τρέχει σε κάθε περίπτωση. - Λάθος εσοχή δίνει
IndentationError. Το μήνυμα λέει σε ποια γραμμή. - Με το
elifπροσθέτεις περιπτώσεις. Η Python τις ελέγχει με τη σειρά και τρέχει μόνο την πρώτη που ισχύει. - Όταν οι περιπτώσεις επικαλύπτονται, η στενότερη μπαίνει πρώτη.
Θες να συνεχίσεις;
Το course είναι δωρεάν. Κάνε σύνδεση για να κρατάς την πρόοδο και τις σημειώσεις σου.