5. Λογικές εκφράσεις με σχεσιακούς και λογικούς τελεστές

Όπως είπαμε σε άλλη ενότητα η Python έχει ένα λογικό τύπο δεδομένων που ονομάζεται bool ο οποίος αποτελείται από δυο τιμές True και False. Μια λογική παράσταση είναι μια απλή ή σύνθετη έκφραση που μπορεί να πάρει μια από τις δυο τιμές True ή False. Η Python περιλαμβάνει δυο σύνολα πράξεων για την δημιουργία λογικών εκφράσεων τις (1) σχεσιακές και τις (2) λογικές πράξεις.

Σχεσιακές πράξεις

Με τις σχεσιακές πράξεις συγκρίνουμε δυο στοιχεία δεδομένων, με το αποτέλεσμα να είναι μια τιμή bool δηλαδή True ή False. Στον παρακάτω πίνακα φαίνονται οι σχεσιακοί τελεστές με την σημασία τους.

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

Η Python δίνει κάποια ελευθερία στη σύγκριση των τιμών των οποίων οι τύποι δεν ταιριάζουν απόλυτα μεταξύ τους. Πιο συγκεκριμένα μπορεί να γίνει σύγκριση μεταξύ ακεραίων με πραγματικούς αριθμούς μέσα στην ίδια έκφραση.

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

Γενικά για την σύγκριση συμβολοσειρών χρησιμοποιείται η «λεξικολογική» μέθοδος. Με αυτή την μέθοδο η συμβολοσειρά μετατρέπεται στο ASCII ισοδύναμο όπου κάθε χαρακτήρας στη συμβολοσειρά παριστάνεται με την ASCII τιμή του. Να έχετε υπόψη ότι τα μικρά γράμματα έχουν μεγαλύτερους κωδικούς ASCII από τα αντίστοιχα κεφαλαία γράμματα.

Αντικείμενα

Τα αντικείμενα είναι τα βασικά στοιχεία που χρησιμοποιεί η Python. Ένα αντικείμενο χαρακτηρίζεται από τον τύπο του που μπορεί να είναι int, float, list κ.τ.λ. Ο τύπος του αντικειμένου προσδιορίζει τι μπορεί να κάνει το πρόγραμμα με αυτό τον τύπο. Τα αντικείμενα χαρακτηρίζονται βαθμωτά και μη. Βαθμωτά είναι τα αντικείμενα που είναι τύπου int, float και bool.

Τα αντικείμενα συμμετέχουν σε εκφράσεις που μαζί με τους τελεστές ορίζονται πράξεις μεταξύ τους. Με τις πράξεις σχηματίζονται αντικείμενα συγκεκριμένου τύπου.

>>> 5 + 2
  7               # Η παράσταση 5+2  δηλώνει το αντικείμενο 7 τύπου int
>>> 4.0 + 3.0
  7.0             # Η παράσταση 4.0+3.0 δηλώνει το αντικείμενο 7.0 τύπου float

Η έννοια της μεταβλητής σε αντίθεση με τις παραδοσιακές γλώσσες προγραμματισμού, στις οποίες η μεταβλητή αποτελεί ένα χώρο αποθήκευσης μιας τιμής, στην Python οι μεταβλητές παρέχουν ένα τρόπο συσχέτισης ενός ονόματος με ένα αντικείμενο.

Για να επαληθεύσουμε αν δυο μεταβλητές δείχνουν στο ίδιο αντικείμενο, μπορούμε να χρησιμοποιήσουμε την συνάρτηση id( ) η οποία μας επιστρέφει τη θέση μνήμης στην οποία είναι αποθηκευμένο ένα αντικείμενο.

Παράδειγμα

>>> x = 'cat'
>>> y = 'cat'
>>> z = 'dog'
>>> id(x)
  3215104080688
>>> id(y)
  3215104080688
>>> id(z)
  3215136589552

Πέρα από τους τελεστές σύγκρισης που περιγράψαμε νωρίτερα, υπάρχουν δυο ακόμα συγκριτικοί τελεστές is και is not με τους οποίους μπορούμε να ελέγξουμε αν δυο μεταβλητές δείχνουν στο ίδιο αντικείμενο. Ο τελεστής is ελέγχει αν δυο αντικείμενα έχουν την ίδια ταυτότητα δηλαδή αν πρόκειται για το ίδιο αντικείμενο.

Οι τελεστές is και is not ταυτίζονται με τους σχεσιακούς τελεστές == και != Αυτό φαίνεται στο παρακάτω παράδειγμα όπου έχουμε δυο μεταβλητές x και y με την ίδια τιμή. Ο τελεστής == δίνει True όπως και ο τελεστής is. Αυτό γίνεται γιατί οι μεταβλητές έχουν την ίδια τιμή αλλά είναι και το ίδιο αντικείμενο. Οι μεταβλητές a και b έχουν την ίδια ταυτότητα και γι’ αυτό ο τελεστής is δίνει True. Ανάλογα ισχύουν και για τον τελεστή is not.

>>> m = n = 'boy'
>>> k = 'girl'
>>> m==n
 True
>>> m is n
 True
>>> m == k
 False
>>> m != k
 True
>>> m is k
 False
>>> m is not k
 True

Στην Python υπάρχουν δυο ακόμα τελεστές τους in και not in οι οποίοι ελέγχουν εάν ένα αντικείμενο ανήκει σε μια ακολουθία ή όχι. Ακολουθεί ένα παράδειγμα:

>>> a = 'e'
>>> a  in  'home'
  True
>>> a  in  'hom'
  False
>>> 

Σε αυτό το παράδειγμα η μεταβλητή a παίρνει την τιμή ‘e’. Η έκφραση  a  in  ‘home’  αποτιμάται σε True επειδή ο χαρακτήρας ‘e’  ανήκει στη συμβολοσειρά ‘home’. Επειδή ο χαρακτήρας ‘e’ δεν ανήκει στην ακολουθία ‘hom’ η τελευταία έκφραση αποτιμάται σε False.

Λογικές πράξεις

Με τους λογικούς τελεστές μπορούμε να κάνουμε λογικές πράξεις μεταξύ απλών ή σύνθετων λογικών εκφράσεων, δηλαδή μεταξύ παραστάσεων που παίρνουν τις λογικές τιμές True ή False. Με τους σχεσιακούς τελεστές συγκρίνουμε αριθμητικά δεδομένα οι οποίοι δίνουν τις λογικές τιμές True και False.

Η Python έχει 3 λογικούς τελεστές, όπου οι δυο από αυτούς είναι οι δυαδικές πράξεις and και or που χρησιμοποιούνται για τον συνδυασμό δυο λογικών εκφράσεων, για την δημιουργία σύνθετων λογικών παραστάσεων που αποτιμούνται στις λογικές τιμές True και False. Ο τρίτος λογικός τελεστής ο not είναι μια μοναδιαία πράξη η οποία αλλάζει ένα απλό λογικό όρο δίνοντας του την αντίθετη τιμή.

Θεωρούμε δυο λογικές εκφράσεις Α και Β οι οποίες μπορούν να παίρνουν τις λογικές τιμές True και False. Αυτές οι λογικές εκφράσεις συνδυάζονται με τους λογικούς τελεστές and, or και not και δίνουν  λογικές εκφράσεις όπως περιγράφονται παρακάτω:

1) Η λογική έκφραση A and B είναι True μόνο αν και οι δυο εκφράσεις Α και Β είναι True. Εάν μια από τις Α και Β είναι False ή και οι δυο είναι False τότε και η έκφραση Α and B είναι False.

2) Η λογική έκφραση A or B είναι True αν μια από τις δυο εκφράσεις Α ή Β είναι True ή και οι δυο είναι True. Εάν και οι δυο εκφράσεις Α και Β είναι False τότε και η έκφραση Α or Β είναι False.

3) Αν η λογική έκφραση Α είναι True τότε η λογική έκφραση not A είναι False. Αν η Α είναι False τότε η not A έχει τιμή True.

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

>>> x = 5
>>> y = 12
>>> 3 * x - 8 <= 10
 True
>>> 2 * x -8 <= y
 True
>>> 4 * y != x
 True
>>> x < 10 and y - x >= 11
 False
>>> x < 10 or y - x >= 11
 True
>>> x > 9 or (y < 20 and y < 4)
 False
>>> x + 7 == y
 True
>>> not(y < 12) or x > 10
 True