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

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

Μια τιμή, όπως ένα γράμμα ή ένας αριθμός, είναι ένα από τα βασικά στοιχεία με τα οποία λειτουργεί ένα πρόγραμμα. Οι τιμές που έχουμε δει μέχρι τώρα είναι 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
>>> more@ = 1000000
SyntaxError: invalid syntax
>>> class = 'Advanced Theoretical Zymurgy'
SyntaxError: invalid syntax

Το 76trombones είναι μη αποδεκτό επειδή αρχίζει με αριθμό. Το more@ είναι μη αποδεκτό επειδή περιέχει έναν μη αποδεκτό χαρακτήρα, το @. Αλλά ποιο το πρόβλημα με το 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 δίνει τα δύο τελευταία του ψηφία.

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

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

>>> πρώτο = 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'
>>> ταχύτητα = input(προτροπή)
Με τί...ταχύτητα πετάει ένα χελιδόνι;
17
>>> int(ταχύτητα)
17
>>> int(ταχύτητα) + 5
22

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

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

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

Σχόλια

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

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

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

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

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

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

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

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

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.