Μια τιμή, όπως ένα γράμμα ή ένας αριθμός, είναι ένα από τα βασικά στοιχεία με τα οποία λειτουργεί ένα πρόγραμμα. Οι τιμές που έχουμε δει μέχρι τώρα είναι 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 είναι ένας τρόπος για να θυμάστε τον κανόνα:
Parentheses/Παρενθέσεις, έχουν την υψηλότερη προτεραιότητα και μπορούν να χρησιμοποιηθούν για να αναγκάσετε μια έκφραση να υπολογιστεί με βάση τη σειρά που εσείς επιθυμείτε. Δεδομένου ότι οι εκφράσεις στις παρενθέσεις αξιολογούνται πρώτες, το 2 * (3 - 1)
είναι 4 και το (1 + 1) ** (5 - 2)
είναι 8. Μπορείτε επίσης να χρησιμοποιήσετε παρενθέσεις για να κάνετε μια έκφραση πιο εύκολα κατανοητή, όπως στο (λεπτό * 100) / 60
, ακόμα κι αν δεν αλλάζει το αποτέλεσμα.
Exponentiation/Ύψωση σε δύναμη, έχει την επόμενη υψηλότερη προτεραιότητα, οπότε 2 ** 1 + 1
κάνει 3, όχι 4, και 3 * 1 ** 3
κάνει 3 και όχι 27.
Multiplication/Πολλαπλασιασμός και Division/Διαίρεση, έχουν την ίδια προτεραιότητα, που είναι υψηλότερη από αυτήν της Addition/Πρόσθεσης και της Subtraction/Αφαίρεσης, που έχουν επίσης την ίδια προτεραιότητα. Άρα το 2 * 3 - 1
είναι 5, όχι 4, και το 6 + 4 / 2
είναι 8 και όχι 5.
Οι τελεστές με την ίδια προτεραιότητα εκτελούνται από αριστερά προς τα δεξιά. Άρα η έκφραση 5 - 3 - 1
κάνει 1 και όχι 3, γιατί το 5 - 3
εκτελείται πρώτο και μετά το 1
αφαιρείται από το 2.
Όταν έχετε αμφιβολίες, βάζετε πάντα παρενθέσεις στις εκφράσεις σας για να βεβαιωθείτε ότι οι υπολογισμοί εκτελούνται με τη σειρά που θέλετε.
Ο τελεστής του ακεραίου υπολοίπου εφαρμόζεται σε ακεραίους και επιστρέφει το υπόλοιπο του προκύπτει από την ευκλείδεια διαίρεση του πρώτου τελεστέου με τον δεύτερο. Στην 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 να γνωρίζει τι θέλατε να γράψετε, οπότε σε αυτήν την περίπτωση δεν λαμβάνετε μήνυμα σφάλματος. Απλά παίρνετε λάθος απάντηση.
if
, def
και while
, ως ονόματα μεταβλητών.
%
), λειτουργεί σε ακέραιους αριθμούς και δίνει το υπόλοιπο της ευκλείδειας διαίρεσης του πρώτου αριθμού με τον δεύτερο.
int
), αριθμοί κινητής υποδιαστολής (τύπος float
) και συμβολοσειρές (τύπος str
).
Άσκηση 2: Γράψτε ένα πρόγραμμα που χρησιμοποιεί την input
για να ζητά από το χρήστη το όνομά του και στη συνέχεια να τον καλωσορίζει.
Εισάγετε το όνομά σας: Chuck
Γειά σου Chuck
Άσκηση 3: Γράψτε ένα πρόγραμμα που προτρέπει τον χρήστη να εισάγει ώρες και ωρομίσθιο και να υπολογίζει τον ακαθάριστο μισθό του.
Εισάγετε τις Ώρες: 35
Εισάγετε το Ωρομίσθιο: 2.75
Μισθός: 96.25
Δεν ασχολούμαστε με το να βεβαιωθούμε ότι η αμοιβή έχει ακριβώς δύο ψηφία μετά την υποδιαστολή προς το παρόν. Αν θέλετε, μπορείτε να παίξετε με την ενσωματωμένη συνάρτηση της Python, την round
για να στρογγυλοποιήσετε σωστά την αμοιβή που προκύπτει, σε δύο δεκαδικά ψηφία.
Άσκηση 4: Ας υποθέσουμε ότι εκτελούμε τις ακόλουθες εντολές εκχώρησης:
πλάτος = 17
ύψος = 12.0
Για καθεμία από τις παρακάτω εκφράσεις, γράψτε την τιμή της έκφρασης και τον τύπο (της τιμής της έκφρασης).
πλάτος // 2
πλάτος / 2.0
ύψος / 3
1 + 2 * 5
Χρησιμοποιήστε τον διερμηνέα της Python για να ελέγξετε τις απαντήσεις σας.
Άσκηση 5: Γράψτε ένα πρόγραμμα που ζητά από τον χρήστη μια θερμοκρασία σε βαθμούς Κελσίου, μετατρέπει τη θερμοκρασία σε βαθμούς Φαρενάιτ και εκτυπώνει την θερμοκρασία που προκύπτει.
Στην Python 2.0, αυτή η συνάρτηση ονομαζόταν raw_input
.↩
Βλ. Https://en.wikipedia.org/wiki/Mnemonic για εκτεταμένη περιγραφή της λέξης “μνημονική”.↩
Αν εντοπίσετε κάποιο λάθος σε αυτό το βιβλίο μην διστάσετε να μου στείλετε τη διόρθωση στο Github.