Μεταβλητές, εκφράσεις και εντολές

Τιμές και τύποι

Μια τιμή, όπως ένα γράμμα ή ένας αριθμός, είναι ένα από τα βασικά στοιχεία με τα οποία λειτουργεί ένα πρόγραμμα. Οι τιμές που έχουμε δει μέχρι τώρα είναι 1, 2 και “Γειά σου κόσμε!”

Αυτές οι τιμές ανήκουν σε διαφορετικούς τύπους: το 2 είναι ένας ακέραιος αριθμός και το “Γειά σου κόσμε!” είναι μια συμβολοσειρά, που ονομάζεται επειδή περιέχει μια “σειρά” συμβόλων και γραμμάτων. Μπορείτε (εσείς αλλά και ο διερμηνέας) να εντοπίσετε συμβολοσειρές επειδή περικλείονται σε εισαγωγικά.

Η εντολή print λειτουργεί και για ακέραιους αριθμούς. Χρησιμοποιούμε την εντολή python για να ξεκινήσουμε τον διερμηνέα.

python
>>> print(4)
4

Εάν δεν είστε σίγουροι τι τύπου είναι μια τιμή, ο διερμηνέας μπορεί να σας πει.

>>> type('Hello, World!')
<class 'str'>
>>> type(17)
<class 'int'>

Δεν αποτελεί έκπληξη το γεγονός ότι οι συμβολοσειρές ανήκουν στον τύπο str και οι ακέραιοι στον τύπο int. Λιγότερο προφανώς, οι αριθμοί με υποδιαστολή ανήκουν σε έναν τύπο που ονομάζεται float, επειδή αυτοί οι αριθμοί αντιπροσωπεύονται από μια μορφή που ονομάζεται floating point.

>>> type(3.2)
<class 'float'>

Τι γίνεται με τις τιμές όπως το “17” και το “3.2”; Μοιάζουν με αριθμούς, αλλά περικλείονται με εισαγωγικά σαν συμβολοσειρές.

>>> type('17')
<class 'str'>
>>> type('3.2')
<class 'str'>

Είναι συμβολοσειρές.

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

>>> print(1,000,000)
1 0 0

Ε, αυτό δεν το περιμέναμε καθόλου! Η Python ερμηνεύει το 1,000,000 ως μια ακολουθία ακέραιων διαχωρισμένων με κόμμα, την οποία εκτυπώνει με κενά μεταξύ τους.

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

Μεταβλητές

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

Μια εντολή εκχώρησης δημιουργεί νέες μεταβλητές και τους δίνει τιμές:

>>> message = 'Και τώρα κάτι εντελώς διαφορετικό'
>>> n = 17
>>> pi = 3.1415926535897931

Αυτό το παράδειγμα υλοποιεί τρεις αναθέσεις. Η πρώτη αναθέτει μια συμβολοσειρά σε μια νέα μεταβλητή με το όνομα message, η δεύτερη αναθέτει τον ακέραιο 17 στο n και η τρίτη αναθέτει την τιμή (κατά προσέγγιση) του π στο pi.

Για να εμφανίσετε την τιμή μιας μεταβλητής, μπορείτε να χρησιμοποιήσετε μια εντολή print:

>>> print(n)
17
>>> print(pi)
3.141592653589793

Ο τύπος μιας μεταβλητής είναι ο τύπος της τιμής στην οποία αναφέρεται.

>>> type(message)
<class 'str'>
>>> type(n)
<class 'int'>
>>> type(pi)
<class 'float'>

Ονόματα μεταβλητών και δεσμευμένες λέξεις

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

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

Σε ένα όνομα μπορεί να χρησιμοποιηθεί και ο χαρακτήρας υπογράμμισης (_) ή κάτω παύλα. Συχνά χρησιμοποιείται σε ονόματα με πολλές λέξεις, όπως my_name ή airspeed_of_unladen_swallow. Τα ονόματα μεταβλητών μπορούν να ξεκινούν με χαρακτήρα υπογράμμισης, αλλά γενικά αποφεύγουμε να το κάνουμε αυτό, εκτός εάν γράφουμε κώδικα βιβλιοθήκης για χρήση από άλλους.

Εάν δώσετε σε μια μεταβλητή ένα μη αποδεκτό όνομα, προκύπτει σφάλμα σύνταξης:

>>> 76trombones = 'big parade'
SyntaxError: invalid syntax
>>> [email protected] = 1000000
SyntaxError: invalid syntax
>>> class = 'Advanced Theoretical Zymurgy'
SyntaxError: invalid syntax

Το 76trombones είναι μη αποδεκτό επειδή αρχίζει με αριθμό. Το [email protected] είναι μη αποδεκτό επειδή περιέχει έναν μη αποδεκτό χαρακτήρα, @. Αλλά ποιο το πρόβλημα με το class;

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

Η Python διαθέτει 35 δεσμευμένες λέξεις:

and       del       from      None      True
as        elif      global    nonlocal  try
assert    else      if        not       while
break     except    import    or        with
class     False     in        pass      yield
continue  finally   is        raise     async
def       for       lambda    return    await

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

Εντολές

Μια εντολή είναι μια μονάδα κώδικα που μπορεί να εκτελέσει ο διερμηνέας της Python. Έχουμε συναντήσει δύο είδη εντωλών: την εντολή print και την ανάθεση τιμής.

Όταν πληκτρολογείτε μια εντολή σε διαδραστική λειτουργία, ο διερμηνέας την εκτελεί και εμφανίζει το αποτέλεσμα, εάν προκύπτει κάποιο.

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

Για παράδειγμα, το script

print(1)
x = 2
print(x)

παράγει την έξοδο

1
2

Η εντολή εκχώρησης δεν παράγει έξοδο.

Τελεστές και τελεστέοι

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

Οι τελεστές +, -, *, / και ** εκτελούν πρόσθεση, αφαίρεση, πολλαπλασιασμό, διαίρεση και ύψωση σε δύναμη, όπως στα παρακάτω παραδείγματα:

20 + 32
ώρα - 1
ώρα * 60 + λεπτά
λεπτά / 60
5**2
(5 + 9) * (15 - 7)

Υπήρξε μια αλλαγή στον τελεστή της διαίρεσης, μεταξύ Python 2.x και Python 3.x. Στην Python 3.x, το αποτέλεσμα αυτής της διαίρεσης είναι float:

>>> λεπτά = 59
>>> λεπτά / 60
0.9833333333333333

Ο τελεστής διαίρεσης στην Python 2.0, όταν διαιρεί δύο ακέραιους αριθμούς περικόπτει το αποτέλεσμα σε ακέραιο:

>>> λεπτά = 59
>>> λεπτά / 60
0

Για να λάβετε την ίδια απάντηση στην Python 3.0, χρησιμοποιήστε τη ευκλείδεια διαίρεση (// integer).

>>> λεπτά = 59
>>> λεπτά // 60
0

Στην Python 3.0, η ακέραιη διαίρεση λειτουργεί πολύ καλύτερα από ό,τι θα περιμένατε εάν εισαγάγατε την έκφραση σε μια αριθμομηχανή.

Εκφράσεις

Μια έκφραση είναι ένας συνδυασμός τιμών, μεταβλητών και τελεστών. Μια τιμή, από μόνη της, θεωρείται ως μία έκφραση και το ίδιο και μια μεταβλητή. Έτσι, τα παρακάτω είναι αποδεκτές μορφές εκφράσεων (υποθέτοντας ότι στη μεταβλητή x έχει εκχωρηθεί μία τιμή):

17
x
x + 17

Εάν πληκτρολογήσετε μια έκφραση σε διαδραστική λειτουργία, ο διερμηνέας την υπολογίζει και εμφανίζει το αποτέλεσμα:

>>> 1 + 1
2

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

Άσκηση 1: Πληκτρολογήστε τις ακόλουθες εντολές στον διερμηνέα της Python για να δείτε τι κάνουν:

5
x = 5
x + 1

Προτεραιότητα τελεστών

Όταν περισσότεροι από ένας τελεστές εμφανίζονται σε μία έκφραση, η σειρά εκτέλεσης εξαρτάται από τους κανόνες προτεραιότητας των πράξεων. Για τους μαθηματικούς τελεστές, αριθμητικούς, η Python ακολουθεί τη μαθηματική σύμβαση. Το ακρωνύμιο PEMDAS είναι ένας τρόπος για να θυμάστε τον κανόνα:

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

Τελεστής Modulus/Ακέραιο Υπόλοιπο

Ο τελεστής του ακεραίου υπολοίπου εφαρμόζεται σε ακεραίους και επιστρέφει το υπόλοιπο του προκύπτει όταν πρώτος τελεστέος διαιρεθεί με τον δεύτερο. Στην Python, ο τελεστής του ακεραίου υπολοίπου είναι το σύμβολο επί τοις εκατό (%). Η σύνταξη είναι η ίδια όπως και στους υπόλοιπους τελεστές:

>>> πηλίκο = 7 // 3
>>> print(πηλίκο)
2
>>> υπόλοιπο = 7 % 3
>>> print(υπόλοιπο)
1

Άρα το 7 διαιρούμενο με το 3 είναι 2 με 1 να περισσεύει.

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

Μπορείτε επίσης να εξαγάγετε το τελευταίο ψηφίο ή τα τελευταίο ψηφία ενός αριθμού. Για παράδειγμα, το x % 10 δίνει το τελευταίο ψηφίο του x (στη βάση 10). Ομοίως, το x % 100 δίνει τα δύο τελευταία του ψηφία.

Τελεστές συμβολοσειρών

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

>>> πρώτο = 10
>>> δεύτερο = 15
>>> print(πρώτο + δεύτερο)
25
>>> πρώτο = '100'
>>> δεύτερο = '150'
>>> print(πρώτο + δεύτερο)
100150

Ο τελεστής * λειτουργεί επίσης με συμβολοσειρές πολλαπλασιάζοντας το περιεχόμενο μιας συμβολοσειράς με έναν ακέραιο. Για παράδειγμα:

>>> πρώτο = 'Τεστ '
>>> δεύτερο = 3
>>> print(πρώτο * δεύτερο)
Τεστ Τεστ Τεστ

Ζητώντας είσοδο από το χρήστη

Μερικές φορές θέλουμε να πάρουμε την τιμή μιας μεταβλητής από τον χρήστη, μέσω του πληκτρολογίου του. Η Python περιέχει μια ενσωματωμένη συνάρτηση που ονομάζεται input και λαμβάνει είσοδο από το πληκτρολόγιο1. Όταν καλείτε αυτή η συνάρτηση, το πρόγραμμα σταματά και περιμένει τον χρήστη να πληκτρολογήσει κάτι. Όταν ο χρήστης πατήσει Return ή Enter, το πρόγραμμα συνεχίζει την εκτέλεσή του και η input επιστρέφει αυτό που ο χρήστης πληκτρολόγησε ως συμβολοσειρά.

>>> inp = input()
Some silly stuff
>>> print(inp)
Some silly stuff

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

>>> όνομα = input('Πώς σε λένε;\n')
Πώς σε λένε;
Chuck
>>> print(name)
Chuck

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

Εάν ο χρήστης θα πρέπει να πληκτρολογήσει έναν ακέραιο, μπορείτε να δοκιμάσετε να μετατρέψετε την τιμή επιστροφής σε int χρησιμοποιώντας τη συνάρτηση int():

>>> προτροπή = 'Με τί...ταχύτητα πετάει ένα χελιδόνι;\n'
>>> speed = input(προτροπή)
Με τί...ταχύτητα πετάει ένα χελιδόνι;
17
>>> int(ταχύτητα)
17
>>> int(ταχύτητα) + 5
22

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

>>> speed = input(προτροπή)
Με τί...ταχύτητα πετάει ένα χελιδόνι;
Τί εννοείς, ένα Αφρικανικό ή Ευρωπαϊκό χελιδόνι;
>>> int(ταχύτητα)
ValueError: invalid literal for int() with base 10:

Θα μάθουμε πως να χειριζόμαστε αυτά τα λάθη αργότερα.

Σχόλια

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

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

# υπολογίζει το ποσοστό της ώρας που έχει παρέλθει
ποσοστό = (λεπτά * 100) / 60

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

ποσοστό = (λεπτά * 100) / 60     # ποσοστό της ώρας

Ότι γράψετε από το # έως το τέλος της γραμμής αγνοείται, δεν έχει καμία επίδραση στο πρόγραμμα.

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

Αυτό το σχόλιο είναι περιττό και άχρηστο για τον κώδικα:

v = 5     # αναθέτει το 5 στο v

Αυτό το σχόλιο περιέχει χρήσιμες πληροφορίες που δεν περιέχονται στον κώδικα:

v = 5     # ταχύτητα σε μέτρα/δευτερόλεπτο.

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

Επιλογή μνημονικών ονομάτων μεταβλητών

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

a = 35.0
b = 12.50
c = a * b
print(c)
ώρες = 35.0
ωρομίσθιο = 12.50
μισθός = ώρες * ωρομίσθιο
print(μισθός)
x1q3z9ahd = 35.0
x1q3z9afd = 12.50
x1q3p9afd = x1q3z9ahd * x1q3z9afd
print(x1q3p9afd)

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

Ονομάζουμε, αυτά τα σοφά επιλεγμένα ονόματα μεταβλητών, “μνημονικά ονόματα μεταβλητών”. Η λέξη μνημονική2 Σημαίνει “βοήθημα μνήμης”. Επιλέγουμε μνημονικά ονόματα μεταβλητών για να μας βοηθήσουν να θυμηθούμε γιατί δημιουργήσαμε τη μεταβλητή εξαρχής.

Παρόλο που όλα αυτά ακούγονται υπέροχα και είναι πολύ καλή ιδέα να χρησιμοποιείτε μνημονικά ονόματα μεταβλητών, τα μνημονικά ονόματα μεταβλητών μπορούν να εμποδίσουν την ικανότητα ενός αρχάριου προγραμματιστή να αναλύσει και να κατανοήσει τον κώδικα. Αυτό συμβαίνει επειδή οι αρχάριοι προγραμματιστές δεν έχουν απομνημονεύσει ακόμη τις δεσμευμένες λέξεις (υπάρχουν μόνο 33) και μερικές φορές μεταβλητές με πολύ περιγραφικά ονόματα αρχίζουν να μοιάζουν με μέρος της γλώσσας και όχι μόνο με καλά επιλεγμένα ονόματα μεταβλητών.

Ρίξτε μια γρήγορη ματιά στον ακόλουθο δείγμα κώδικα Python, το οποίο λειτουργεί επαναληπτικά. Θα καλύψουμε τους βρόχους σύντομα, αλλά προς το παρόν προσπαθήστε να κατανοήσετε τι σημαίνει αυτό:

for word in words:
    print(word)

Τι συμβαινει εδω? Ποιες από τις λέξεις (for, word, in, κ.λπ.) είναι δεσμευμένες λέξεις και ποιες είναι απλά ονόματα μεταβλητών; Κατανοεί η Python σε θεμελιώδες επίπεδο την έννοια των λέξεων; Οι αρχάριοι προγραμματιστές έχουν πρόβλημα να διαχωρίσουν ποια μέρη του κώδικα πρέπει να παραμείνουν ίδια με αυτό το παράδειγμα και ποια μέρη του κώδικα είναι απλώς επιλογές που γίνονται από τον προγραμματιστή.

Ο παρακάτω κωδικός είναι ισοδύναμος με τον παραπάνω κωδικό:

for slice in pizza:
    print(slice)

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

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

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

for word in words:
    print(word)

Τα μέρη του κώδικα που ορίζονται από την Python (for, in, print και :) είναι με έντονα γράμματα και οι μεταβλητές που επιλέγονται από τον προγραμματιστή (word και words) δεν είναι έντονες. Πολλοί συντάκτες κειμένου γνωρίζουν τη σύνταξη της Python και θα χρωματίσουν τις δεσμευμένες λέξεις διαφορετικά, για να σας δώσουν κάποιες ενδείξεις, ώστε να διαχωρήσετε τις μεταβλητές από τις δεσμευμένες λέξεις. Μετά από λίγο θα αρχίσετε να διαβάζετε Python και θα προσδιορίζετε γρήγορα τι είναι μεταβλητή και τι είναι δεσμευμένη λέξη.

Εκσφαλμάτωση

Σε αυτό το σημείο, το σφάλμα σύνταξης που πιθανότατα θα κάνετε είναι ένα μη αποδεκτό όνομα μεταβλητής, όπως class και yield, οι οποίες είναι δεδμευμένες λέξεις, ή odd~job και US$, που περιέχουν μη αποδεκτούς χαρακτήρες.

Εάν βάλετε ένα κενό σε ένα όνομα μεταβλητής, η Python θα πιστεψει ότι είναι δύο τελεστέοι χωρίς τελεστή:

>>> bad name = 5
SyntaxError: invalid syntax
>>> month = 09
  File "<stdin>", line 1
    month = 09
             ^
SyntaxError: invalid token

Για σφάλματα σύνταξης, τα μηνύματα σφάλματος δεν βοηθούν πολύ. Τα πιο συνηθισμένα μηνύματα είναι SyntaxError: invalid syntax και SyntaxError: invalid token, κανένα από τα οποία δεν είναι πολύ κατατοπιστικό.

Το σφάλμα χρόνου εκτέλεσης που είναι πιο πιθανό να κάνετε είναι “χρήση πριν από τον ορισμό” δηλαδή, το να προσπαθήσετε να χρησιμοποιήσετε μια μεταβλητή προτού της εκχωρήσετε μια τιμή. Αυτό μπορεί να συμβεί αν γράψετε λάθος ένα όνομα μεταβλητής:

>>> principal = 327.68
>>> interest = principle * rate
NameError: name 'principle' is not defined

Τα ονόματα των μεταβλητών κάνουν διάκριση πεζών-κεφαλαίων (case sensitive), οπότε το LaTeX δεν είναι το ίδιο με το laTeX.

Σε αυτό το σημείο, η πιο πιθανή αιτία σημασιολογικού σφάλματος είναι η σειρά των λειτουργιών. Για παράδειγμα, για να αξιολογήσετετο 1/2π, μπορεί να μπείτε στον πειρασμό να γράψετε

>>> 1.0 / 2.0 * pi

Αλλά η διαίρεση εκτελείτε πρώτη, οπότε θα πάρετε το π/2, το οποίο δεν είναι το ίδιο! Δεν υπάρχει τρόπος για την Python να γνωρίζει τι θέλατε να γράψετε, οπότε σε αυτήν την περίπτωση δεν λαμβάνετε μήνυμα σφάλματος. Απλά παίρνετε λάθος απάντηση.

Γλωσσάριο

ακέραιος (integer)
Ένας τύπος που αναπαριστά αριθμούς χωρίς δεκαδικό μέρος.
ανάθεση - εκχώρηση τιμής
Μια εντολή που αναθέτει μια τιμή σε μια μεταβλητή.
αξιολόγηση (evaluate)
Το να υπολογίσουμε μια παράσταση, εκτελώντας τις πράξεις, για να αποδώσουμε μια ενιαία τιμή.
έκφραση
Ένας συνδυασμός μεταβλητών, τελεστών και σταθερών που ως αποτέλεσμα έχει μία και μοναδική τιμή.
εντολή - δήλωση
Ένα τμήμα κώδικα που αντιπροσωπεύει μια εντολή ή ενέργεια. Μέχρι στιγμής, οι εντολές που είδαμε είναι εκχωρήσεις τιμών και εντολές εκτύπωσης εκφράσεων.
δεσμευμένη λέξη
Μία λέξη, η οποία έχει δεσμευθεί από τον μεταγλωττιστής για την εκτέλεση του προγράμματος. Δεν επιτρέπεται η χρήση δεσμευμένων λέξεων όπως if, def και while, ως ονόματα μεταβλητών.
κανόνες προτεραιότητας
Το σύνολο των κανόνων που διέπουν τη σειρά αξιολόγησης εκφράσεων, που περιλαμβάνουν πολλαπλούς τελεστές και τελεστέους.
κινητής υποδιαστολής (floating point)
Ένας τύπος που αναπαριστά αριθμούς με δεκαδικό μέρος.
μεταβλητή
Ένα όνομα που αναφέρεται σε μία τιμή.
μνημονικό
Ένα βοήθημα μνήμης. Συχνά δίνουμε στις μεταβλητές μνημονικά ονόματα για να μας βοηθήσουν να θυμηθούμε τι έχουμε αποθηκεύσει στη μεταβλητή.
συμβολοσειρά
Ένας τύπος που αντιπροσωπεύει ακολουθίες χαρακτήρων.
συνένωση (concatenate)
Η ένωση δύο τελεστέων από άκρο σε άκρο.
σχόλιο
Πληροφορίες σε ένα πρόγραμμα που προορίζονται για άλλους προγραμματιστές (ή οποιονδήποτε διαβάζει τον πηγαίο κώδικα) και δεν έχουν καμία επίδραση στην εκτέλεση του προγράμματος.
τελεστέος
Μία από τις τιμές στις οποίες εφαρμόζεται ένας τελεστής.
τελεστής
Ένα ειδικό σύμβολο που αντιπροσωπεύει έναν απλό υπολογισμό όπως η πρόσθεση, ο πολλαπλασιασμός ή η συνένωση συμβολοσειρών.
τελεστής ακεραίου υπολοίπου (modulus)
Ένας τελεστής, που συμβολίζεται με το σύμβολο ποσοστού (%), λειτουργεί σε ακέραιους αριθμούς και δίνει το υπόλοιπο της ευκλείδειας διαίρεσης του πρώτου αριθμού με τον δεύτερο.
τιμή
Μία από τις βασικές μονάδες δεδομένων, που χειρίζεται ένα πρόγραμμα, όπως ένας αριθμός ή μια συμβολοσειρά.
τύπος
Μια κατηγορία τιμών. Οι τύποι που έχουμε δει μέχρι τώρα είναι ακέραιοι (τύπος int), αριθμοί κινητής υποδιαστολής (τύποςfloat) και συμβολοσειρές (τύπος str).

Ασκήσεις

Άσκηση 2: Γράψτε ένα πρόγραμμα που χρησιμοποιεί input για να ζητά από το χρήστη το όνομά του και στη συνέχεια τον καλωσορίζει.

Εισάγετε το όνομά σας: Chuck
Γειά σου Chuck

Άσκηση 3: Γράψτε ένα πρόγραμμα που προτρέπει τον χρήστη να εισάγει ώρες και ωρομίσθιο και να υπολογίζει τον ακαθάριστο μισθό του.

Εισάγετε τις Ώρες: 35
Εισάγετε το Ωρομίσθιο: 2.75
Μισθός: 96.25

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

Άσκηση 4: Ας υποθέσουμε ότι εκτελούμε τις ακόλουθες εντολές εκχώρησης:

πλάτος = 17
ύψος = 12.0

Για καθεμία από τις παρακάτω εκφράσεις, γράψτε την τιμή της έκφρασης και τον τύπο (της τιμής της έκφρασης).

  1. πλάτος // 2

  2. πλάτος / 2.0

  3. ύψος / 3

  4. 1 + 2 * 5

Χρησιμοποιήστε τον διερμηνέα της Python για να ελέγξετε τις απαντήσεις σας.

Άσκηση 5: Γράψτε ένα πρόγραμμα που ζητά από τον χρήστη μια θερμοκρασία σε βαθμούς Κελσίου, μετατρέψτε τη θερμοκρασία σε βαθμούς Φαρενάιτ και εκτυπώστε την θερμοκρασία που προκύπτει.


  1. Στην Python 2.0, αυτή η συνάρτηση ονομαζόταν raw_input.↩︎

  2. Βλ. Https://en.wikipedia.org/wiki/Mnemonic για εκτεταμένη περιγραφή της λέξης “μνημονική”.↩︎


Αν εντοπίσετε κάποιο λάθος σε αυτό το βιβλίο μην διστάσετε να μου στείλετε τη διόρθωση στο Github.