Σημειώσεις

Προηγούμενο

Επόμενο

Λογικές εκφράσεις και μεταβλητές

Μπορούμε να γράψουμε μία λογική έκφραση η οποία θα είναι είτε αληθής είτε ψευδής. Μία συνηθισμένη λογική έκφραση είναι αυτή που ελέγχει αν μία ισότητα ή μία ανισότητα ισχύει ή όχι.

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


>>> x = 5     # assign a value to the variable x
>>> y = 7     # assign a value to the variable y
>>> x == y    # check if x is equal to y
False
>>> x < y     # check if x is smaller than y, etc
True
>>> x <= y
True
>>> x > y
False
>>> x >= y
False
>>> x != y    # check if x is not equal to y
True

Παράδειγμα.

(Λογικές μεταβλητές.) Στον παρακάτω κώδικα η μεταβλητή cond είναι μία λογική μεταβλητή (bool) και περιέχει το αποτέλεσμα μίας λογικής έκφρασης. Η cond μπορεί να πάρει τις τιμές True ή False.


>>> cond = (x == y)
>>> cond
False
>>> type(cond)
<class 'bool'>

Παράδειγμα.

Είναι το φετινό έτος δίσεκτο;


>>> year = 2018
>>> isleap = year%4 == 0
>>> print(isleap)
False

Σημείωση. η παραπάνω συνθήκη χρειάζεται βελτίωση για να είναι πλήρως σωστή (θα το δούμε παρακάτω).

Εντολές ελέγχου

Εκτέλεση υπό συνθήκη (εντολή if)

Η εντολή if ακολουθείται από μία λογική έκφραση και το σύμβολο : (άνω-κάτω τελεία). Εάν η λογική έκφραση είναι True τότε εκτελούνται όλες οι εντολές οι οποίες ακολουθούν την if και βρίσκονται σε μία εσοχή ως προς την if.

Παράδειγμα.


x = 5
if x>0:
    print("x is positive")
    print("x =",x)

Παρατήρηση.

Προσέξτε τη σημασία της εσοχής στην if (και γενικότερα στην python). Όλες οι εντολές που ακολουθούν την if και εξαρτώνται από αυτήν ξεκινούν από την ίδια ακριβώς στήλη (είναι ευθυγραμμισμένες στα αριστερά).

Άσκηση.

Υπάρχει κάποιο λάθος στις παρακάτω εντολές; Τι νομίζετε ότι προσπαθούσε να γράψει ο προγραμματιστής;


a == 1
if a = 1:
    print('a is one')

if - else: Εάν η λογική έκφραση η οποία ακολουθεί την if έχει τιμή False τότε δεν εκτελούνται οι εντολές που ακολουθούν (εντός της εσοχής) την if. Έχουμε όμως τη δυνατότητα να εκτελέσουμε εντολές στην περίπτωση εκείνη στην οποία η έκφραση που ακολουθεί την if έχει τιμή False. Για τον σκοπό αυτό βάζουμε, μετά την if, την νέα εντολή else και ακολουθούν (εντός εσοχής) όποιες εντολές θέλουμε.

Παράδειγμα.


>>> x = 5
>>> if x%2==0:
	print(x,'is even')
    else:
	print(x,'is odd')

Για τις εντολές if - else η γενική μορφή της σύνταξης είναι


if expression:
    statements_true
else:
    statements_false

Εδώ, expression δηλώνει οποιαδήποτε έκφραση η οποία η τιμή της οποίας είναι True ή False, ενώ statements_true και statements_false δηλώνουν μία ή περισσότερες εντολές Python. Παρατηρήστε την άνω και κάτω τελεία που ακολουθεί τόσο την έκφραση expression όσο και τη λέξη else. Προσέξτε και πάλι ότι οι εντολές statements_true και statements_fals είναι τοποθετημένες σε μια εσοχή προς τα δεξιά.

if - elif - else: Είναι δυνατόν να μην ισχύει ούτε η έκφραση μετά το if ούτε η έκφραση μετά το elif. Τότε μπορούμε να προσθέσουμε την εντολή else και να εκτελεστεί ο κώδικας τον οποίο θα γράψουμε κάτω από αυτήν.

Παράδειγμα.

Θα κάνουμε έλεγχο της διάταξης μεταξύ δύο αριθμών.


x = int(input("Give an integer: "))
y = int(input("Give an integer: "))
if x>y:
    print(x,'is greater than',y)
elif x<y:
    print(x,'is less than',y)
else:
    print(x,'and',y,'are equal')

Παράδειγμα.

Είναι το φετινό έτος δίσεκτο;


>>> year = 2018
>>> isleap = year%4 == 0
>>> if isleap:
	print("Year",year,"is leap year")
    else:
	print("Year",year,"is not leap year")

Παράδειγμα (simple menu calculator)

Θα γράψουμε ένα πρόγραμμα το οποίο θα δίνει στον χρήστη την δυνατότητα να επιλέγει από μία λίστα δυνατοτήτων.


x = int(input("Give a value for number x: "))
y = int(input("Give a value for number y: "))
print("Calculation options:")
print("1) x + y")
print("2) x * y")
print("3) x ^ y")
    
choice = int(input("Please make a choice by entering the number: "))
if choice == 1:
    print("x + y =", x+y)
elif choice == 2:
    print("x * y =", x*y)
elif choice == 3:
    print("x ^ y =", x**y)
else:
    print("Invalid choice")

Τελεστές

Μπορούμε να συνδυάσουμε λογικές μεταβλητές b, c. Οι τελεστές είναι οι ακόλουθοι (κατά σειρά χαμηλότερης προτεραιότητας).

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


>>> 100%4 == 0 and 50%4 == 0
False
>>> len('Papadakis') > 10 and len('Papadopoulos') > 10
False
>>> len('Nikolopoulos') > 10 and len('Papadopoulos') > 10
True
>>> len('Papadakis') > 10 and len('Papadopoulos') > 10
False
>>> not (3 == 4)
True

Παράδειγμα.

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


>>> year = 2018
>>> isleap = (year%4 == 0) and (year%100 != 0)
>>> print(isleap)

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

Παράδειγμα.

Η συνθήκη που χρησιμοποιήσαμε στο παράδειγμα για τα δίσεκτα έτη χρειάζεται επιπλέον βελτίωση.


>>> year = 2018
>>> isleap = (year%4 == 0) and (year%100 != 0) or (year%400 == 0)
>>> print(isleap)

Η παραπάνω εντολή if για τα δίσεκτα έτη είναι ισοδύναμη με την


>>> isleap = (year%4 == 0 and year%100 != 0) or (year%400 == 0)

Παράδειγμα.

Για να κατανοήσουμε την προτεραιότητα των λογικών τελεστών δοκιμάζουμε τις ακόλουθες εκφράσεις.


>>> (True or True) and False
False
>>> True or (True and False)
True
>>> True or True and False
True

Μερική αποτίμηση.

Όταν έχουμε λογικές εκφράσεις οι οποίες συνδέονται με τελεστές (and, or) τότε είναι συχνά αρκετό να ελεγχθεί η τιμή μίας από αυτές ώστε να προσωρήσει το πρόγραμμα στο επόμενο βήμα. Αυτό είναι κάτι που το εκμεταλλεύεται η python.

Παράδειγμα.

Ο ακόλουθος κώδικας θα παραγάγει σφάλμα αν το string s δεν έχει χαρακτήρα με δείκτη 2.


s = "AB"
if s[2] == "C": #error, string index out of range
   print("The third letter is C")

Ο ακόλουθος είναι σωστός κώδικας διότι το s[2] θα ελεγχθεί μόνο αν το sting περιέχει χαρακτήρα με δείκτη 2.


if len(s) > 2 and s[2] == "C":
   print("The third letter is C")

Ο ακόλουθος δεν είναι σωστός κώδικας διότι το s[2] θα ελεγχθεί πριν εξασφαλισθεί ότι το sting περιέχει χαρακτήρα με δείκτη 2.


if s[2] == "C" and len(s) > 2:  #error, string index out of range
   print("The third letter is C")

Φωλιασμένες εντολές if

Εντολές ελέγχου if-elif-else μπορούν να είναι μέρος εντολών οι οποίες εκτελούνται υπό μία συνθήκη.

Παράδειγμα.

Οι παρακάτω εντολές επιλέγουν τον μέγιστο μεταξύ των τριών αριθμών x, y, z :


if x >= y:
    if x >= z:
        print('x is largest')
    else:
        print('z is largest')
else:
    if y >= z:
        print('y is largest')
    else:
        print('z is largest')

Μια κομψότερη, ίσως, λύση (η οποία μπορεί εύκολα να γενικευθεί σε μεγαλύτερο πλήθος αριθμών) είναι η ακόλουθη.


maxnum = x
if y > maxnum:
    maxnum = y
if z > maxnum:
    maxnum = z
print('largest number is', maxnum)

Μελέτη

Βιβλιογραφία

  1. Δ. Καρολίδης, Μαθαίνετε εύκολα python.
  2. Κ. Μαγκούτης, Χ. Νικολάου, Εισαγωγή στον αντικειμενοστραφή προγραμματισμό με Python, (Αποθετήριο "Κάλλιπος", 2016) - Κεφάλαιο 4. Συναρτήσεις και εκτέλεση υπό συνθήκη.
  3. J.V. Guttag, Υπολογισμοί και προγραμματισμός με την python (Παράγραφοι 2.2, 3.1).