Πρώτα βήματα
Δεδομένα
Αποφάσεις
Επανάληψη
Συναρτήσεις και σφάλματα
Συνδυασμός συνθηκών
Το e-shop αλλάζει τον κανόνα για τα μεταφορικά: δωρεάν από 40 ευρώ και πάνω, αλλά όχι για τα νησιά, όπου ο courier χρεώνει παραπάνω. Τώρα η απόφαση εξαρτάται από δύο ερωτήσεις. Η πρώτη λύση που βγαίνει με όσα ήδη ξέρεις είναι ένα
if μέσα σε ένα άλλο:pythonif total >= 40: if island: shipping = 3.5 else: shipping = 0 else: shipping = 3.5
Το
shipping = 3.5 είναι γραμμένο δύο φορές και ο κώδικας έχει δύο επίπεδα εσοχής. Αν αλλάξει η χρέωση, πρέπει να τη διορθώσεις σε δύο σημεία. Με μια τρίτη συνθήκη τα επίπεδα και τα αντίγραφα θα πολλαπλασιάζονταν.Δύο συνθήκες σε μία γραμμή
Η ίδια απόφαση, με το
and:pythonif total >= 40 and not island: shipping = 0 else: shipping = 3.5
Το διαβάζεις όπως θα το έλεγες: «αν το σύνολο είναι τουλάχιστον 40 και δεν είναι νησί». Οι λέξεις
and και not είναι καινούργιες.Το
and ενώνει δύο συνθήκες και δίνει True μόνο όταν ισχύουν και οι δύο. Αν έστω και μία δίνει False, το αποτέλεσμα είναι False.Το
not αντιστρέφει μια τιμή: το not True δίνει False και το not False δίνει True. Το island είναι True για παραγγελίες σε νησί, οπότε το not island σημαίνει «δεν είναι νησί».Το ίδιο σχήμα έχει κι ένα παιχνίδι στο κινητό: περνάς στην επόμενη πίστα μόνο αν σου έχουν μείνει ζωές και έχεις μαζέψει τουλάχιστον 100 πόντους.
pythonlives = 2 score = 120 if lives > 0 and score >= 100: print("Επόμενη πίστα") else: print("Ξαναπαίξε την πίστα")
Στο διάγραμμα το
and φαίνεται σαν δύο ερωτήσεις στη σειρά. Στο δωρεάν φτάνεις μόνο αν περάσεις και τις δύο:Προχώρα βήμα βήμα με μια παραγγελία 45 ευρώ για νησί:
Βήμα προς βήμαΒήμα 1 από 5total = 45island = Trueif total >= 40 and not island:shipping = 0else:shipping = 3.5print("Μεταφορικά:", shipping)Μεταβλητέςtotal = 45
Το σύνολο της παραγγελίας.
Το πρόγραμμα τυπώνει πρώτα το
not island. Άλλαξε το island σε False και, πριν τρέξεις, πες από μέσα σου τι θα τυπώσει η πρώτη γραμμή. Μετά δοκίμασε τους τέσσερις συνδυασμούς: σύνολο πάνω και κάτω από 40, με νησί και χωρίς. Μόνο ένας από αυτούς δίνει δωρεάν μεταφορικά.python
Αρκεί η μία από τις δύο
Ένα θέατρο δίνει έκπτωση σε φοιτητές και σε όσους είναι 65 ετών και πάνω. Εδώ δε χρειάζεται να ισχύουν και οι δύο συνθήκες, αρκεί η μία. Αυτό το λέει το
or: δίνει True όταν ισχύει τουλάχιστον η μία συνθήκη και False μόνο όταν δεν ισχύει καμία. Τα and, or και not λέγονται μαζί λογικοί τελεστές.pythonif is_student or age >= 65: print("Έκπτωση") else: print("Κανονική τιμή")
Οι τέσσερις πιθανοί συνδυασμοί τιμών, μαζί με ό,τι δίνουν σε καθέναν τους το
and και το or, χωράνε σε έναν μικρό πίνακα, τον πίνακα αλήθειας:Ένας συνταξιούχος 70 ετών δεν είναι φοιτητής. Τι τυπώνει κάθε γραμμή;
Πρόβλεψεis_student = False age = 70 print(is_student or age >= 65) print(is_student and age >= 65)Τι θα εμφανιστεί στην οθόνη;
Διάλεξε μία
Κάθε μέρος θέλει ολόκληρη σύγκριση
Το παρακάτω πρόγραμμα έχει ένα λάθος που δε βγάζει μήνυμα σφάλματος. Η μέρα είναι Τρίτη, αλλά τυπώνει «Σαββατοκύριακο». Βρες πού κάνει λάθος η συνθήκη πριν διαβάσεις την εξήγηση.
python
Στα ελληνικά λες «αν η μέρα είναι Σάββατο ή Κυριακή» και ο άλλος καταλαβαίνει. Η Python διαβάζει κάθε πλευρά του
or χωριστά. Αριστερά βλέπει day == "Σάββατο", που δίνει False. Δεξιά βλέπει σκέτο το κείμενο "Κυριακή", χωρίς σύγκριση. Η Python μετράει ένα κείμενο που δεν είναι άδειο ως αληθές, οπότε η συνθήκη ισχύει για κάθε μέρα της εβδομάδας. Αν τυπώσεις τη συνθήκη μόνη της, με print(day == "Σάββατο" or "Κυριακή"), βλέπεις Κυριακή: το or δίνει το κείμενο της δεξιάς πλευράς. Το if το μετράει ως αληθές.Κάθε πλευρά του
or και του and πρέπει να είναι ολόκληρη σύγκριση, με το day == γραμμένο και στις δύο:pythonif day == "Σάββατο" or day == "Κυριακή":
Με το
and γράφεις και το «ανάμεσα σε δύο τιμές». Το πρόγραμμα αυτή τη στιγμή τυπώνει «Πλήρες εισιτήριο» για κάθε ηλικία από 18 και πάνω. Άλλαξε τη συνθήκη, ώστε να το τυπώνει μόνο από 18 έως και 64 ετών. Δοκίμασέ το με 17, 18, 64 και 65.python
Το ίδιο σε ψευδοκώδικα
Σε ψευδοκώδικα οι λογικοί τελεστές είναι ελληνικές λέξεις:
ΚΑΙ, Η, ΟΧΙ. Ο κανόνας για τα μεταφορικά:ΓΛΩΣΣΑΠΡΟΓΡΑΜΜΑ ΜΕΤΑΦΟΡΙΚΑ_ΠΑΡΑΓΓΕΛΙΑΣ ΜΕΤΑΒΛΗΤΕΣ ΠΡΑΓΜΑΤΙΚΕΣ: ΣΥΝΟΛΟ, ΜΕΤΑΦΟΡΙΚΑ ΛΟΓΙΚΕΣ: ΝΗΣΙ ΑΡΧΗ ΣΥΝΟΛΟ ← 45 ΝΗΣΙ ← ΑΛΗΘΗΣ ΑΝ ΣΥΝΟΛΟ >= 40 ΚΑΙ ΟΧΙ ΝΗΣΙ ΤΟΤΕ ΜΕΤΑΦΟΡΙΚΑ ← 0 ΑΛΛΙΩΣ ΜΕΤΑΦΟΡΙΚΑ ← 3.5 ΤΕΛΟΣ_ΑΝ ΓΡΑΨΕ 'Μεταφορικά:', ΜΕΤΑΦΟΡΙΚΑ ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ
Οι τελεστές κάνουν ακριβώς ό,τι και στην Python, με τον ίδιο πίνακα αλήθειας. Το
Η χρειάζεται κι αυτό ολόκληρη σύγκριση σε κάθε πλευρά, όπως το or. Η συνθήκη τελειώνει με ΤΟΤΕ αντί για : και η δομή κλείνει με ΤΕΛΟΣ_ΑΝ αντί για εσοχή.Σύνοψη
- Το
andδίνειTrueμόνο όταν ισχύουν και οι δύο συνθήκες. ΤοorδίνειTrueόταν ισχύει τουλάχιστον η μία. - Το
notαντιστρέφει μια τιμή:not TrueείναιFalse,not FalseείναιTrue. - Το
andσου γλιτώνει έναifμέσα σε άλλοifκαι τις διπλές γραμμές. - Ο πίνακας αλήθειας δείχνει τι δίνουν τα
andκαιorγια κάθε ζευγάρι τιμών. - Κάθε πλευρά του
andκαι τουorείναι ολόκληρη σύγκριση. Τοday == "Σάββατο" or "Κυριακή"ισχύει για κάθε μέρα.
Θες να συνεχίσεις;
Το course είναι δωρεάν. Κάνε σύνδεση για να κρατάς την πρόοδο και τις σημειώσεις σου.