which_one = input("What month (1-12)? ") months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',\ 'August', 'September', 'October', 'November', 'December'] if 1 <= which_one <= 12: print "The month is",months[which_one - 1]
και το αποτέλεσμα:
What month (1-12)? 3 The month is March
Σε αυτό το παράδειγμα η μεταβλητή months είναι ένας κατάλογος. Η μεταβλητή months ορίζεται με την γραμμή months = ['January', 'February', 'March', 'April', 'May', 'June', 'July',\
'August', 'September', 'October', 'November', 'December'] (Σημειώστε ότι μια ανάποδη κάθετος \
μπορεί να χρησιμοποιηθεί για να χωρίσει μια μακριά γραμμή). Οι αγκύλες [
και ]
αρχίζουν και τελειώνουν τα ορίσματα που μεταξύ τους χωρίζονται με κόμμα (``,
''). The list is used in months[which_one - 1]
. Αποτελείται από στοιχείο - τιμές που αριθμούνται από το 0. Με άλλα λόγια αν θέλαμε το Ιανουάριο (January) θα γράφαμε months[0]. Δώστε στον κατάλογο έναν αριθμό θέσης και θα σας επιστρέψει την τιμή που κρατάει στην θέση αυτή.
Η εντολή if 1 <= which_one <= 12: θα ισχύει μόνο αν το which_one είναι διάστημα ανάμεσα στο ένα και το δώδεκα (το δίαστημα που ορίζεται η μεταβλητή όπως στην άλγεβρα).
Μπορούμε να φανταστούμε τους καταλογους σαν σειρές από κουτιά. Για παράδειγμα, τα κουτιά που δημιουργούνται κάπως έτσι: demolist = ['life',42, 'the universe', 6,'and',7] φαίνονται παρακάτω:
box number | 0 | 1 | 2 | 3 | 4 | 5 |
demolist | `life' | 42 | `the universe' | 6 | `and' | 7 |
Κάθε κουτί αναφέρεται στον αριθμό της θέσης του. Έτσι το demolist[0] θα δώσει 'life', το demolist[1]θα δώσει 42 και ούτω καθ' εξής μέχρι το demolist[5] που θα δώσει 7.
demolist = ['life',42, 'the universe', 6,'and',7] print 'demolist = ',demolist demolist.append('everything') print "after 'everything' was appended demolist is now:" print demolist print 'len(demolist) =', len(demolist) print 'demolist.index(42) =',demolist.index(42) print 'demolist[1] =', demolist[1] #Next we will loop through the list c = 0 while c < len(demolist): print 'demolist[',c,']=',demolist[c] c = c + 1 del demolist[2] print "After 'the universe' was removed demolist is now:" print demolist if 'life' in demolist: print "'life' was found in demolist" else: print "'life' was not found in demolist" if 'amoeba' in demolist: print "'amoeba' was found in demolist" if 'amoeba' not in demolist: print "'amoeba' was not found in demolist" demolist.sort() print 'The sorted demolist is ',demolist
Και το αποτέλεσμα:
demolist = ['life', 42, 'the universe', 6, 'and', 7] after 'everything' was appended demolist is now: ['life', 42, 'the universe', 6, 'and', 7, 'everything'] len(demolist) = 7 demolist.index(42) = 1 demolist[1] = 42 demolist[ 0 ]= life demolist[ 1 ]= 42 demolist[ 2 ]= the universe demolist[ 3 ]= 6 demolist[ 4 ]= and demolist[ 5 ]= 7 demolist[ 6 ]= everything After 'the universe' was removed demolist is now: ['life', 42, 6, 'and', 7, 'everything'] 'life' was found in demolist 'amoeba' was not found in demolist The sorted demolist is [6, 7, 42, 'and', 'everything', 'life']
Είδαμε στο παραπάνω παράδειγμα ένα πλήθος από νέες λειτουργίες. Παρατηρήσατε ίσως ότι μπορείτε απλώς να εμφανίσετε όλη τον καταλογο με το print. Η εντολή append χρησιμοποιείται για να προσθέσουμε ένα νέο στοιχείο στο τέλος του καταλογου. Η εντολή len
μας επιστρέφει το πλήθος των αντικειμένων - τιμών υπάρχει σε έναν κατάλογο. Τα έγκυρα ευρετηρια (των αριθμών που μπορούν να χρησιμοποιηθούν μέσα στο []) για έναν κατάλογο βρίσκονται στο διάστημα από 0 ως το len - 1. Η εντολή
index μας λέει το που είναι η πρώτη θέση ενός αντικειμένου μέσα στον καταλογο. Προσέξτε ότι η εντολή demolist.index(42)
επιστρέφει 1 ενώ η demolist[1]
επιστρέφει 42. Η γραμμή
#Next we will loop through the list
είναι ένα σχόλιο προς τον προγραμματιστή. Η Python θα αγνοήσει τις γραμμές που ξεκινάνε με #
. Οι γραμμές:
c = 0 while c < len(demolist): print 'demolist[',c,']=',demolist[c] c = c + 1δημιουργούν την μεταβλητή c η οποία ξεκινά από το 0 και αυξάνεται μόλις φτάσει το τελευταίο στοιχείο του καταλογου. Εν τω μεταξύ η εντολή print εμφανίζει το κάθε στοιχείο - τιμή του καταλογου.
Η εντολή del
χρησιμοποιείται για να διαγραφεί ένα στοιχείο από τον καταλογο. Οι επόμενες γραμμές δείχνουν πως χρησιμοποιείται ο συντελεστής in για να ελέγξουμε αν υπάρχει ένα στοιχείο στον καταλογο ή όχι.
Η εντολή sort
χρησιμοποιείται για να ταξινομήσουμε τον καταλογο. Είναι χρήσιμο για να δούμε τα στοιχεία του καταλογου με την σειρά από τον μικρότερο στον μεγαλύτερο αριθμό ή αλφαβητικά. Προσέξτε όμως γιατί η χρήση της εντολής ανακατανέμει τα στοιχεία της.
Συνοπτικά έχουμε τις παρακάτω εντολές για έναν κατάλογο:
Παράδειγμα | Επεξήγηση |
list[2] | Δημιουργεί πρόσβαση στο στοιχείο με αριθμό ευρετηριου 2 |
list[2] = 3 | ορίζει ως 3 το στοιχείο με αριθμό ευρετηριου 2 |
del list[2] | διαγράφει το στοιχείο με αριθμό ευρετηριου 2 |
len(list) | επιστρέφει το μήκος του καταλογου |
"value" in list | είναι αληθής εάν η "value" είναι στοιχείο του καταλογου |
"value" not in list | είναι αληθής εάν η "value" δεν είναι στοιχείο του καταλογου |
list.sort() | ταξινομεί τον καταλογο |
list.index("value") | επιστρέφει τον αριθμό ευρετηριου της πρώτης θέσης που υπάρχει η τιμή "value" |
list.append("value") | προσθέτει το στοιχείο - τιμή "value" στο τέλος του καταλογου |
Το παρακάτω παράδειγμα χρησιμοποιεί τις εντολές αυτές με έναν πιο χρήσιμο τρόπο:
menu_item = 0 list = [] while menu_item != 9: print "--------------------" print "1. Print the list" print "2. Add a name to the list" print "3. Remove a name from the list" print "4. Change an item in the list" print "9. Quit" menu_item = input("Pick an item from the menu: ") if menu_item == 1: current = 0 if len(list) > 0: while current < len(list): print current,". ",list[current] current = current + 1 else: print "List is empty" elif menu_item == 2: name = raw_input("Type in a name to add: ") list.append(name) elif menu_item == 3: del_name = raw_input("What name would you like to remove: ") if del_name in list: item_number = list.index(del_name) del list[item_number] #The code above only removes the first occurance of # the name. The code below from Gerald removes all. #while del_name in list: # item_number = list.index(del_name) # del list[item_number] else: print del_name," was not found" elif menu_item == 4: old_name = raw_input("What name would you like to change: ") if old_name in list: item_number = list.index(old_name) new_name = raw_input("What is the new name: ") list[item_number] = new_name else: print old_name," was not found" print "Goodbye"
Και να ένα μέρος του αποτελέσματος:
-------------------- 1. Print the list 2. Add a name to the list 3. Remove a name from the list 4. Change an item in the list 9. Quit Pick an item from the menu: 2 Type in a name to add: Jack Pick an item from the menu: 2 Type in a name to add: Jill Pick an item from the menu: 1 0 . Jack 1 . Jill Pick an item from the menu: 3 What name would you like to remove: Jack Pick an item from the menu: 4 What name would you like to change: Jill What is the new name: Jill Peters Pick an item from the menu: 1 0 . Jill Peters Pick an item from the menu: 9 Goodbye
Ήταν πράγματι ένας μακροσκελής κώδικας. Ας του ρίξουμε μια ματιά. Η γραμμή list = [] δημιουργεί την μεταβλητή list ως εναν κατάλογο χωρίς τιμές (στοιχεία). Η επόμενη καίρια γραμμή είναι η while menu_item != 9:
. Αυτή ξεκινάει έναν βρόγχο που δημιουργεί ένα μενού αλληλεπίδρασης του χρήστη με το πρόγραμμα. Οι επόμενες γραμμές εμφανίζουν το μενού και γίνεται έτσι η επιλογή για το ποιο μέρος του προγράμματος θα τρέξει.
Το κομμάτι:
current = 0 if len(list) > 0: while current < len(list): print current,". ",list[current] current = current + 1 else: print "List is empty"``διατρέχει'' όλο τον κατάλογο και εμφανίζει κάθε όνομα. Η εντολή
len(list_name)
μας λέει πόσα στοιχεία υπάρχουν μέσα στον κατάλογο. Αν η len επιστρέψει 0
σημαίνει ότι ο κατάλογος είναι άδειος.
Μερικές γραμμές πιο κάτω εμφανίζεται η εντολή list.append(name). Χρησιμοποιεί την συνάρτηση append για να προσθέσει ένα νέο αντκείμενο στο τέλος του καταλογου. Πηγαίνετε δυό γραμμές παρακάτω και παρατηρήστε το κομμάτι του κώδικα που λέει:
item_number = list.index(del_name) del list[item_number]Εδώ με την εντολή index μπορούμε να βρούμε τον αριθμό του ευρετηριου που θα χρησιμοποιήσουμε για να διαγράψουμε το στοιχείο. Τέλος η εντολή
del list[item_number]
χρησιμοποιείται για να διαγράψουμε το στοιχείο από τον καταλογο.
Το επόμενο κομμάτι
old_name = raw_input("What name would you like to change: ") if old_name in list: item_number = list.index(old_name) new_name = raw_input("What is the new name: ") list[item_number] = new_name else: print old_name," was not found"χρησιμοποιεί την συνάρτηση index για να βρεί τον αριθμό ευρετηριου
item_number
και ορίζει το νέο όνομα ως new_name
εκεί που ήταν το παλιό (old_name
).
test.py
## This program runs a test of knowledge true = 1 false = 0 # First get the test questions # Later this will be modified to use file io. def get_questions(): # notice how the data is stored as a list of lists return [["What color is the daytime sky on a clear day?","blue"],\ ["What is the answer to life, the universe and everything?","42"],\ ["What is a three letter word for mouse trap?","cat"]]
# This will test a single question # it takes a single question in # it returns true if the user typed the correct answer, otherwise false def check_question(question_and_answer): #extract the question and the answer from the list question = question_and_answer[0] answer = question_and_answer[1] # give the question to the user given_answer = raw_input(question) # compare the user's answer to the testers answer if answer == given_answer: print "Correct" return true else: print "Incorrect, correct was:",answer return false
# This will run through all the questions def run_test(questions): if len(questions) == 0: print "No questions were given." # the return exits the function return index = 0 right = 0 while index < len(questions): #Check the question if check_question(questions[index]): right = right + 1 #go to the next question index = index + 1 #notice the order of the computation, first multiply, then divide print "You got ",right*100/len(questions),"% right out of",len(questions) #now lets run the questions run_test(get_questions())
Δοκιμαστικά αποτελέσματα:
What color is the daytime sky on a clear day?green Incorrect, correct was: blue What is the answer to life, the universe and everything?42 Correct What is a three letter word for mouse trap?cat Correct You got 66 % right out of 3
Επεκτείνετε τις λειτουργίες του προγράμματος test.py έτσι ώστε να έχει μενου διασύνδεσης του συστήματος με τον χρήστη δίνοντας του την δυνατότητα της επιλογής ανάμεσα στο να δώσει ένα τεστ, να δει τις ερωτήσεις και τις απαντήσεις και να μπορεί να κλείσει το πρόγραμμα. Προσθέστε ένα ακόμη ερώτημα: "What noise does a truly advanced machine make?" (τι ήχο βγάζει ένα πραγματικά προηγμένο μηχάνημα;) με απάντηση: "ping".