Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες Σκοπός της 3ης άσκησης είναι να μάθουμε να φτιάχνουμε και να προσπελαύνουμε λίστες, να δούμε τι διαφορά έχουν από τα tuples και επίσης πώς μπορούμε να μεταχειριζόμαστε Strings σαν λίστες. 1. Τύποι Δεδομένων Μέχρι τώρα έχουμε δει τους ακόλουθους τύπους δεδομένων: String, Integer, Float, Boolean. Για μια μεταβλητή μπορούμε με χρήση της εντολής type να δούμε τι τύπος είναι. Π.χ.: Μπορεί να εφαρμοστεί και σε μια μεταβλητή: Η Python έχει δύο τύπους δεδομένων που θα μελετήσουμε σε αυτό το εργαστήριο, τις λίστες (lists) και τα tuples. Οι λίστες μοιάζουν με πίνακες αλλά μπορούν να αλλάξουν μέγεθος. Δείτε τις παρακάτω εντολές, ξεχωριστά: 2. Λίστες στην Python Όλοι μας έχουμε φτιάξει λίστες για ψώνια, λίστες με τις δουλειές της μέρας (για να μην κάνουμε ούτε τις μισές)...θα δούμε πώς μπορούμε να φτιάξουμε λίστες στην Python. Δοκιμάστε το παρακάτω: Με την πρώτη εντολή φτιάξαμε μια λίστα η οποία αποτελείται από δύο στοιχεία, που είναι και τα δύο ακέραιοι. Με τη δεύτερη, τυπώσαμε τη λίστα. Με την τρίτη, τυπώσαμε το πρώτο στοιχείο της. Φυσικά ο τρόπος μας είναι παραπάνω από γνώριμος. Το πρώτο στοιχείο έχει αρίθμηση 0, άρα μια
λίστα με 10 στοιχεία θα έχει αρίθμηση 9 για το τελευταίο της στοιχείο. Δοκιμάστε να αλλάξετε την τιμή του πρώτου της στοιχείου και να την ξανατυπώσετε, προκειμένου να το επαληθεύσετε. 3. Tuples στην Python Τα tuples που είδαμε πιο πριν είναι παρόμοια με τις λίστες. Μία διαφορά είναι στον τρόπο με τον οποίο φτιάχνουμε ένα tuple σε σχέση με αυτόν της λίστας: τα tuples χρησιμοποιούν παρενθέσεις. Κατά τ άλλα, μοιάζουν να λειτουργούν με τον ίδιο τρόπο......μέχρι να προσπαθήσουμε να τους αλλάξουμε τιμή: Άρα οι τιμές των tuples δεν αλλάζουν. Ποιος ο λόγος, όμως, να έχουμε tuples; Καταρχάς τα προγράμματά μας τρέχουν λίγο πιο γρήγορα, όταν χρησιμοποιούν μεταβλητές για τις οποίες γνωρίζουν εκ των προτέρων ότι δεν αλλάζουν τιμές. Κατά δεύτερον, μας βολεύει προγραμματιστικά σε πολλές περιπτώσεις. Π.χ., για τα χρώματα που δεν αλλάζουν. 4. Loops σε λίστες Όσο κι αν φαίνεται περίεργο, υπάρχουν δύο τρόποι για να μπορέσει κανείς να διαπεράσει μια λίστα με ένα for loop. Ο πρώτος βασίζεται στη λογική του for-each. Ο τύπος αυτός του for, παίρνει μια συλλογή από αντικείμενα και πραγματοποιεί μια επανάληψη για το καθένα. Παίρνει ένα αντίγραφο του αντικειμένου και το αποθηκεύει σε μια μεταβλητή για επεξεργασία. Ας δούμε ένα παράδειγμα: Σε μια λίστα μπορούμε να αποθηκεύσουμε και Strings (να η λίστα του σούπερ μάρκετ!)
Αλλά μπορούμε να φτιάξουμε και μια λίστα που να περιέχει άλλες λίστες! Αυτός είναι ο πρώτος τρόπος, που είναι και αρκετά βολικός. Ο δεύτερος τρόπος είναι και αυτός που θα μας φαινόταν μέχρι τώρα ο πιο φυσιολογικός, δηλαδή, γνωρίζοντας το μήκος της λίστας, να φτιάξουμε ένα loop που να την διαπερνάει στοιχείο προς στοιχείο, από το πρώτο, εώς το τελευταίο. Η συνάρτηση len μας δίνει το μήκος μιας λίστας. Αν τη συνδυάσουμε με τη range που έχουμε δει προηγουμένως, τότε μπορούμε να διαπεράσουμε όλη τη λίστα: Ο δεύτερος τρόπος μας επιτρέπει να τροποποιήσουμε τη λίστα, κάτι που δεν μπορεί να κάνει ο πρώτος. Άρα κάθε φορά θα επιλέγουμε τον κατάλληλο για τη χρήση που θέλουμε. 5. Πρόσθεση σε λίστα Με χρήση της εντολής append μπορούμε να προσθέτουμε καινούρια αντικείμενα στη λίστα (όχι όμως και σε ένα tuple). Η λίστα δεν είναι υλοποιημένη (στην Python) με τη μορφή πίνακα, και έτσι η πρόσθεση σε αυτή δεν είναι αργή, καθώς δε χρειάζεται να βρεθεί π.χ. στο προηγούμενο παράδειγμα χώρος στη μνήμη για 5 συνεχόμενες θέσεις, προκειμένου να χωρέσει και το 9. Μπορούμε επίσης εάν είναι επιθυμητό, να δημιουργήσουμε μια κενή λίστα, η οποία και στη συνέχεια να γεμίζει, π.χ. από είσοδο του χρήστη.
Άσκηση: Να τροποποιήσετε το προηγούμενο παράδειγμα, έτσι ώστε στο τέλος να τυπώνεται τόσο η λίστα, όσο και το άθροισμα των ακεραίων που έδωσε ο χρήστης, με τους δύο τρόπους που είδαμε πιο πριν. 6. Τεμαχίζοντας Strings Τα Strings στην Python είναι λίστες από χαρακτήρες. Μπορούμε λοιπόν να τα θεωρήσουμε σαν λίστες όπου κάθε γράμμα είναι και ένα αντικείμενο. Δείτε τον παρακάτω κώδικα για να καταλάβετε πώς δουλεύει αυτό: Στην Python μπορούμε να χρησιμοποιήσουμε και μαθηματικούς τελεστές στα Strings. Δείτε το παρακάτω παράδειγμα:
Για να υπολογίσουμε το μήκος ενός string χρησιμοποιούμε και πάλι την len: Και φυσικά μπορούμε να διαπεράσουμε ένα string ακριβώς όπως και μια λίστα: Άσκηση: Σύμφωνα με τον παρακάτω κώδικα, να τυπώνετε τη συντομογραφία (τρεις πρώτοι χαρακτήρες) του αντίστοιχου μήνα με την είσοδο του χρήστη. Π.χ. για είσοδο 3, να τυπώνεται Mar. 7. Συσχετιστικοί Πίνακες Ας δούμε πώς μπορούμε να φτιάξουμε συσχετιστικούς πίνακες στην Python (ακόμη και αν δεν ξέρουμε τι είναι, ακόμη και αν δε θα τους χρησιμοποιήσουμε πιθανοτότατα):