Dr. Charles R. Severance
Η συγγραφή προγραμμάτων (ή προγραμματισμός) είναι μια πολύ δημιουργική και ανταποδοτική δραστηριότητα. Μπορεί να γράψετε προγράμματα για πολλούς λόγους, που κειμένονται από το να αποκομίσετε τα προς το ζην έως το να επιλύσετε ένα δύσκολο πρόβλημα ανάλυσης δεδομένων ή να διασκεδάσετε ή να βοηθήσετε κάποιον άλλο να λύσει ένα πρόβλημα. Αυτό το βιβλίο θεωρεί ότι όλοι πρέπει να γνωρίζουν πώς να προγραμματίζουν και ότι μόλις μάθουν πώς να προγραμματίζουν θα βρουν και τι θέλουν να κάνουν με τη νέα τους δεξιότητα.
Είμαστε περιτριγυρισμένοι στην καθημερινότητά μας από υπολογιστές, που κυμαίνονται από φορητούς υπολογιστές έως κινητά τηλέφωνα. Μπορούμε να φανταστούμε αυτούς τους υπολογιστές ως τους «προσωπικούς μας βοηθούς», που μπορούν να φροντίσουν πολλά πράγματα για λογαριασμό μας. Το υλικό στους σημερινούς υπολογιστές είναι ουσιαστικά κατασκευασμένο για να μας θέτει συνεχώς την ερώτηση “Τι θα θέλατε να κάνω στη συνέχεια;”
Οι προγραμματιστές προσθέτουν ένα λειτουργικό σύστημα και ένα σύνολο εφαρμογών στο υλικό και καταλήγουμε σε έναν Προσωπικό Ψηφιακό Βοηθό (PDA), που είναι ιδιαίτερα χρήσιμος και ικανός στο να μας βοηθήσει να κάνουμε πολλά διαφορετικά πράγματα.
Οι υπολογιστές μας είναι γρήγοροι και έχουν τεράστια ποσότητα μνήμης. Θα μπορούσαν να μας βοηθήσουν πολύ αν, μόνο, γνωρίζαμε τη γλώσσα στην οποία θα έπρεπε να μιλήσουμε, για να εξηγήσουμε στον υπολογιστή τι θα θέλαμε να «κάνει στη συνέχεια». Αν γνωρίζαμε αυτή τη γλώσσα, θα μπορούσαμε να πούμε στον υπολογιστή να κάνει διάφορες επαναλαμβανόμενες εργασίες για λογαριασμό μας. Είναι ενδιαφέρον ότι τα πράγματα που μπορούν να κάνουν οι υπολογιστές είναι συχνά τα πράγματα που εμείς οι άνθρωποι θεωρούμε βαρετά και μπερδεμένα.
Για παράδειγμα, κοιτάξτε τις τρεις πρώτες παραγράφους αυτού του κεφαλαίου και πείτε μου τη λέξη που χρησιμοποιείται περισσότερο και πόσες φορές χρησιμοποιείται η λέξη αυτή. Ενώ μπορούσατε να διαβάσετε και να καταλάβετε τις λέξεις σε λίγα δευτερόλεπτα, το να τις μετρήσετε είναι σχεδόν επώδυνο γιατί δεν είναι αυτό το είδος των προβλημάτων, για το οποίο έχει σχεδιαστεί, να λύνει, ο ανθρώπινος νους για να λύνει. Για έναν υπολογιστή, όμως, ισχύει το αντίθετο. Η ανάγνωση και η κατανόηση κειμένου από ένα κομμάτι χαρτί είναι δύσκολη για έναν υπολογιστή, αλλά το να μετρά λέξεις και να σας λέει πόσες φορές χρησιμοποιήθηκε η πιο συχνά επαναλαμβανόμενη λέξη, είναι πολύ εύκολο για αυτόν:
python words.py
Εισάγετε αρχείο: words.txt
to 16
Ο “προσωπικός βοηθός ανάλυσης πληροφοριών” μας είπε γρήγορα ότι η λέξη “to” χρησιμοποιήθηκε δεκαέξι φορές στις τρεις πρώτες παραγράφους αυτού του κεφαλαίου. (Προφανώς στην αγγλική έκδοση του βιβλίου αυτού.)
Αυτό ακριβώς το γεγονός, ότι δηλαδή οι υπολογιστές είναι καλοί σε πράγματα στα οποία δεν είναι οι άνθρωποι, είναι και ο λόγος που πρέπει να ειδικευτείτε στην ομιλία της “γλώσσας των υπολογιστών”. Μόλις μάθετε αυτήν τη νέα γλώσσα, θα μπορείτε να αναθέσετε καθημερινές, τετριμένες εργασίες στον σύντροφό σας (τον υπολογιστή), εξοικονομώντας χρόνο για τα πράγματα που σας ταιριάζουν και αγαπάτε. Εσείς συνεισφέρετε σε δημιουργικότητα, διαίσθηση και εφευρετικότητα σε αυτήν τη συνεργασία.
Παρόλο που αυτό το βιβλίο δεν προορίζεται για επαγγελματίες προγραμματιστές, ο προγραμματισμός επαγγελματικά μπορεί να είναι μια πολύ αποδοτική δουλειά, τόσο οικονομικά, όσο και προσωπικά. Η δημιουργία χρήσιμων, κομψών και έξυπνων προγραμμάτων, για χρήση από άλλους, είναι μια πολύ δημιουργική δραστηριότητα. Ο υπολογιστής σας ή ο προσωπικός ψηφιακός βοηθός (PDA) σας, συνήθως περιέχει πολλά διαφορετικά προγράμματα, από πολλές διαφορετικές ομάδες προγραμματιστών, που καθένα αγωνίζεται για την προσοχή και το ενδιαφέρον σας. Προσπαθούν, με τον καλύτερο δυνατό τρόπο, να καλύψουν τις ανάγκες σας και να σας προσφέρουν μια εξαιρετική εμπειρία χρήσης. Σε ορισμένες περιπτώσεις, όταν επιλέγετε ένα κομμάτι λογισμικού, οι προγραμματιστές αποζημιώνονται άμεσα λόγω της επιλογής σας.
Αν σκεφτούμε τα προγράμματα ως τη δημιουργική παραγωγή ομάδων προγραμματιστών, ίσως το παρακάτω σχήμα να είναι μια πιο λογική εκδοχή του PDA μας:
Προς το παρόν, το κύριο κίνητρό μας δεν είναι να κερδίσουμε χρήματα ή να ευχαριστήσουμε τους τελικούς χρήστες, αλλά αντίθετα να είμαστε πιο παραγωγικοί στο χειρισμό των δεδομένων και των πληροφοριών που θα συναντήσουμε στην καθημερινή μας ζωή. Όταν ξεκινάτε για πρώτη φορά, είστε και ο προγραμματιστής και ο τελικός χρήστης των προγραμμάτων σας. Καθώς αποκτάτε δεξιότητες ως προγραμματιστής και ο προγραμματισμός σας φαίνεται πιο δημιουργικός, οι σκέψεις σας μπορεί να στραφούν και στην ανάπτυξη προγραμμάτων για άλλους.
Πριν ξεκινήσουμε να μαθαίνουμε τη γλώσσα, την οποία πρέπει να μιλάμε, ώστε να δίνουμε οδηγίες στους υπολογιστές, για την ανάπτυξη λογισμικού, πρέπει να μάθουμε λίγα πράγματα για τον τρόπο κατασκευής των υπολογιστών. Αν αποσυναρμολογούσατε τον υπολογιστή ή το κινητό σας τηλέφωνο και κοιτούσατε βαθιά μέσα του, θα βρίσκατε τα ακόλουθα μέρη:
Οι ορισμοί υψηλού επιπέδου αυτών των τμημάτων είναι οι εξής:
Η Κεντρική Μονάδα Επεξεργασίας (ή CPU) είναι το τμήμα του υπολογιστή που έχει κατασκευαστεί για να έχει εμμονή με το “και μετά τί;”. Εάν ο υπολογιστής σας έχει χρονιστεί στα 3,0 Gigahertz, αυτό σημαίνει ότι η CPU θα ρωτάει “και μετά τί;” τρία δισεκατομμύρια φορές το δευτερόλεπτο. Θα πρέπει να μάθετε πώς να μιλάτε γρήγορα για να συμβαδίσετε με την CPU.
Η Κύρια Μνήμη χρησιμοποιείται για την γρήγορη αποθήκευση πληροφοριών, που χρειάζεται η CPU. Η κύρια μνήμη είναι σχεδόν τόσο γρήγορη όσο η CPU. Αλλά οι πληροφορίες που είναι αποθηκευμένες στην κύρια μνήμη εξαφανίζονται όταν ο υπολογιστής απενεργοποιηθεί.
Η Δευτερεύουσα Μνήμη χρησιμοποιείται, επίσης, για την αποθήκευση πληροφοριών, αλλά είναι πολύ πιο αργή από την κύρια μνήμη. Το πλεονέκτημα της δευτερεύουσας μνήμης είναι ότι μπορεί να κρατήσει αποθηκευμένες τις πληροφορίες ακόμη και όταν σταματά η τροφοδοσία ρεύματος στον υπολογιστή. Παραδείγματα δευτερεύουσας μνήμης είναι οι μονάδες δίσκου ή η μνήμη flash (συνήθως συναντώνται σε USB sticks και φορητές συσκευές αναπαραγωγής μουσικής).
Οι συσκευές Εισόδου και Εξόδου είναι απλώς η οθόνη, το πληκτρολόγιο, το ποντίκι, το μικρόφωνο, το ηχείο, η επιφάνεια αφής κλπ. Είναι όλοι οι τρόποι αλληλεπίδρασης με τον υπολογιστή.
Στις μέρες μας, οι περισσότεροι υπολογιστές διαθέτουν επίσης Σύνδεση Δικτύου, για ανάκτηση πληροφοριών μέσω δικτύου. Μπορούμε να σκεφτόμαστε το δίκτυο ως ως μία πολύ αργή θέση, για την αποθήκευση και την ανάκτηση δεδομένων, που μπορεί να μην είναι πάντα “up”, δηλαδή διαθέσιμο. Κατά κάποιον τρόπο, το δίκτυο είναι μια πιο αργή και μερικές φορές αναξιόπιστη μορφή Δευτερεύουσας Μνήμης.
Ενώ οι περισσότερες λεπτομέρειες, για το πώς λειτουργούν αυτά τα εξαρτήματα είναι καλύτερα να αφεθούν στους κατασκευαστές υπολογιστών, βοηθά να γνωρίζουμε την ορολογία, ώστε να μπορούμε να μιλάμε για αυτά τα βασικά κομμάτια του υπολογιστή καθώς θα προχωράμε στη συγγραφή των προγράμματά μας.
Ως προγραμματιστές, η δουλειά σας είναι να χρησιμοποιήσετε και να ενορχηστρώσετε καθέναν από αυτούς τους πόρους, για να λύσετε το πρόβλημα που χρειάζεται να λύσετε, και για να αναλύσετε τα δεδομένα, που λαμβάνετε από τη λύση. Ως προγραμματιστές θα “μιλάτε” κυρίως με την CPU και θα της λέτε τι πρέπει να κάνει στη συνέχεια. Μερικές φορές θα πείτε στην CPU να χρησιμοποιήσει την κύρια μνήμη, τη δευτερεύουσα μνήμη, το δίκτυο ή τις συσκευές εισόδου/εξόδου.
Είστε το άτομο που πρέπει να απαντά στην ερώτηση τις CPU, “και μετά τί;”. Αλλά θα ήταν κάπως άβολο αν έπρεπε να σας συρρικνώσουμε, σε ύψος 5 χιλιοστών, και να σας εισάγουμε στον υπολογιστή, μόνο και μόνο για να μπορείτε να δίνετε μια εντολή, τρία δισεκατομμύρια φορές το δευτερόλεπτο. Επομένως, πρέπει να γράψετε τις οδηγίες σας εκ των προτέρων. Αυτές τις αποθηκευμένες οδηγίες τις ονομάζουμε πρόγραμμα και την πράξη της καταγραφής αυτών των οδηγιών και την διασφάλιση της ορθότητας αυτών προγραμματισμό.
Στο υπόλοιπο αυτού του βιβλίου, θα προσπαθήσουμε να σας μετατρέψουμε σε ένα άτομο, εξειδικευμένο στην τέχνη του προγραμματισμού. Στο τέλος θα είστε προγραμματιστής - ίσως όχι επαγγελματίας προγραμματιστής, αλλά τουλάχιστον θα έχετε τις δεξιότητες να εξετάσετε ένα πρόβλημα ανάλυσης δεδομένων/πληροφοριών και να αναπτύξετε ένα πρόγραμμα για την επίλυση του προβλήματος.
Στην ουσία, χρειάζονται δύο δεξιότητες για να είστε προγραμματιστής:
Πρώτον, πρέπει να γνωρίζετε τη γλώσσα προγραμματισμού (Python) - πρέπει να γνωρίζετε το λεξιλόγιο και τη γραμματική της. Πρέπει να είστε σε θέση να γράψετε σωστά τις λέξεις, σε αυτήν τη νέα γλώσσα, και να ξέρετε πώς να δημιουργήσετε καλά σχηματισμένες “προτάσεις” σε αυτήν.
Δεύτερον, πρέπει να είστε σε θέση να “πείτε μια ιστορία”. Γράφοντας μια ιστορία, συνδυάζετε λέξεις και προτάσεις, για να μεταφέρετε μια ιδέα στον αναγνώστη. Απαιτείται μια ικανότητα και τέχνη στην κατασκευή της ιστορίας και η ικανότητα αυτή, στη συγγραφή ιστοριών, βελτιώνεται καθώς γράφουμε και λαμβάνουμε κάποια ανατροφοδότηση. Στον προγραμματισμό, το πρόγραμμά μας είναι η «ιστορία» και το πρόβλημα που προσπαθείτε να λύσετε είναι η «ιδέα».
Μόλις μάθετε μία γλώσσα προγραμματισμού, όπως η Python, θα είναι πολύ πιο εύκολο να μάθετε μια δεύτερη γλώσσα, όπως η JavaScript ή η C ++. Η νέα γλώσσα προγραμματισμού θα έχει πολύ διαφορετικό λεξιλόγιο και γραμματική, αλλά οι δεξιότητες επίλυσης προβλημάτων που απαιτούνται είναι οι ίδιες, σε όλες τις γλώσσες προγραμματισμού.
Θα μάθετε το “λεξιλόγιο” και τις “προτάσεις” της Python αρκετά γρήγορα. Θα χρειαστεί όμως περισσότερος χρόνος για να μπορέσετε να γράψετε ένα πρόγραμμα με συνοχή, για την επίλυση ενός ολοκαίνουργιου προβλήματος. Διδασκόμαστε προγραμματισμό όπως και τη γραφή. Αρχίζουμε να διαβάζουμε και να εξηγούμε προγράμματα, μετά γράφουμε απλά προγράμματα και συνέχεια γράφουμε όλο και πιο πολύπλοκα προγράμματα, με την πάροδο του χρόνου. Κάποια στιγμή “βρίσκετε τη μούσα σας” και βλέπετε τα μοτίβα μόνοι σας και μπορείτε να δείτε, πιο εύκολα, πώς να αντιμετωπίσετε ένα πρόβλημα αλλά και να γράψετε ένα πρόγραμμα που να το επιλύει. Και μόλις φτάσετε σε αυτό το σημείο, ο προγραμματισμός γίνεται μια πολύ ευχάριστη και δημιουργική διαδικασία.
Ξεκινάμε με το λεξιλόγιο και τη δομή των προγραμμάτων Python. Κάντε υπομονή καθώς τα απλά παραδείγματα θα σας θυμίζουν την εποχή που ξεκινήσατε να διαβάζετε για πρώτη φορά.
Σε αντίθεση με τις ανθρώπινες γλώσσες, το λεξιλόγιο της Python είναι πραγματικά πολύ μικρό. Αυτό το «λεξιλόγιο» το αποκαλούμε «δεσμευμένες λέξεις». Αυτές είναι λέξεις που έχουν πολύ ιδιαίτερη σημασία για την Python. Όταν η Python βλέπει αυτές τις λέξεις σε ένα πρόγραμμα Python, έχουν μία και μοναδική σημασία. Αργότερα, καθώς γράφετε κώδικα, θα φτιάχνετε τις δικές σας λέξεις, που θα έχουν νόημα για εσάς και ονομάζονται μεταβλητές. Θα έχετε ένα μεγάλο εύρος επιλογών για την ονοματολογία των μεταβλητών σας, αλλά δεν μπορείτε να χρησιμοποιήσετε καμία από τις δεσμευμένες λέξεις της Python, ως όνομα μεταβλητής.
Όταν εκπαιδεύουμε έναν σκύλο, χρησιμοποιούμε ειδικές λέξεις όπως “κάθισε”, “μείνε” και “φέρε”. Όταν μιλάτε σε ένα σκυλί και δεν χρησιμοποιείτε καμία από αυτές τις δεσμευμένες λέξεις, απλώς σας κοιτά με ένα ερωτηματικό βλέμμα στο πρόσωπό του μέχρι να πείτε μια δεσμευμένη λέξη. Για παράδειγμα, αν πείτε: “Μακάρι να περπατούσαν περισσότερο οι άνθρωποι, για να βελτιώσουν την υγεία τους”, αυτό που πιθανότατα ακούνε τα περισσότερα σκυλιά είναι “μπλα μπλα μπλα περπάτα μπλα μπλα μπλα μπλα.” Αυτό συμβαίνει επειδή το “περπάτα” είναι μια δεσμευμένη λέξη στη γλώσσα του σκύλου. Πολλοί μπορεί να αντιτείνουν ότι η γλώσσα μεταξύ ανθρώπων και γατών δεν έχει δεσμευμένες λέξεις1.
Κάποιες από τις δεσμευμένες λέξεις στη γλώσσα, που οι άνθρωποι χρησιμοποιούν με την Python, είναι και οι ακόλουθες:
and del global not with
as elif if or yield
assert else import pass
break except in raise
class finally is return
continue for lambda try
def from nonlocal while
Πράγματι, και σε αντίθεση με έναν σκύλο, η Python είναι ήδη πλήρως εκπαιδευμένη. Όταν λέτε “try”, η Python θα δοκιμάζει, κάθε φορά που το λέτε, χωρίς αποτυχία.
Θα μάθουμε αυτές τις δεσμευμένες λέξεις και πώς χρησιμοποιούνται έγκυρα, αλλά προς το παρόν θα επικεντρωθούμε στο ισοδύναμο του «μιλάω», της Python (σε γλώσσα ανθρώπου-σε-σκύλο). Το ωραίο, όταν λέμε στην Python να μιλήσει, είναι ότι μπορούμε ακόμη να της πούμε τι να πει, δίνοντάς της ένα μήνυμα σε εισαγωγικά:
print('Γειά σου κόσμε!')
Και, μόλις, γράψαμε την πρώτη μας, συντακτικά σωστή, πρόταση σε Python. Η πρόταση μας ξεκινά με τη συνάρτηση print, ακολουθούμενη από ένα κείμενο της επιλογής μας, που περικλείεται σε απλά εισαγωγικά. Οι προτάσεις (συμβολοσειρές) στις εντολές εκτύπωσης περικλείονται σε εισαγωγικά. Τα απλά εισαγωγικά και τα διπλά εισαγωγικά είναι ισοδύναμα. Οι περισσότεροι χρησιμοποιούν απλά εισαγωγικά, εκτός από την περίπτωση όπου ένα μόνο εισαγωγικό (το οποίο είναι μπορεί να δηλώνει και “απόστροφο”) πρέπει να εμφανιστεί στη συμβολοσειρά.
Τώρα που κατέχουμε μια λέξη και μια απλή πρόταση, στην Python, πρέπει να μάθουμε και πώς να ξεκινήσουμε μια συνομιλία με την Python, προκειμένου να δοκιμάσουμε τις νέες γλωσσικές μας δεξιότητες.
Για να καταφέρετε να συνομιλήσετε με την Python, πρέπει πρώτα να εγκαταστήσετε το λογισμικό της Python στον υπολογιστή σας καθώς και να μάθετε πώς να εκκινείτε την Python στον υπολογιστή σας. Αυτό απαιτεί πάρα πολλές λεπτομερές για να συμπεριληφθεί σε αυτό το κεφάλαιο, οπότε προτείνω να συμβουλευτείτε το www.gr.py4e.com όπου σας παρέχω λεπτομερείς οδηγίες και βίντεο, για τη ρύθμιση και την εκκίνηση της Python σε συστήματα Macintosh και Windows. Έτσι, κάποια στιγμή, σε ένα τερματικό ή στο παράθυρο εντολών θα πληκτρολογήσετε python και ο διερμηνευτής της Python θα αρχίσει να εκτελείται σε διαδραστική λειτουργία, οπότε θα δείτε κάτι σαν το παρακάτω:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25)
[MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more
information.
>>>
Η προτροπή >>>
είναι ο τρόπος του διερμηνευτή της Python να σας ρωτήσει: “Τι θέλετε να κάνω στη συνέχεια;” Η Python είναι έτοιμη να συζητήσει μαζί σας. Το μόνο που πρέπει να γνωρίζετε είναι πώς να της μιλήσετε, σε γλώσσα Python.
Ας πούμε για παράδειγμα, ότι δεν γνωρίζατε ούτε τις πιο απλές λέξεις ή προτάσεις της γλώσσας Python. Μπορεί να θέλατε να χρησιμοποιήσετε την κλασσική πρόταση, που χρησιμοποιούν οι αστροναύτες όταν προσγειώνονται σε έναν μακρινό πλανήτη και προσπαθούν να μιλήσουν με τους κατοίκους του πλανήτη:
>>> Ερχόμαστε ειρηνικά, παρακαλώ πηγαίνετέ μας στον αρχηγό σας
File "<stdin>", line 1
Ερχόμαστε ειρηνικά, παρακαλώ πηγαίνετέ μας στον αρχηγό σας
^
SyntaxError: invalid syntax
>>>
Αυτό δεν πήγε και τόσο καλά. Αν δεν σκεφτείτε κάτι γρήγορα, οι κάτοικοι του πλανήτη είναι πιθανό να σας επιτεθούν με τα δόρατά τους, να σας βάλουν στη σούβλα, να σας ψήσουν στη φωτιά και να σας φάνε για δείπνο.
Ευτυχώς έχετε ένα αντίγραφο αυτού του βιβλίου, μαζί σας, στο ταξίδι σας και ανοίγοντάς το βρίσκεστε σε αυτήν ακριβώς τη σελίδα, οπότε προσπαθείτε ξανά:
>>> print('Γειά σου κόσμε!')
Γειά σου κόσμε!
Αυτό λειτούργησε πολύ καλύτερα, οπότε προσπαθείτε να επικοινωνήσετε περισσότερο:
>>> print('Πρέπει να είστε οι θρυλικοί θεοί που έρχεστε από τον ουρανό')
Πρέπει να είστε οι θρυλικοί θεοί που έρχεστε από τον ουρανό
>>> print('Σας περιμέναμε πολύ καιρό')
Σας περιμέναμε πολύ καιρό
>>> print('Ο μύθος μας λέει ότι θα είστε πολύ νόστιμοι με μουστάρδα')
Ο μύθος μας λέει ότι θα είστε πολύ νόστιμοι με μουστάρδα
>>> print 'Θα έχουμε συμπόσιο απόψε, εκτός κι αν το πείτε
File "<stdin>", line 1
print 'Θα έχουμε συμπόσιο απόψε, εκτός κι αν το πείτε
^
SyntaxError: Missing parentheses in call to 'print'
>>>
Η συζήτηση πήγενε τόσο καλά μέχρι που κάνατε ένα μικρό λαθάκι, χρησιμοποιώντας τη γλώσσα Python, και η Python ξανά έβγαλε τα δόρατα.
Σε αυτό το σημείο, θα πρέπει επίσης να συνειδητοποιήσετε ότι, ενώ η Python είναι εκπληκτικά πολύπλοκη και ισχυρή και πολύ επιλεκτική σχετικά με τη σύνταξη που χρησιμοποιείτε για να επικοινωνήσετε μαζί της, η Python δεν είναι έξυπνη. Στην πραγματικότητα συνομιλείτε με τον εαυτό σας, αλλά χρησιμοποιείτε σωστή σύνταξη.
Κατά μία έννοια, όταν χρησιμοποιείτε ένα πρόγραμμα γραμμένο από κάποιον άλλο, η συζήτηση γίνεται μεταξύ εσάς και εκείνου του άλλου προγραμματιστή, με την Python να ενεργεί ως ενδιάμεσος. Η Python είναι ένας τρόπος, για τους δημιουργούς προγραμμάτων, να εκφράσουν πώς υποτίθεται ότι θα προχωρήσει η συνομιλία. Και σε λίγα κεφάλαια παρακάτω, θα είστε ένας από αυτούς τους προγραμματιστές, που χρησιμοποιούν την Python για να μιλήσουν με τους χρήστες του προγράμματός τους.
Πριν αφήσουμε την πρώτη μας συνομιλία με τον διερμηνευτή της Python, μάλλον θα πρέπει να μάθετε τον “καθώς πρέπει” τρόπο για να πείτε “αντίο” όταν αλληλεπιδράτε με τους κατοίκους του Πλανήτη Python:
>>> αντίο
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'αντίο' is not defined
>>> if you don't mind, I need to leave
File "<stdin>", line 1
if you don't mind, I need to leave
^
SyntaxError: invalid syntax
>>> quit()
Θα παρατηρήσετε ότι το σφάλμα είναι διαφορετικό στις δύο πρώτες εσφαλμένες προσπάθειες. Το δεύτερο σφάλμα είναι διαφορετικό γιατί το if είναι μια δεσμευμένη λέξη και η Python είδε την δεσμευμένη λέξη και σκέφτηκε ότι προσπαθούσαμε να πούμε κάτι, αλλά αντιλήφθηκε λάθος στη σύνταξη της πρότασης.
Ο σωστός τρόπος για να πείτε “αντίο” στην Python είναι να πληκτρολογήσετε quit() στη διαδραστική προτροπή >>>
. Πιθανότατα θα σας έπαιρνε αρκετή ώρα για να το μαντέψετε, οπότε το να έχετε ένα βιβλίο κοντά σας πιθανότατα θα σας φανεί χρήσιμο.
Η Python είναι μια γλώσσα υψηλού επιπέδου, κατασκευασμένη ώστε να είναι σχετικά απλό, για τους ανθρώπους, να διαβάζουν και να γράφουν και για τους υπολογιστές να διαβάζουν και να επεξεργάζονται. Άλλες γλώσσες υψηλού επιπέδου είναι οι Java, C ++, PHP, Ruby, Basic, Perl, JavaScript και πολλές άλλες. Το πραγματικό υλικό μέσα στην κεντρική μονάδα επεξεργασίας (CPU) δεν καταλαβαίνει καμία από αυτές τις γλώσσες υψηλού επιπέδου.
Η CPU καταλαβαίνει μια γλώσσα που ονομάζουμε γλώσσα μηχανής. Η γλώσσα μηχανής είναι πολύ απλή και, ειλικρινά, πολύ κουραστική για να γραφτεί, επειδή τα αναπαριστά όλα με μηδενικά και μονάδες:
001010001110100100101010000001111
11100110000011101010010101101101
...
Η γλώσσα μηχανής φαίνεται, επιφανειακά, αρκετά απλή, δεδομένου ότι υπάρχουν μόνο μηδενικά και μονάδες, αλλά η σύνταξή της είναι ακόμη πιο σύνθετη και πιο πολύπλοκη από της Python. Έτσι, πολύ λίγοι προγραμματιστές γράφουν, κάποιες φορές, σε γλώσσα μηχανής. Αντ’ αυτού, κατασκευάζουμε διάφορους μεταφραστές, που επιτρέπουν στους προγραμματιστές να γράφουν σε γλώσσες υψηλού επιπέδου, όπως η Python ή η JavaScript και αυτοί οι μεταφραστές μετατρέπουν τα προγράμματα σε γλώσσα μηχανής για να εκτελεστεί πραγματικά από την CPU.
Δεδομένου ότι η γλώσσα μηχανής είναι συνδεδεμένη με το υλικό του υπολογιστή, δεν είναι φορητή, σε διαφορετικούς τύπους υλικού. Προγράμματα γραμμένα σε γλώσσες υψηλού επιπέδου μπορούν να μεταφερθούν μεταξύ διαφορετικών υπολογιστών, χρησιμοποιώντας διαφορετικό διερμηνευτή στο νέο μηχάνημα ή επαναμεταφράζοντας τον κώδικα για να δημιουργηθεί μια νέα έκδοση του προγράμματος σε γλώσσας μηχανής για το νέο μηχάνημα.
Αυτοί οι μεταφραστές γλωσσών προγραμματισμού εμπίπτουν σε δύο γενικές κατηγορίες: (1) διερμηνείς και (2) μεταγλωττιστές.
Ένας διερμηνευτής διαβάζει τον πηγαίο κώδικα του προγράμματος, όπως έχει γραφτεί από τον προγραμματιστή, αναλύει τον πηγαίο κώδικα και ερμηνεύει τις οδηγίες εν κινήσει. Η Python διαθέτει διερμηνευτή και όταν τρέχουμε την Python διαδραστικά, πληκτρολογούμε μια γραμμή Python (μια πρόταση), η Python την επεξεργάζεται αμέσως και είναι έτοιμη για να πληκτρολογήσουμε την επόμενη γραμμή Python.
Μερικές από τις γραμμές του κώδικα λένε στην Python ότι θέλετε να θυμάται κάποια τιμή για αργότερα. Πρέπει να επιλέξουμε ένα όνομα για να απομνημονευθεί αυτή η τιμή και μπορούμε να χρησιμοποιήσουμε αυτό το συμβολικό όνομα για να ανακτήσουμε την τιμή αργότερα. Χρησιμοποιούμε τον όρο μεταβλητή για να αναφερθούμε στα ονόματα που χρησιμοποιούμε, για να χειριστούμε αυτά τα αποθηκευμένα δεδομένα.
>>> x = 6
>>> print(x)
6
>>> y = x * 7
>>> print(y)
42
>>>
Σε αυτό το παράδειγμα, ζητάμε από την Python να θυμάται την τιμή έξι και να χρησιμοποιήσει το όνομα x, ώστε να μπορούμε να ανακτήσουμε την τιμή αργότερα. Επαληθεύουμε ότι η Python έχει κρατήσει την τιμή, χρησιμοποιώντας το print. Στη συνέχεια, ζητάμε από την Python να ανακτήσει το x και να το πολλαπλασιάσει επί επτά και να θέσει την νέα τιμή που υπολόγισε στο y. Κατόπιν, ζητάμε από την Python να εκτυπώσει την τρέχουσα τιμή του y.
Παρόλο που πληκτρολογούμε αυτές τις εντολές Python, μία γραμμή τη φορά, η Python τις αντιμετωπίζει ως μια διατεταγμένη σειρά δηλώσεων με μεταγενέστερες δηλώσεις που μπορούν να ανακτήσουν δεδομένα που δημιουργήθηκαν σε προγενέστερες δηλώσεις. Γράφουμε την πρώτη μας απλή παράγραφο με τέσσερις προτάσεις, με λογική και ουσιαστική σειρά.
Είναι στη φύση ενός διερμηνευτή να μπορεί να έχει μια διαδραστική συνομιλία όπως φαίνεται παραπάνω. Σε έναν μεταγλωττιστής πρέπει να παραδοθεί ολόκληρο το πρόγραμμα, σε ένα αρχείο και στη συνέχεια εκτελεί μια διαδικασία για τη μετάφραση του πηγαίου κώδικα υψηλού επιπέδου σε γλώσσα μηχανής. Κατόπιν, ο μεταγλωττιστής αποθηκεύει την γλώσσα μηχανής, που προκύπτει σε ένα αρχείο, για μετέπειτα εκτέλεση.
Εάν διαθέτετε σύστημα Windows, συχνά αυτά τα εκτελέσιμα προγράμματα γλώσσας μηχανής έχουν ένα επίθημα “.exe” ή “.dll”, που σημαίνει “εκτελέσιμο” ή “dynamic link library / βιβλιοθήκη δυναμικών συνδέσμων” αντίστοιχα. Σε Linux και Macintosh, δεν υπάρχει επίθημα που να χαρακτηρίζει μοναδικά ένα αρχείο ως εκτελέσιμο.
Εάν ανοίγατε ένα εκτελέσιμο αρχείο σε έναν επεξεργαστή κειμένου, θα σας φαινόταν εντελώς τρελό και δεν θα μπορούσατε να το διαβάσετε:
^?ELF^A^A^A^@^@^@^@^@^@^@^@^@^B^@^C^@^A^@^@^@\xa0\x82
^D^H4^@^@^@\x90^]^@^@^@^@^@^@4^@ ^@^G^@(^@$^@!^@^F^@
^@^@4^@^@^@4\x80^D^H4\x80^D^H\xe0^@^@^@\xe0^@^@^@^E
^@^@^@^D^@^@^@^C^@^@^@^T^A^@^@^T\x81^D^H^T\x81^D^H^S
^@^@^@^S^@^@^@^D^@^@^@^A^@^@^@^A\^D^HQVhT\x83^D^H\xe8
....
Δεν είναι εύκολο να διαβάσετε ή να γράψετε σε γλώσσα μηχανής, οπότε είναι ωραίο να έχουμε διερμηνείς και μεταγλωττιστές, που μας επιτρέπουν να γράφουμε σε γλώσσες υψηλού επιπέδου, όπως η Python ή η C.
Τώρα, σε αυτό το σημείο στη συζήτησή μας για τους μεταγλωττιστές και τους διερμηνείς, θα πρέπει να αναρωτηθείτε λίγο για τον ίδιο τον διερμηνευτή της Python. Σε ποια γλώσσα έχει γραφτεί; Είναι γραμμένος σε μεταγλωττισμένη γλώσσα; Όταν πληκτρολογούμε “python”, τι ακριβώς συμβαίνει;
Ο διερμηνευτής της Python είναι γραμμένος σε μια γλώσσα υψηλού επιπέδου που ονομάζεται “C”. Μπορείτε να δείτε τον πραγματικό πηγαίο κώδικα για τον διερμηνευτή της Python πηγαίνοντας στο www.python.org και βρίσκοντας τη διαδρομή προς τον πηγαίο κώδικα. Έτσι η Python είναι ένα πρόγραμμα που είναι μεταγλωττισμένο σε γλώσσα μηχανής. Όταν εγκαταστήσατε την Python στον υπολογιστή σας (ή ο προμηθευτής την εγκατέστησε), αντιγράψατε ένα αντίγραφο κώδικα μηχανής του μεταφρασμένου προγράμματος Python στο σύστημά σας. Στα Windows, ο εκτελέσιμος κώδικας μηχανής για την ίδια την Python είναι πιθανό σε ένα αρχείο με όνομα όπως:
C:\Python35\python.exe
Αυτά είναι περισσότερα από ό,τι πραγματικά πρέπει να γνωρίζετε για να είστε προγραμματιστής Python, αλλά μερικές φορές αξίζει να απαντήσετε σε αυτές τις μικρές ενοχλητικές ερωτήσεις στην αρχή.
Η πληκτρολόγηση εντολών στον διερμηνευτή της Python είναι ένας πολύ καλός τρόπος για να πειραματιστείτε με τις δυνατότητες της Python, αλλά δεν συνιστάται για την επίλυση πιο πολύπλοκων προβλημάτων.
Όταν θέλουμε να γράψουμε ένα πρόγραμμα, χρησιμοποιούμε έναν συντάκτη κειμένου για να γράψουμε τις εντολές Python σε ένα αρχείο, το οποίο ονομάζεται script / σενάριο. Κατά συνθήκη, τα σενάρια Python έχουν ονόματα που τελειώνουν με .py
.
Για να εκτελέσετε το σενάριο, πρέπει να πείτε στον διερμηνευτή της Python το όνομα του αρχείου. Στο τερματικό / γραμμή εντολών, πληκτρολογείτε python hello.py
ως εξής:
$ cat hello.py
print('Γειά σου κόσμε!')
$ python hello.py
Γειά σου κόσμε!
Το “$” είναι η προτροπή του λειτουργικού συστήματος και το “cat hello.py” μας δείχνει το περιεχόμενο του αρχείου “hello.py”, που είναι ένα πρόγραμμα Python μιας γραμμής, για την εκτύπωση μιας συμβολοσειράς.
Καλούμε, στη συνέχεια, τον διερμηνευτή της Python και του λέμε να διαβάσει τον πηγαίο κώδικα από το αρχείο “hello.py” αντί να μας ζητήσει τις γραμμές του κώδικα Python διαδραστικά.
Θα παρατηρήσετε ότι δεν ήταν ανάγκη να γράψετε quit() στο τέλος του προγράμματος Python στο αρχείο. Όταν η Python διαβάζει τον πηγαίο κώδικα από ένα αρχείο, ξέρει να σταματά όταν φτάσει στο τέλος του αρχείου.
Ο στοιχειώδης ορισμός ενός προγράμματος είναι μια ακολουθία δηλώσεων Python που έχουν σχεδιαστεί για να κάνουν κάτι. Ακόμα και το απλό σενάριο hello.py είναι ένα πρόγραμμα. Είναι ένα πρόγραμμα μιας γραμμής και δεν είναι ιδιαίτερα χρήσιμο, αλλά με τον αυστηρό ορισμό, είναι ένα πρόγραμμα Python.
Ίσως είναι πιο εύκολο να καταλάβετε τι είναι ένα πρόγραμμα σκεπτόμενοι ένα πρόβλημα, το οποίο θέλετε να επιλύσετε κατασκευάζοντας ένα πρόγραμμα και μετά να προσπαθήσετε να κατασκευάσετε το πρόγραμμα αυτό.
Ας υποθέσουμε ότι κάνετε μια έρευνα Κοινωνικής Δικτύωσης σε αναρτήσεις στο Facebook και σας ενδιαφέρει η πιο συχνά χρησιμοποιούμενη λέξη σε μια σειρά αναρτήσεων. Θα μπορούσατε να εκτυπώσετε τη ροή των αναρτήσεων στο Facebook και να μελετήσετε το αποτέλεσμα, αναζητώντας την πιο συνηθισμένη λέξη, αλλά αυτό θα πάρει πολύ χρόνο και θα είναι πολύ επιρρεπές σε λάθη. Θα ήταν έξυπνο να γράψετε ένα πρόγραμμα Python για να χειριστεί την εργασία γρήγορα και με ακρίβεια, ώστε να μπορείτε να περάσετε το Σαββατοκύριακο σας κάνοντας κάτι πιο διασκεδαστικό.
Για παράδειγμα, κοιτάξτε το παρακάτω κείμενο για έναν κλόουν και ένα αυτοκίνητο. Κοιτάξτε το κείμενο και εντοπίστε την πιο κοινή λέξη και πόσες φορές εμφανίζεται.
the clown ran after the car and the car ran into the tent
and the tent fell down on the clown and the car
Στη συνέχεια, φανταστείτε ότι κάνετε αυτήν την δουλειά κοιτάζοντας εκατομμύρια γραμμές κειμένου. Ειλικρινά θα ήταν πιο γρήγορο για εσάς να μάθετε Python και να γράψετε ένα πρόγραμμα Python, για να μετρήσετε τις λέξεις από ό,τι θα ήταν να σαρώσετε τις λέξεις με το χέρι.
Τα ακόμη καλύτερα νέα είναι ότι ετοίμασα ήδη ένα απλό πρόγραμμα, για να βρω την πιο κοινή λέξη σε ένα αρχείο κειμένου. Το έγραψα, το δοκίμασα και τώρα σας το δίνω για να το χρησιμοποιήσετε και να εξοικονομήσετε χρόνο.
όνομα = input('Εισάγετε αρχείο:')
handle = open(όνομα, 'r')
πλήθη = dict()
for γραμμή in handle:
λέξεις = γραμμή.split()
for λέξη in λέξεις:
πλήθη[λέξη] = πλήθη.get(λέξη, 0) + 1
maxπλήθος = None
maxλέξη = None
for λέξη, πλήθος in list(πλήθη.items()):
if maxπλήθος is None or πλήθος > maxπλήθος:
maxλέξη = λέξη
maxπλήθος = πλήθος
print(maxλέξη, maxπλήθος)
# Code: http://www.py4e.com/code3/words.py
Δεν χρειάζεται καν να γνωρίζετε την Python για να χρησιμοποιήσετε αυτό το πρόγραμμα. Θα χρειαστεί να ανατρέξετε στο Κεφάλαιο 10 αυτού του βιβλίου, για να κατανοήσετε πλήρως τις εκπληκτικές τεχνικές Python που χρησιμοποιήθηκαν για τη δημιουργία του προγράμματος. Είστε ο τελικός χρήστης, απλά χρησιμοποιείτε το πρόγραμμα και θαυμάζετε την εξυπνάδα του και πώς σας γλίτωσε από τόσο πολύ χειρωνακτική προσπάθεια. Απλώς πληκτρολογείτε τον κώδικα σε ένα αρχείο που ονομάζεται words.py και το εκτελείτε ή κατεβάζετε τον πηγαίο κώδικα από το http://www.gr.py4e.com/code3/ και το εκτελείτε.
Αυτό είναι ένα καλό παράδειγμα για το πώς και η γλώσσα Python λειτουργεί ως ενδιάμεσος μεταξύ εσάς (του τελικού χρήστη) και εμένα (του προγραμματιστή). Η Python είναι ένας τρόπος για να ανταλλάξουμε χρήσιμες ακολουθίες οδηγιών (δηλ. προγράμματα) σε μια κοινή γλώσσα που μπορεί να χρησιμοποιηθεί από οποιονδήποτε εγκαταστήσει την Python στον υπολογιστή του. Κανείς μας λοιπόν δεν μιλάει με την Python, αλλά επικοινωνούμε μεταξύ μας μέσω της Python.
Στα επόμενα κεφάλαια, θα μάθουμε περισσότερα για το λεξιλόγιο, τη δομή των προτάσεων, τη δομή των παραγράφων και τη δομή της “ιστορίας” σε Python. Θα μάθουμε για τις ισχυρές δυνατότητες της Python και πώς να συνδυάσουμε αυτές τις δυνατότητες για να δημιουργήσουμε χρήσιμα προγράμματα.
Υπάρχουν ορισμένα εννοιολογικά πρότυπα χαμηλού επιπέδου, που χρησιμοποιούμε για την κατασκευή προγραμμάτων. Αυτές οι κατασκευές δεν είναι μόνο για προγράμματα Python, είναι μέρος κάθε γλώσσας προγραμματισμού από τη γλώσσα μηχανής έως τις γλώσσες υψηλού επιπέδου.
Ακούγεται, σχεδόν, πάρα πολύ απλό για να είναι αληθινό, και φυσικά δεν είναι ποτέ τόσο απλό. Είναι σαν να λέμε ότι το περπάτημα είναι απλά «να βάζεις το ένα πόδι μπροστά από το άλλο». Η «τέχνη» της συγγραφής ενός προγράμματος συνθέτει και υφαίνει αυτά τα βασικά στοιχεία μαζί πολλές φορές, για να παράγει κάτι που είναι χρήσιμο για τους τελικούς χρήστες του.
Το παραπάνω πρόγραμμα καταμέτρησης λέξεων χρησιμοποιεί άμεσα όλα τα παραπάνω μοτίβα, εκτός από ένα.
Όπως είδαμε στις πρώτες μας συνομιλίες με την Python, πρέπει να επικοινωνούμε με μεγάλη ακρίβεια, όταν γράφουμε κώδικα Python. Η παραμικρή απόκλιση ή λάθος θα κάνει την Python να σταματήσει την εκτέλεση του προγράμματός σας.
Οι αρχάριοι προγραμματιστές συχνά θεωρούν το γεγονός ότι η Python δεν αφήνει περιθώρια για λάθη ως απόδειξη ότι η Python είναι κακιά, μισητή και σκληρή. Ενώ η Python φαίνεται να συμπαθεί όλους τους άλλους, αυτούς τους γνωρίζει προσωπικά και τους κρατά κακία. Λόγω αυτής της μνησικακίας, η Python παίρνει τα τέλεια γραμμένα προγράμματά τους και τα απορρίπτει ως “ακατάλληλα” μόνο και μόνο για να τους βασανίσει.
>>> primt 'Γειά σου κόσμε!'
File "<stdin>", line 1
primt 'Γειά σου κόσμε!'
^
SyntaxError: invalid syntax
>>> primt ('Γειά σου κόσμε')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'primt' is not defined
>>> Python σε μισώ!
File "<stdin>", line 1
Python σε μισώ!
^
SyntaxError: invalid syntax
>>> αν βγεις από κει μέσα, θα σου δώσω ένα μαθηματάκι
File "<stdin>", line 1
αν βγεις από κει μέσα, θα σου δώσω ένα μαθηματάκι
^
SyntaxError: invalid syntax
>>>
Δεν έχετε να κερδίσετε κάτι από τη διαμάχη με την Python. Είναι απλώς ένα εργαλείο. Δεν έχει συναισθήματα και είναι χαρούμενη και έτοιμη να σας εξυπηρετήσει όποτε το χρειαστείτε. Τα μηνύματα λάθους της ακούγονται σκληρά, αλλά είναι απλώς το κάλεσμα της Python σε βοήθεια. Έχει εξετάσει τι πληκτρολογήσατε και απλά δεν μπορεί να καταλάβει τι έχετε εισαγάγει.
Η Python μοιάζει πάρα πολύ με ένα σκύλο, σε αγαπάει άνευ όρων, έχει μερικές λέξεις κλειδιά που καταλαβαίνει, σε κοιτάζει με ένα γλυκό βλέμμα (>>>
) και περιμένει να πεις κάτι που καταλαβαίνει. Όταν η Python λέει “SyntaxError: invalid syntax”, απλά κουνάει την ουρά της και λέει: “Φαινόσαστε να λέτε κάτι, αλλά απλώς δεν καταλαβαίνω τι εννοούσατε, αλλά συνεχίστε να μου μιλάτε (>>>
).”
Καθώς τα προγράμματά σας γίνονται όλο και πιο εξελιγμένα, θα συναντήσετε τρεις γενικούς τύπους σφαλμάτων:
Και πάλι, και στους τρεις τύπους λαθών, η Python προσπαθεί σκληρά, απλώς να κάνει ό,τι ακριβώς ζητήσατε.
Όταν, στην Python, προκύπτει ένα λάθος ή ακόμα και όταν σας δίνει ένα αποτέλεσμα που είναι διαφορετικό από αυτό που θα έπρεπε, τότε ξεκινά η αναζήτηση της αιτίας του σφάλματος. Η εντοπισμός σφαλμάτων είναι η διαδικασία εύρεσης της αιτίας του σφάλματος στον κώδικά σας. Όταν κάνετε εντοπισμό σφαλμάτων σε ένα πρόγραμμα, και ειδικά εάν εργάζεστε σε ένα δύσκολο σφάλμα, υπάρχουν τέσσερα πράγματα που πρέπει να δοκιμάσετε:
Οι αρχάριοι προγραμματιστές κολλάνε μερικές φορές σε ένα από τα παραπάνω και ξεχνούν τα υπόλοιπα. Ο εντοπισμός ενός δύσκολου σφάλματος απαιτεί ανάγνωση, εκτέλεση, μηρυκασμό και, μερικές φορές, υποχώρηση. Εάν κολλήσετε σε μία από αυτές τις δραστηριότητες, δοκιμάστε και τις υπόλοιπες. Κάθε δραστηριότητα συνοδεύεται από το δικό της τρόπο αποτυχίας.
Για παράδειγμα, η ανάγνωση του κώδικα μπορεί να βοηθήσει εάν το πρόβλημα είναι κάποιο τυπογραφικό λάθος, αλλά όχι εάν το πρόβλημα είναι κάποια εννοιολογική παρανόηση. Εάν δεν καταλαβαίνετε τι κάνει το πρόγραμμά σας, μπορεί να το διαβάσετε 100 φορές και να μην εντοπίσετε ποτέ το λάθος, επειδή το σφάλμα είναι στο μυαλό σας.
Η εκτέλεση πειραμάτων μπορεί να βοηθήσει, ειδικά αν εκτελείτε μικρές, απλές δοκιμές. Αλλά εάν εκτελείτε πειράματα χωρίς να σκεφτείτε ή να διαβάσετε τον κώδικά σας, μπορεί να πέσετε σε ένα μοτίβο που ονομάζω “προγραμματισμός τυχαίων περιπάτων”, η οποία είναι η διαδικασία πραγματοποίησης τυχαίων αλλαγών έως ότου το πρόγραμμά σας λειτουργήσει σωστά. Περιττό να πούμε ότι ο προγραμματισμός τυχαίων περιπάτων μπορεί να διαρκέσει πολύ.
Πρέπει να αφιερώσετε χρόνο στο να σκεφτείτε. Το Debugging είναι σαν μια πειραματική επιστήμη. Θα πρέπει να έχετε τουλάχιστον μία υπόθεση για το ποιο είναι το πρόβλημα. Εάν υπάρχουν δύο ή περισσότερες υποθέσεις, προσπαθήστε να σκεφτείτε μια δοκιμή που θα εξαλείψει κάποιες από αυτές.
Το διάλειμμα βοηθά στη σκέψη. Το ίδιο και η συζήτηση. Εάν εξηγήσετε το πρόβλημα σε κάποιον άλλο (ή ακόμα και στον εαυτό σας), μερικές φορές θα βρείτε την απάντηση πριν τελειώσετε την εξήγηση.
Αλλά ακόμη και οι καλύτερες τεχνικές εντοπισμού σφαλμάτων θα αποτύχουν εάν υπάρχουν πάρα πολλά λάθη ή εάν ο κώδικας που προσπαθείτε να διορθώσετε είναι πολύ μεγάλος και περίπλοκος. Μερικές φορές η καλύτερη επιλογή είναι να υποχωρήσετε, απλοποιώντας το πρόγραμμα μέχρι να φτάσετε σε κάτι που λειτουργεί και που καταλαβαίνετε.
Οι αρχάριοι προγραμματιστές είναι συχνά απρόθυμοι να υποχωρήσουν επειδή δεν αντέχουν να διαγράψουν ούτε μια γραμμή κώδικα (ακόμα και αν είναι λάθος). Εάν σας κάνει να νιώσετε καλύτερα, αντιγράψτε το πρόγραμμά σας σε άλλο αρχείο πριν αρχίσετε να το απογυμνώνετε. Στη συνέχεια, μπορείτε να αρχίσετε να επικολλάτε ξανά, μικρά κομμάτια κάθε φορά.
Καθώς προχωράτε στο υπόλοιπο βιβλίο, μην φοβηθείτε εάν οι έννοιες δεν φαίνεται να ταιριάζουν μεταξύ τους και τόσο καλά, την πρώτη φορά. Όταν μαθαίνατε να μιλάτε, δεν ήταν πρόβλημα που τα πρώτα σας χρόνια κάνατε απλώς χαριτωμένους θορύβους και γρύλισμους. Και δεν πείραζε, αν και χρειάστηκαν έξι μήνες για να μεταβείτε από το απλό λεξιλόγιο σε απλές προτάσεις και χρειάστηκαν 5-6 χρόνια ακόμη για να μεταβείτε από προτάσεις σε παραγράφους και μερικά χρόνια ακόμη για να μπορέσετε να γράψετε ένα ενδιαφέρον, μικρό και πλήρες διήγημα μόνοι σας.
Θέλουμε να μάθετε την Python πολύ πιο γρήγορα, οπότε τα διδάσκουμε όλα ταυτόχρονα στα επόμενα κεφάλαια. Αλλά είναι σαν να μαθαίνετε μια νέα γλώσσα, που χρειάζεται χρόνο για να την απορροφήσετε και να την κατανοήσετε, πριν την κάνετε κτήμα σας. Αυτό οδηγεί σε κάποια σύγχυση, καθώς εξετάζουμε και επανεξετάζουμε θέματα για να προσπαθήσουμε να σας κάνουμε να δείτε τη μεγάλη εικόνα, ενώ ορίζουμε τα μικροσκοπικά κομμάτια που συνθέτουν αυτή τη μεγάλη εικόνα. Ενώ το βιβλίο είναι γραμμένο γραμμικά, και αν παρακολουθείτε ένα μάθημα θα προχωρήσει με γραμμικό τρόπο, μην διστάσετε να είστε μη γραμμικοί στον τρόπο με τον οποίο προσεγγίζετε το υλικό. Κοιτάξτε μπροστά και πίσω και διαβάστε χαλαρά. Μια γρήγορη ανάγνωση του πιο προηγμένου υλικού, χωρίς απαραίτητα να κατανοείτε πλήρως τις λεπτομέρειες, μπορεί να οδηγήση σε καλύτερη κατανόηση του “γιατί;” του προγραμματισμού. Επανεξετάζοντας το προηγούμενο υλικό και ακόμη επαναλαμβάνοντας προηγούμενες ασκήσεις, θα συνειδητοποιήσετε ότι στην πραγματικότητα μάθατε πολύ υλικό ακόμα κι αν το υλικό που κοιτάτε επί του παρόντος φαίνεται λίγο ακατανόητο.
Συνήθως όταν μαθαίνετε την πρώτη σας γλώσσα προγραμματισμού, υπάρχουν μερικές υπέροχες “Αχά!” στιγμές, που μπορείτε, κάνοντας ένα βήμα πίσω, να κοιτάξετε από ψηλά το πελέκημα της πέτρας με σφυρί και σμίλη και να δείτε ότι πράγματι δημιουργείτε ένα όμορφο γλυπτό.
Αν κάτι φαίνεται ιδιαίτερα δύσκολο, συνήθως δεν αξίζει να ξενυχτάτε και να το κοιτάτε επίμονα. Κάντε ένα διάλειμμα, πάρτε έναν υπνάκο, φάτε ένα σνακ, εξηγήστε σε κάποιον τι αντιμετωπίζετε (ίσως το σκυλί σας) και, στη συνέχεια, επιστρέψτε σε αυτό με φρέσκια ματιά. Σας διαβεβαιώνω ότι μόλις μάθετε τις έννοιες προγραμματισμού του βιβλίου, θα κοιτάξετε πίσω και θα δείτε ότι όλα ήταν πραγματικά εύκολα και κομψά και απλώς σας πήρε λίγο χρόνο για να το απορροφήσετε.
Άσκηση 1: Ποια είναι η λειτουργία της δευτερεύουσας μνήμης σε έναν υπολογιστή;
a)Εκτελεί όλο τον υπολογισμό και τη λογική του προγράμματος
b) Ανακτά ιστοσελίδες μέσω Διαδικτύου
c) Αποθηκεύει πληροφορίες μακροπρόθεσμα, ακόμη και πέρα από έναν κύκλο ισχύος
d) Δέχεται είσοδο από τον χρήστη
Άσκηση 2: Τι είναι ένα πρόγραμμα;
Άσκηση 3: Ποια είναι η διαφορά μεταξύ μεταγλωττιστή και διερμηνευτή;
Άσκηση 4: Ποιο από τα παρακάτω περιέχει “κώδικα μηχανής”;
a) Ο διερμηνευτής της Python
b) Το πληκτρολόγιο
c) Το πηγαίο αρχείο Python
d) Ένα έγγραφο επεξεργαστή κειμένου
Άσκηση 5: Τί λάθος υπάρχει στον ακόλουθο κώδικα;
>>> primt 'Hello world!'
File "<stdin>", line 1
primt 'Hello world!'
^
SyntaxError: invalid syntax
>>>
Άσκηση 6: Πού αποθηκεύεται στον υπολογιστή μια μεταβλητή, όπως το “x”, μετά την ολοκλήρωση της ακόλουθης γραμμής Python;
x = 123
a) Κεντρική μονάδα επεξεργασίας
b) Κύρια μνήμη
c) Δευτερεύουσα μνήμη
d) Συσκευές εισόδου
e) Συσκευές εξόδου
Άσκηση 7: Τί θα εμφανίσει το ακόλουθο πρόγραμμα;
x = 43
x = x - 1
print(x)
a) 43
b) 42
c) x + 1
d) Σφάλμα επειδή το x = x + 1 δεν είναι μαθηματικά σωστό
Άσκηση 8: Εξηγήστε καθένα από τα παρακάτω χρησιμοποιώντας ως παράδειγμα μία ανθρώπινη ικανότητα: (1) Κεντρική μονάδα επεξεργασίας, (2) Κύρια μνήμη, (3) Δευτερεύουσα μνήμη, (4) Συσκευή εισόδου και (5) Συσκευή εξόδου. Για παράδειγμα, “Τι είναι το ανθρώπινο ισοδύναμο με μια κεντρική μονάδα επεξεργασίας”;
Άσκηση 9: Πώς διορθώνετε ένα “Συντακτικό Λάθος”;
Αν εντοπίσετε κάποιο λάθος σε αυτό το βιβλίο μην διστάσετε να μου στείλετε τη διόρθωση στο Github.