Η Απάντηση

Εισαγωγή

Στο βιβλίο The Hitchhiker’s Guide to the Galaxy, περιγράφεται μια υπερευφυής φυλή η οποία αποφασίζει να φτιάξει έναν υπολογιστή που θα δώσει οριστικά την απάντηση για το νόημα της ζωής. Ο υπολογιστής χρειάστηκε 7.5 εκατομμύρια χρόνια για να υπολογίσει και να ελέγξει την Απάντηση για τη Ζωή, το Σύμπαν και τα Πάντα. Η Απάντηση ήταν... σαράντα δύο.

Ο υπολογιστής λέγονταν Deep Thought και μπορούμε να φτιάξουμε κι εμείς ένα πρόγραμμα σαν το δικό του. Επειδή γνωρίζουμε ήδη την Απάντηση, θα κλέψουμε λίγο: το πρόγραμμά μας δεν θα υπολογίζει την Απάντηση, αλλά μόνο θα την ανακοινώνει στο χρήστη.

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

Κυρίως όμως θα μάθουμε την Απάντηση για τη Ζωή, το Σύμπαν και τα Πάντα!

Έννοιες: είσοδος, έξοδος, μεταβλητές, δομή επιλογής.

Μηνύματα

Πληκτρολογήστε την εντολή:

        
            print("Καλημέρα.")
        
    

Αυτό είναι το πρώτο σας πρόγραμμα.

Τί εμφανίζεται στην οθόνη αν εκτελέσετε το πρόγραμμά σας;

Για να εμφανίσουμε ένα μήνυμα στην οθόνη χρησιμοποιούμε την print, δίνοντας ανάμεσα στις παρενθέσεις το μήνυμα που θα εμφανιστεί.

Βασιστείτε στην εντολή του προηγούμενου βήματος και προσθέστε στο πρόγραμμά σας μια ακόμα εντολή, έτσι ώστε να εμφανίζεται στην οθόνη η Απάντηση.

Η Απάντηση είναι... 42

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

Στο προηγούμενο βήμα χρησιμοποιήσαμε την print, ώστε το πρόγραμμα να εμφανίζει το μήνυμα Καλημέρα, ως εξής:

            
                print("Καλημέρα.")
            
        

Τώρα πρέπει να κάνετε κάτι ανάλογο για το μήνυμα Η Απάντηση είναι... 42.

Για να εμφανιστεί στην οθόνη το μήνυμα Η Απάντηση είναι... 42, προσθέστε στο πρόγραμμα την εντολή:


            print("Η Απάντηση είναι... 42")
        

Πριν από την print του προηγούμενου βήματος που εμφανίζει την Απάντηση, προσθέστε την εντολή:

        
            answer = 42
            print("Η Απάντηση είναι... 42")
        
    

Η answer είναι μια μεταβλητή στην οποία δίνουμε την τιμή 42. Tώρα μπορούμε να αναφερόμαστε στην Απάντηση, χωρίς να έχει σημασία ποια είναι αυτή.

Η answer είναι μια μεταβλητή. Μπορούμε να πούμε ότι δίνουμε στην τιμή 42 το όνομα answer. Μπορούμε επίσης να πούμε ότι δίνουμε στο όνομα answer την τιμή 42. Και οι δύο περιγραφές είναι ορθές, είναι απλά θέμα οπτικής γωνίας. Σημασία έχει ότι οι μεταβλητές επιτρέπουν στα προγράμματά μας να διατηρούν, να “θυμούνται” τις τιμές που είναι σημαντικές.

Όταν συσχετίζουμε μια τιμή μ’ ένα όνομα (όπως κάνουμε εδώ με το όνομα answer και την τιμή 42) μπορούμε ν’ αναφερθούμε σε αυτή κι αργότερα, διαφορετικά δεν έχουμε τρόπο ανάκτησής της.

Η εντολή answer = 42 δεν διατυπώνει κάτι που πρέπει να ισχύει για πάντα, είναι απλά μια εντολή που θα αντιστοιχίσει το όνομα answer με την τιμή 42 όταν έρθει η σειρά της να εκτελεστεί. Θα μπορούσαμε με μια αντίστοιχη εντολή στη συνέχεια ν’ αλλάξουμε την τιμή της μεταβλητής answer, δηλαδή να συσχετίσουμε το όνομα με μια νέα τιμή (αν και αυτό δεν θα χρειαστεί για την answer, γιατί η Απάντηση είναι μία).

Σημειώστε ότι ο χρήστης δε γνωρίζει τίποτα για το όνομα answer ή την αντίστοιχη τιμή. Για την ακρίβεια δε γνωρίζει καν για την ύπαρξη της μεταβλητής. Ο χρήστης γνωρίζει μόνο ό,τι του εμφανίζει το πρόγραμμα με εντολές εξόδου.

Στη συνέχεια, τροποποιήστε την print του προηγούμενου βήματος ως εξής:

        
            answer = 42
            print("Η Απάντηση είναι...", answer)
        
    

Μπορούμε να εμφανίσουμε με την print πολλές τιμές, αρκεί να τις χωρίσουμε με κόμμα.

Ανάμεσά στις τιμές εμφανίζεται ένα κενό, όμως αυτή η προκαθορισμένη συμπεριφορά είναι δυνατόν ν’ αλλάξει.

Τί εμφανίζεται στην οθόνη αν εκτελέσετε το πρόγραμμά σας;

Πριν από τις προσθήκες και τις αλλαγές αυτού του βήματος, το πρόγραμμα εμφάνιζε την Απάντηση με την εντολή:

            
                print("Η Απάντηση είναι... 42")
            
        

Τώρα, αυτή η εντολή αντικαταστάθηκε από τον κώδικα που ακολουθεί:

            
                answer = 42
                print("Η Απάντηση είναι...", answer)
            
        

Ποιες από τις παρακάτω προτάσεις πιστεύετε ότι είναι αληθείς;

Πιστεύετε ότι θα λειτουργούσε το πρόγραμμα αν είχαμε τοποθετήσει την εντολή answer = 42 μετά την print;

Αν δεν είστε σίγουροι, μπορείτε να το δοκιμάσετε.

Τροποποιήστε την εντολή που δίνει τιμή στην answer:

        
            answer = 3 + 13 * 3
            print("Η Απάντηση είναι...", answer)
        
    
Το σύμβολο * αντιστοιχεί στην πράξη του πολλαπλασιασμού. Mπορείτε επίσης να χρησιμοποιήσετε τα κλασικά + και -, καθώς επίσης και το / για τη διαίρεση, το // για το πηλίκο της ακέραιας διαίρεσης και το % για το υπόλοιπο της ακέραιας διαίρεσης.

Μετά από αυτή την τροποποίηση, ποιά θα είναι η τιμή της answer;

Η τιμή της answer προκύπτει τώρα από τον υπολογισμό της τιμής μιας αριθμητικής έκφρασης. Ποιες από τις παρακάτω αριθμητικές εκφράσεις έχουν επίσης τιμή ίση με 42;

Ερωταποκρίσεις

Μέχρι στιγμής ο Deep Thought είναι λίγο απρόσωπος: απλά ανακοινώνει την Απάντηση. Η ροή της πληροφορίας ανάμεσα στο πρόγραμμα και τον χρήστη είναι μονόδρομη.

Στις περισσότερες περιπτώσεις ένα πρόγραμμα δεν περιορίζεται στην εμφάνιση μηνυμάτων, αλλά χρειάζεται και να κάνει ερωτήσεις στον χρήστη, να του ζητήσει τιμές.

Θα προγραμματίσουμε τον Deep Thought έτσι ώστε να ζητάει το όνομα του χρήστη και να τον καλημερίζει κατάλληλα. Έτσι θα υπάρχει ένας στοιχειώδης διάλογος, πριν ανακοινωθεί η Απάντηση.

Στην αρχή του προγράμματος προσθέστε τις παρακάτω εντολές:

        
            print("Πώς σε λένε;")
            name = input()
        
    
Η input() επιστρέφει το κείμενο που πληκτρολόγησε ο χρήστης, επιστρέφει δηλαδή μια αλφαριθμητική τιμή. Εδώ χρησιμοποιούμε την input() για να διαβάσουμε την απάντηση του χρήστη, η οποία αποθηκεύεται στη μεταβλητή name.

Η τιμή της μεταβλητής name είναι το κείμενο που πληκτρολογεί ο χρήστης και φυσικά δεν είναι γνωστό εκ των προτέρων. O Deep Thought θα χρησιμοποιήσει την τιμή της μεταβλητής name για να καλημερίσει το χρήστη, όποια κι αν είναι αυτή η τιμή.

Το όνομα που πληκτρολογεί ο χρήστης αποθηκεύεται στη μεταβλητή name. Συμπληρώστε την εντολή print("Καλημέρα.") έτσι ώστε το πρόγραμμα να χαιρετά τον χρήστη χρησιμοποιώντας τ' όνομά του. Για παράδειγμα:

Καλημέρα Μαρία

Μπορείτε να ανατρέξετε στο βήμα 3 και να χρησιμοποιήσετε την print, έτσι ώστε το πρόγραμμα να εμφανίσει το μήνυμα Καλημέρα και την τιμή της μεταβλητής name.

Στο βήμα 3 χρησιμοποιήσαμε την print, ώστε το πρόγραμμα να εμφανίζει το μήνυμα Η Απάντηση είναι... και την τιμή της μεταβλητής answer ως εξής:

            
                print("Η Απάντηση είναι...", answer)
            
        

Τώρα πρέπει να κάνετε κάτι ανάλογο για το μήνυμα Καλημέρα και την τιμή της μεταβλητής name.

Προσθέστε στο πρόγραμμα την εντολή που ακολουθεί, έτσι ώστε το πρόγραμμα να καλημερίσει το χρήστη με το όνομά του, εμφανίζοντας το μήνυμα Καλημέρα και την τιμή της μεταβλητής name:

            
                print("Καλημέρα", name)
            
        

Εκτελέστε το πρόγραμμα σας 2–3 φορές και, παίζοντας το ρόλο του χρήστη, πληκτρολογήστε κάθε φορά ένα διαφορετικό όνομα.

Για να καλημερίσει το πρόγραμμά μας το χρήστη με τ' όνομά του, χρησιμοποιήσαμε την εντολή:

            
                print("Καλημέρα", name)
            
        

Ποιά θα ήταν η διαφορά αν επιχειρούσατε να καλημερίσετε το χρήστη με την εντολή που ακολουθεί;

            
                print("Καλημέρα name")
            
        

Ποιά θα ήταν η διαφορά αν, στο βήμα 5, χρησιμοποιούσαμε την εντολή name = "Μαρία", αντί για την εντολή name = input();

            
                print("Πώς σε λένε;")
                name = input()
                name = "Μαρία"
                print("Καλημέρα", name)
            
        

Ποιά θα ήταν η διαφορά αν, στο βήμα 3, χρησιμοποιούσαμε την εντολή answer = input() αντί για την εντολή answer = 42;

            
                answer = 42
                answer = input()
                print("Η Απάντηση είναι...", answer)
            
        

Βιβλιοθήκες

Για να προσθέσουμε λίγο σασπένς, θα θέλαμε να υπάρχει μια καθυστέρηση πριν από την ανακοίνωση της Απάντησης.

Επειδή στις βασικές εντολές της Python δεν συγκαταλέγεται κάποια εντολή καθυστέρησης, θα χρησιμοποιήσουμε τη βιβλιοθήκη time, η οποία παρέχει τη λειτουργικότητα που μας χρειάζεται.

Προσθέστε στην αρχή του προγράμματος την εντολή που ακολουθεί, για να εισάγετε στο πρόγραμμα τη βιβλιοθήκη time:

        
            import time
        
    
Για να χρησιμοποιήσουμε μια βιβλιοθήκη θα πρέπει πρώτα να την εισάγουμε (import). Εδώ θα εισάγουμε τη βιβλιοθήκη time (που περιέχει έτοιμα υποπρογράμματα για τη διαχείριση του χρόνου).

Αμέσως πριν από την print που ανακοινώνει την Απάντηση στο χρήστη, προσθέστε τη γραμμή που ακολουθεί:

        
            time.sleep(3)
        
    
Εδώ χρησιμοποιείται η συνάρτηση sleep, από τη βιβλιοθήκη time.

Εκτελέστε το πρόγραμμα. Τί αποτέλεσμα έχει η προσθήκη της sleep από τη βιβλιοθήκη time;

Εισάγεται μια καθυστέρηση ανάμεσα στην εμφάνιση των δύο μηνυμάτων.

Διερευνήστε τί θα συμβεί αν χρησιμοποιήσουμε άλλη τιμή, διαφορετική από το 3, ως παράμετρο της sleep. Tί ρόλο πιστεύετε ότι παίζει η παράμετρος της sleep;

Η παράμετρος 3 καθορίζει ότι θα υπάρχει μια καθυστέρηση τριών δευτερολέπτων. Αν χρησιμοποιηθεί άλλη τιμή στη θέση του 3 θα αλλάξει η περίοδος της χρονικής καθυστέρησης.

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

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

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

Αν θέλουμε να υπάρχει πραγματικό σασπένς και να είμαστε πιστοί στο βιβλίο του Douglas Adams, θα πρέπει να εισάγουμε μια καθυστέρηση της τάξης των 7.5 εκατομυρίων ετών (σε δευτερόλεπτα).

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

Μπορείτε να ανατρέξετε στο βήμα 4, όπου υπολογίζεται με μια αριθμητική έκφραση η τιμή της μεταβλητής answer.

Σε άλλο σημείο του προγράμματος, η τιμή της μεταβλητής answer υπολογίζεται ως εξής:

answer = 3 + 13 * 3

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

Για να υπολογίσετε (περίπου) τα δευτερόλεπτα που αντιστοιχούν σε 7.5 εκατομμύρια χρόνια και να αποδώσετε αυτή την τιμή στη μεταβλητή wait, χρησιμοποιήστε τον κώδικα που ακολουθεί:

            
                wait = 7500000 * 365 * 24 * 60 * 60
            
        

Τροποποιήστε προσωρινά τη γραμμή όπου χρησιμοποιείται η sleep έτσι ώστε, αντί για 3 δευτερόλεπτα, η καθυστέρηση να διαρκεί wait δευτερόλεπτα.

Η μεταβλητή wait είναι ένα όνομα για μια τιμή. Αυτή η τιμή θα πρέπει να χρησιμοποιηθεί ως παράμετρος στη sleep, αντί για την αριθμητική σταθερά 3.

            
                wait = 7500000 * 365 * 24 * 60 * 60
                time.sleep(wait)
            
        

Επιλογές: Τί Ώρα Είναι;

Ο Deep Thought, που γνωρίζει την Απάντηση για τη Ζωή, το Σύμπαν και τα Πάντα, δεν θα έπρεπε να καλημερίζει τον χρήστη ακόμα κι όταν είναι βράδι... Θα θέλαμε το πρόγραμμα να είναι περισσότερο ευέλικτο και να προσαρμόζει τον χαιρετισμό του ανάλογα με την ώρα της ημέρας.

Tο πρόγραμμά μας πρέπει να γνωρίζει την ώρα της ημέρας. Ευτυχώς ο υπολογιστής μας ξέρει τι ώρα είναι, οπότε απλά θα τον ρωτήσουμε.

Πριν από το σημείο όπου το πρόγραμμά σας καλημερίζει το χρήστη, προσθέστε την εντολή:

            
                hour = time.localtime().tm_hour
            
        
Η localtime της βιβλιοθήκης time επιστρέφει πληροφορίες για την ημερομηνία και την ώρα του συστήματος. Οι συντακτικές λεπτομέρειες δεν έχουν σημασία αυτή την στιγμή.

Εδώ χρησιμοποιήσαμε και πάλι τη βιβλιοθήκη time. Οι συντακτικές λεπτομέρειες δεν έχουν σημασία, αυτό που μας νοιάζει είναι πως η τιμή της μεταβλητής hour είναι η τρέχουσα ώρα του συστήματος: ένας ακέραιος από το 0 μέχρι και το 23.

Αν θέλετε να επιβεβαιώσετε ότι η μεταβλητή hour περιέχει πράγματι την ώρα του συστήματος, μπορείτε να προσθέσετε προσωρινά μια print που εμφανίζει την τιμή της hour στην οθόνη.

Αμέσως μετά την print("Καλημέρα", name) με την οποία το πρόγραμμα καλημερίζει το χρήστη, προσθέστε την εντολή:

            
                print("Καλημέρα", name)
                print("Καλησπέρα", name)
            
        

Εμείς θέλουμε να εκτελείται μόνο η μία από τις δύο εντολές, ανάλογα με την ώρα της ημέρας, δηλαδή την τιμή της μεταβλητής hour. Θα πρέπει λοιπόν να προγραμματίσουμε τον Deep Thought έτσι ώστε να ελέγχει την hour και να εμφανίζει διαφορετικό μήνυμα ανάλογα με το αποτέλεσμα του ελέγχου.

Τροποποιήστε το σημείο όπου το πρόγραμμα καλημερίζει το χρήστη:

            
                if hour < 16:
                print("Καλημέρα", name)
                else:
                print("Καλησπέρα", name)
            
        

Η if συνοδεύεται από μια συνθήκη, η οποία ελέγχεται κατά την εκτέλεση του προγράμματος και μπορεί να είναι αληθής (True) ή ψευδής (False).

Το σύμβολο < χρησιμοποιείται για την σύγκριση τιμών, όπως επίσης και τα <=, > και >=. Για να ελέγξουμε αν δύο τιμές είναι ίσες χρησιμοποιούμε το == και για να ελέγξουμε αν είναι διαφορετικές το !=.

Μην παραλείπετε το σύμβολο : μετά την συνθήκη της if και την else.

Δοκιμάστε να εκτελέσετε το πρόγραμμά σας. Δεν πρόκειται να λειτουργήσει, θα εμφανιστεί ένα μήνυμα σφάλματος.

IndentationError: expected an indented block

Στις περισσότερες γλώσσες προγραμματισμού δεν θα αντιμετωπίζατε κάποιο πρόβλημα, όμως η Python έχει μια “ευαισθησία”: Οι εντολές που εκτελούνται στη μία ή στην άλλη περίπτωση πρέπει να ξεχωρίζουν, πρέπει με κάποιον τρόπο να επισημανθεί ότι οι εντολές αυτές ανήκουν αντίστοιχα στην if και την else.

Προσθέστε 4 κενά πριν τις δύο print κι εκτελέστε το πρόγραμμα.

            
                if hour < 16:
                    print("Καλημέρα", name)
                else:
                    print("Καλησπέρα", name)
            
        

Οι εντολές που ακολουθούν την if είναι στοιχισμένες δεξιότερα από αυτή. Η στοίχιση επιτυγχάνεται εισάγοντας κενά πριν από τις εντολές, τα οποία υποδηλώνουν ότι αυτές οι εντολές θα εκτελεστούν μόνο αν η συνθήκη είναι αληθής. Παρομοίως, οι εντολές που ακολουθούν την else είναι στοιχισμένες δεξιότερα και θα εκτελεστούν μόνο εφόσον η συνθήκη είναι ψευδής.

Αν η τιμή της hour είναι 14 (δηλαδή αν το πρόγραμμα εκτελεστεί στις 2 το μεσημέρι), ποιο μήνυμα χαιρετισμού θα εμφανιστεί στην οθόνη;

Αν η τιμή της hour είναι 16 (δηλαδή αν το πρόγραμμα εκτελεστεί στις 4 το μεσημέρι), ποιο μήνυμα χαιρετισμού θα εμφανιστεί στην οθόνη;

Εκτελέστε το πρόγραμμα. Κατά την εκτέλεση, θα ελεγχθεί, λόγω της if η συνθήκη hour < 16. Είτε η συνθήκη είναι αληθής, είτε όχι, θα εκτελεστεί μία από τις δύο print, οπότε σίγουρα θα εμφανιστεί ένα από τα δύο μηνύματα.

Για να δείτε το άλλο μήνυμα να εμφανίζεται και να διαπιστώσετε ότι το πρόγραμμα πράγματι “προσαρμόζεται” ανάλογα με την ώρα, θα πρέπει να αλλάξετε την ώρα! Tροποποιήστε λοιπόν προσωρινά την εντολή του βήματος 10 που δίνει τιμή στη μεταβλητή hour.

                
                    # hour = time.localtime().tm_hour
                    hour = ...
                
            

Επιλέξτε μια κατάλληλη τιμή για την hour, ώστε να εμφανιστεί ο άλλος χαιρετισμός από αυτόν που εμφανίζεται τώρα.

Αν αρχικά, την ώρα που θα εκτελέσετε το πρόγραμμα, εμφανίζεται ο χαιρετισμός Καλημέρα, τότε δώστε στην hour μια οποιαδήποτε τιμή μεγαλύτερη ή ίση από το 16. Αν εκτελέσετε το πρόγραμμα, θα πρέπει να δείτε τον χαιρετισμό Καλησπέρα να εμφανίζεται.

Αντίθετα, αν αρχικά εμφανίζεται ο χαιρετισμός Καλησπέρα, τότε δώστε στην hour μια οποιαδήποτε τιμή μικρότερη από από το 16. Αν εκτελέσετε το πρόγραμμα, θα πρέπει να δείτε τον χαιρετισμό Καλημέρα να εμφανίζεται.

Κι Άλλες Επιλογές: Η Ηλικία Μετράει

Θα επεκτείνουμε το πρόγραμμα του Deep Thought, έτσι ώστε να ρωτά το χρήστη ποιο είναι το έτος γέννησής του και να διαφοροποιεί τη συμπεριφορά του ανάλογα με την ηλικία του χρήστη.

Για να υπολογίσει το πρόγραμμα την ηλικία του χρήστη, θα πρέπει να γνωρίζει ποιο είναι το τρέχον έτος.

Προσθέστε στο πρόγραμμά σας την παρακάτω εντολή, με την οποία η τιμή της μεταβλητής year γίνεται ίση με το τρέχον έτος.

        
            year = time.localtime().tm_year
        
    

Πριν την ανακοίνωση της Απάντησης, προσθέστε τις κατάλληλες εντολές στο πρόγραμμα έτσι ώστε να ζητά από το χρήστη να πληκτρολογήσει το έτος γέννησής του και να το αποθηκεύει σε μια μεταβλητή με όνομα birth. Για παράδειγμα:

Ποιό έτος γεννήθηκες;
2001

Mπορείτε να ανατρέξετε στο βήμα 5, όπου γίνεται κάτι ανάλογο για το όνομα του χρήστη. Θα χρειαστείτε την print για να εμφανίσει το πρόγραμμα το μήνυμα Ποιό έτος γεννήθηκες; και την input για να ανακτηθεί το κείμενο που θα πληκτρολογήσει ο χρήστης.

Οι εντολές που θα πρέπει να προσθέσετε στο πρόγραμμα είναι οι εξής:

            
                print("Ποιο έτος γεννήθηκες;")
                birth = input()
            
        

Γνωρίζοντας το τρέχον έτος year και το έτος γέννησης του χρήστη birth, προσπαθήστε να υπολογίσετε την ηλικία του χρήστη και να αποθηκεύσετε την τιμή σε μια μεταβλητή age.

Μπορείτε να υπολογίσετε την ηλικία του χρήστη χρησιμοποιώντας μια αριθμητική έκφραση. Συγκεκριμένα, θα πρέπει να αφαιρέσετε το έτος γέννησης του χρήστη (birth) από το τρέχον έτος (year). Μην ξεχάσετε να ονομάσετε το αποτέλεσμα age.

Οι εντολή που θα πρέπει να προσθέσετε στο πρόγραμμα είναι η εξής:

                
                    age = year - birth
                
            

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

TypeError: unsupported operand type(s) for -: 'int' and 'str'

Το μήνυμα εξηγεί ότι δεν είναι δυνατές οι πράξεις ανάμεσα σε αριθμούς και αλφαριθμητικές τιμες (κείμενα). Ίσως αναρωτιέστε που βρέθηκε η αλφαριθμητική τιμή. Η input, που χρησιμοποιήσατε για να διαβάσετε το έτος γέννησης που πληκτρολογεί ο χρήστης, επιστρέφει την απάντηση του χρήστη σε μορφή κειμένου, κι έτσι η τιμή της birth θα έχει τη μορφή "2001" και όχι 2001.

Επιστρέψτε στη γραμμή όπου διαβάζεται το έτος γέννησης του χρήστη και τροποποιήστε την ως εξής:

        
            birth = int(input())
        
    
H int μετατρέπει το κείμενο που πληκτρολογεί ο χρήστης σε ακέραιο αριθμό. Εκτελέστε και πάλι το πρόγραμμά σας και επιβεβαιώστε ότι δεν εμφανίζεται πια μήνυμα λάθους.

Συμπληρώστε το πρόγραμμά σας, έτσι ώστε να εμφανίζει στο χρήστη την ηλικία του. Για παράδειγμα:

Ποιό έτος γεννήθηκες;
2001
Είσαι 15 χρονών.

Οι εντολή που θα πρέπει να προσθέσετε στο πρόγραμμα είναι η εξής:

            
                print("Είσαι", age, "χρονών.")
            
        

Τροποποιήστε το πρόγραμμα και χρησιμοποιήστε την if, έτσι ώστε το μήνυμα που εμφανίζεται να εξαρτάται από το αν ο χρήστης έχει ξεπεράσει τα 18 έτη. Για παράδειγμα:

Ποιό έτος γεννήθηκες;
2001
15 χρονών, η κατάλληλη ηλικία να μάθεις την Απάντηση.

Ποιό έτος γεννήθηκες;
1976
Πάτησες τα 40, είναι λίγο αργά να μάθεις την Απάντηση.

Εφόσον χρειάζεται το πρόγραμμα να εκτελεί διαφορετικές εντολές ανάλογα με το αν η ηλικία είναι μικρότερη ή όχι του 18, θα πρέπει να χρησιμοποιήσετε την ifelse, ώστε το πρόγραμμα να εμφανίζει διαφορετικά μηνύματα σε κάθε περίπτωση.

Μπορείτε να ανατρέξετε στα βήματα 12-13, όπου το πρόγραμμα χρησιμοποιεί την ifelse για να ελέγξει την ώρα και να εμφανίσει τον κατάλληλο χαιρετισμό.

Σε διαφορετικό σημείο, η ifelse χρησιμοποιείται, όπως φαίνεται στον κώδικα που ακολουθεί, ώστε το πρόγραμμα να ελέγχει την ώρα (τη μεταβλητή hour) και να εμφανίζει διαφορετικό χαιρετισμό ανάλογα με το αποτέλεσμα του ελέγχου.

            
                if hour < 16:
                    print("Καλημέρα", name)
                else:
                    print("Καλησπέρα", name)
            
        

Κάτι ανάλογο θα χρειαστεί να κάνετε και σε αυτό το βήμα, ελέγχοντας αν η ηλικία του χρήστη (η μεταβλητή age) είναι μικρότερη ή όχι του 18, και εμφανίζοντας το αντίστοιχο μήνυμα.

Οι εντολές που θα χρειαστεί να προσθέσετε στο πρόγραμμα είναι οι εξής:

            
                if age < 18:
                    print(age, "χρονών, η κατάλληλη ηλικία να μάθεις την Απάντηση.")
                else:
                    print("Πάτησες τα", age, ", είναι λίγο αργά να μάθεις την Απάντηση.")
            
        

Εκτελέστε το πρόγραμμα σας δύο φορές. Την πρώτη, παίζοντας το ρόλο του χρήστη, δώστε ένα έτος γέννησης που αντιστοιχεί σε ηλικία μικρότερη των 18 ετών, ενώ τη δεύτερη το αντίθετο. Σε κάθε περίπτωση, θα πρέπει να εμφανίζεται το αντίστοιχο μήνυμα.

Δεδομένου ότι το τρέχον έτος είναι 2016, δίνοντας τον αριθμό 2001 ως έτος γέννησης θα πρέπει να εμφανιστεί το μήνυμα:

15 χρονών, η κατάλληλη ηλικία να μάθεις την Απάντηση.

Αντίστοιχα, δίνοντας τον αριθμό 1978 ως έτος γέννησης, θα πρέπει να εμφανιστεί το μήνυμα:

Πάτησες τα 38, είναι λίγο αργά να μάθεις την Απάντηση.

Τροποποιήστε το πρόγραμμα έτσι ώστε η Απάντηση να εμφανίζεται μόνο στην περίπτωση που ο χρήστης δεν έχει ξεπεράσει τα 18 έτη. Δεν χρειάζεται να γράψετε καμία νέα εντολή, μόνο να μετακινήσετε κάποια/κάποιες από τις ήδη υπάρχουσες μέσα στην if του προηγούμενου βήματος.

Αν παρουσιαστεί κάποιο πρόβλημα, τότε θα πρέπει να βεβαιωθείτε ότι έχετε χρησιμοποιήσει σωστά τις εσοχές, μπροστά από τις εντολές που βρίσκονται μέσα στην if.

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

Αν μετακινήσετε αυτή την print μέσα στην if, και συγκεκριμένα μέσα στην περίπτωση όπου η ηλικία του χρήστη δεν έχει ξεπεράσει τα 18 έτη, τότε η Απάντηση δεν θα εμφανίζεται πάντα, αλλά μόνο σε αυτή την περίπτωση.

Μετακινήστε την print που εμφανίζει την Απάντηση μέσα στην if, όπως φαίνεται παρακάτω:

            
                if age < 18:
                    print(age, "χρονών, η κατάλληλη ηλικία να μάθεις την Απάντηση.")
                    print("Η Απάντηση είναι... ", answer)
                else:
                    print("Πάτησες τα", age, ", είναι λίγο αργά να μάθεις την Απάντηση.")
                print("Η Απάντηση είναι... ", answer)
            
        

Χρειάζεται προσοχή με τις εσοχές. Καθώς η print τοποθετείται μέσα στην πρώτη περίπτωση της if, θα πρέπει να "ευθυγραμμιστεί" με τις εντολές αυτής της περίπτωσης, χρησιμοποιώντας το κατάλληλο πλήθος κενών, πριν την εντολή.

Εκτελέστε το πρόγραμμα σας δύο φορές. Την πρώτη, παίζοντας το ρόλο του χρήστη, δώστε ένα έτος γέννησης που αντιστοιχεί σε ηλικία μικρότερη των 18 ετών, ενώ τη δεύτερη το αντίθετο. Η Απάντηση θα πρέπει να εμφανίζεται μόνο στην πρώτη περίπτωση.