Εισαγωγή στον Προγραμματισμό Python Μάθημα 3: πίνακες και βρόγχος επανάληψης for (για) Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ. Δημητρακάκης
Πίνακες/Λίστες Σε πολλές περιπτώσεις στον προγραμματισμό υπάρχει η ανάγκη να αποθηκεύω πολλά δεδομένα σε μία μεταβλητή. Η μεταβλητή αυτή συνήθως λέγεται πίνακας (array) και ειδικά στην περίπτωση της Python λέγεται λίστα (list) Παράδειγμα πινάκων στην Python: numbers = [34, 12, 56, 68, 23, 1] names = ["mary", "john", "nick"] ages = [12.3, 25.8, 32.0] Προσέξτε ότι τα στοιχεία του πίνακα αριθμούνται από 0 έως πλήθος στοιχείων -1: >>> >>> numbers[2] 56 >>> Το πλήθος των στοιχείων ενός πίνακα λέγεται array length και στην python επιστρέφεται από τη συνάρτηση len(), π.χ. >>> names = ["mary", "john", "nick"] >>> len(names) 3 >>> Θα αναλυθεί σε επόμενο μάθημα το τι είναι συνάρτηση στην python. Προς το παρόν να θυμάστε ότι όταν μια λέξη ακολουθείται από παρενθέσεις αντιστοιχεί σε συνάρτηση. Συνάρτηση είναι επίσης η input()
Αλφαριθμητικά Λίστα Χαρακτήρων Στις περισσότερες γλώσσες προγραμματισμού, ένα αλφαριθμητικό (String) αντιστοιχεί σε ένα πίνακα χαρακτήρων όπως φαίνεται παρακάτω: >>> >>> a = "Nice weather today" >>> a[0] 'N' >>> a[1] 'i' >>> len(a) 18 >>> a[17] 'y' >>>
Ο βρόγχος for (για) Γενικότερα οι βρόγχοι επανάληψης χρησιμοποιούνται όταν μια διαδικασία στο πρόγραμμα μας πρέπει να εκτελεστεί επαναληπτικά. Ο βρόγχος επανάληψης while (όσο) που μάθαμε στο προηγούμενο μάθημα, μας επιτρέπει να εκτελέσουμε μία διαδικασία για όσο ισχύει μία συνθήκη (π.χ. μέχρι ο χρήστης να γράψει τη λέξη quit, ή μέχρι το άθροισμά μας να μην υπερβαίνει τον αριθμό 100). Ο βρόγχος επανάληψης for (για) μας επιτρέπει να εκτελέσουμε μια διαδικασία για ένα δεδομένο αριθμό επαναλήψεων (π.χ. για 10 φορές, ή για τόσες φορές όσες είναι τα στοιχεία ενός πίνακα)
Παράδειγμα: Υπολογισμός Αθροίσματος και Μέσου Όρου s = 0 #edo orizoume ena pinaka akeraion me to onoma numbers numbers = [34, 12, 15, 18, 21, 90] #h synarthsh len mas dinei to mikos tou pinaka print "There are", len(numbers), "numbers" #edo athroizontai oi arithmoi for x in numbers: s = s + x #ektyposi athroismatos print "The sum is: ", s #ypologismos kai ektyposi mesou orou avg = (s + 0.0)/len(numbers) print "The average is: ", avg
Άσκηση Πόσοι χαρακτήρες υπάρχουν σε ένα πίνακα αλφαριθμητικών, όπως για παράδειγμα: names = [ giorgos, maria, nikos, eleni, giannis ]???
range (εύρος) Η συνάρτηση range() επιστρέφει μια λίστα αριθμών και επιδέχεται από ένα έως τρία ορίσματα (arguments). Παράδειγμα χρήσης της συνάρτησης με ένα όρισμα: >>> range(5) [0, 1, 2, 3, 4] Παράδειγμα χρήσης της συνάρτησης με δύο ορίσματα: >>> range (2, 13) [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] Παράδειγμα χρήσης της συνάρτησης με τρία ορίσματα: >>> range(0, 10, 3) [0, 3, 6, 9] Παράδειγμα φθίνουσας ακολουθίας αριθμών: >>> range(10, 0, -3) [10, 7, 4, 1]
Παράδειγμα 1 Υλοποιήστε μία δομή επανάληψης, η οποία να εκτυπώνει τις 20 πρώτες δυνάμεις του 2. Λύση: for x in range(20): print 2**x
Άσκηση Να υλοποιήσετε ένα πρόγραμμα το οποίο θα εκτυπώνει τις συχνότητες σε (Hz) για όλες τις νότες από το μεσαίο Λα έως τη νότα Λα που βρίσκεται μία οκτάβα πιο πάνω Υπενθύμιση: Μια οκτάβα αποτελείται από 12 νότες (ημιτόνια) Αν μια νότα έχει συχνότητα f, η συχνότητα της νότας που είναι μία οκτάβα (12 ημιτόνια) επάνω είναι 2f Η συχνότητα του μεσαίου Λα είναι 440Hz Οι συχνότητες των ημιτονίων αυξάνονται γεωμετρικά, συνεπώς, για να ανέβω ένα ημιτόνιο πρέπει να πολλαπλασιάσω με τον ίδιο πάντα αριθμό, έστω x. Τότε: x 12 = 2=> x = 2 1/12 =
Παράδειγμα 2: Εκτύπωση δεδομένων εισόδου Να υλοποιηθεί ένα πρόγραμμα το οποίο θα ζητάει από το χρήστη να εισάγει κάποια ονόματα χωρισμένα με κόμμα κι έπειτα θα εκτυπώνει το καθένα από αυτά σε χωριστή γραμμή. Λύση: #zita apo to xrhsth ta dedomena #sti metavliti students apothikeyetai ena alfarithmitiko # to opoio periexei kai ta kommata students = raw_input("give student names separated by comma: ") #h synartisi split xorizei to alfarithmitiko students #se kathe komma (split = xorizo) #to apotelesma apothikeyetai se enan pinaka me to onoma names names = students.split(",") #ektypose to kathe stoixeio tou pinaka names for name in names: print "Hello ", name Προσοχή: Σε αυτό το πρόγραμμα χρησιμοποιείται η συνάρτηση raw_input() αντί της input() για να υποδηλώσει στην Python ότι τα δεδομένα που θα εισάγει ο χρήστης πρέπει να διαβαστούν ως αλφαριθμιτικό και όχι ως αριθμός!!!