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'] (обратите внимание, можно использовать \ для переноса длинных строк). [ и ] начинают и заканчивают список, а запятая разделяет элементы списка. Список используется в months[which_one - 1]. Он состоит из элементов, которые пронумерованы начиная с 0. Другими словами, если вы хотите January, вы напишете months[0]. По номеру список выдает величину, находящуюся в этом месте.
Выражение if 1 <= which_one <= 12: будет истинно только в том случае, если which_one находится в интервале от одного до двенадцати (другими словами, то же, что это означает в алгебре).
Можно представить список как набор контейнеров, например список demolist = ['life',42, 'the universe', 6,'and',7] выглядит следующим образом:
номер контейнера | 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] #Просмотрим весь список 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. Строка #Просмотрим весь список просто напоминание для программистов (также именуемое комментарием). Python игнорирует все строки, которые начинаются с #. Далее следуют команды:
c = 0 while c < len(demolist): print 'demolist[',c,']=',demolist[c] c = c + 1Создается новая переменная c, которая сначала содержит 0, а затем каждый раз увеличивается на 1, пока она не дойдет до последнего индекса списка. Тем временем команда print выводит каждый элемент списка.
Команда del используется для того чтобы удалить данный элемент списка. Несколько следующих команд используют оператор in, чтобы проверить, находится ли данный элемент в списке.
Функция sort сортирует список. Это бывает полезным, если вам нужно упорядочить список по возрастанию элементов, или по алфавиту. Очевидно, это перемещает элементы списка на другие позиции.
Как видите, для списка применимы следующие операторы:
пример | объяснение |
list[2] | доступ к элементу с индексом 2 |
list[2] = 3 | присвоение элементу с индексом 2 значения 3 |
del list[2] | удаление элемента с индексом 2 |
len(list) | длина списка |
"value" in list | истинно, если “value” является элементом cписка |
"value" not in list | истинно, если “value” не является элементом cписка |
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] #Вышеприведенные команды удаляет первый элемент #с нужным именем. Следующие команды, добавленые #Жеральдом удаляет все элементы с таким именем. #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) считает количество элементов в списке. Если получаем 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
## Программа на проверку знаний true = 1 false = 0 # Сначала идут вопросы проверки # Позже переделаем это, используя файловый ввод-вывод def get_questions(): # обратите внимание, данные записаны как список списков 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"]]
# Задаем один вопрос. # Вопрос идет как аргумент # возвращает истинно, если пользователь ответил правильно, иначе ложно def check_question(question_and_answer): #извлекаем один вопрос и ответ из списка question = question_and_answer[0] answer = question_and_answer[1] # задаем вопрос пользователю given_answer = raw_input(question) # сравниваем ответ пользователя с правильным if answer == given_answer: print "Correct" return true else: print "Incorrect, correct was:",answer return false
# Переберем все вопросы def run_test(questions): if len(questions) == 0: print "No questions were given." # return – выход из функции return index = 0 right = 0 while index < len(questions): #Проверим вопрос if check_question(questions[index]): right = right + 1 #следующий вопрос index = index + 1 #обратите внимание на порядок вычисления: #сначала умножение, потом деление print "You got ",right*100/len(questions),"% right out of",len(questions) #задаем вопросы run_test(get_questions())
Sample Output:
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”.