Kodomo

Пользователь

Подсказки по программированию на языке Python для начинающих

Disclaimer: подсказки написаны в помощь начинающим с надеждой, что окажутся полезными, но написаны не-специалистом в языке Python. Если что-то не работает так, как тут написано, или возникают еще какие-то трудности, сообщайте о них пожалуйста на адрес udavdasha@fbb.msu.ru.

Совет по использованию в качестве справочника: попробуйте автоматический поиск на этой странице нужного названия (<Ctrl + F> и дальше ввод). Скорее всего, вы найдете или пример с употреблением искомого, или описание этого :)

Содержание

1. Вводные замечания

1.1. Основные понятия

1.2. Отступы и уровни вложенности

Важно: обратите внимание на объяснение ниже про уровни вложенности и отступы; у многих были вопросы по этому поводу. Для тех, кому интересны подробности, могу посоветовать информацию отсюда.

   1 def printInfo (student_list):
   2     n = 1
   3     print "List of the students:"
   4     for student in student_list:
   5         print "Student %i:" %n
   6         if student == "Lalala":
   7             print "Fake student Lalala"
   8         else:
   9             print "FBB student %s" % student
  10         n = n + 1
  11          
  12 studs = ["Alina", "Daria", "Lalala", "Sergei", "Petr"]
  13 printInfo(studs)

2. Основные типы команд на языке Python

Основные команды в программировании применяются к переменным. Чтобы сохранить в оперативной памяти на время работы программы любую информацию, ее надо записать в ту или иную переменную (точнее, записывается информация в память, а переменная служит просто "ярлычком", за которую эту информацию можно извлечь).

Имена переменных должны отвечать нескольким требованиям:

Самые простые операции (вроде арифметических) используются с помощью так называемых операций (по-английски это называется operator, не запутайтесь). Обычно они работают интуитивно понятным образом: например, операция сложения сложит числа слева и справа от себя по правилам арифметики. Величины, с которыми происходит операция, называют операндами.

2.0. Операция присвоения значения

   1 a = 5          # Переменной a присваивается значение 5
   2 foo = 100      # Переменной foo присваивается значение 100
   3 a = foo        # Переменной a присваивается то значение, которое было присвоено foo, то есть 100

2.1. Арифметические операции

Операция сложения: операнды складываются

   1 a = 3 + 5      # Сперва вычисляется 3 + 5, а потом присваивается результат
   2 a += 3         # К исходному значению a прибавляется 3
   3 a = a + 3      # То же самое, что и предыдущая строка

Операция вычитания: правый операнд вычитается из левого операнда

   1 foo = 5
   2 a = foo - 3    # Подставляется значение foo, вычисляется выражение справа и присваивается результат
   3 a -= 3         # От исходного значения a вычитается 3
   4 a = a - 3      # То же самое, что и предыдущая строка

Операция умножения: операнды перемножаются

   1 a = 3 * 5      # Сперва вычисляется 3 * 5, а потом присваивается результат
   2 a *= 2         # Значение а увеличивается в 2 раза
   3 a = a * 2      # То же самое, что и предыдущая строка

Операция возведения в степень: левый операнд возводится в степень правого операнда

   1 a = 2 ** 3     # Вычисляется 2 в 3 степени и присваивается переменной а
   2 a = 2 * 2 * 2  # То же самое, что и предыдущая строка

Операция деления: левый операнд делится на правый операнд. Внимание: если оба операнда целые (тип int), а результат должен получиться дробным (как в примере ниже, строчка 2), то дробная часть будет просто отброшена. Чтобы этого не случилось, хотя бы одно из чисел при делении нужно делать числом типа float, причем приводить к этому типу нужно ДО того, как совершится операция (см. строки 3 и 4 примера)

   1 a = 4 / 2        # Результат целый, а = 2
   2 a = 5 / 2        # Настоящий результат 2.5, но дробная часть отбрасывается, и выходит что a = 2
   3 a = float(5 / 2) # Приведение к типу `float` произошло уже после того, как было выполнено отбрасывание; a = 2.0
   4 a = float(5) / 2 # Приведения к типу `float` одного из чисел достаточно, чтобы результат тоже был float; a = 2.5

2.2. Операции сравнения

Операция сравнения равенства: в качестве операндов могут выступать пара чисел или пара строк. В обоих случаях операция возвращает булево значение True, если эти числа равны (или строки совпадают по всем символам), и False иначе.

   1 a = 3 == 5         # a = False
   2 a = 5 == 5         # a = True
   3 a = "Cat" == "foo" # a = False
   4 a = "foo" == "foo" # a = True

Операция сравнения на НЕравенство: в качестве операндов могут выступать пара чисел или пара строк. В обоих случаях операция возвращает булево значение True, если эти числа НЕ равны (или строки отличаются друг от друга), и False иначе.

   1 a = 3 != 5         # a = True
   2 a = 5 != 5         # a = False
   3 a = "Cat" != "foo" # a = True
   4 a = "foo" != "foo" # a = False

Операции сравнения типа "больше" и "меньше": в качестве операндов могут выступать пара чисел или пара строк. Числа: операция > возвращает True, если левый операнд строго больше правого, и False - иначе. Для операции <, соответственно, наоборот. Строки: строчки сравниваются с точки зрения алфавитного порядка, и при этом есть тонкости: например, если регистр букв в строчках разный, то сравнение может дать странные результаты: все большие буквы считаются по алфавитному порядку раньше, чем все маленькие.

   1 a = 3 > 5           # a = False
   2 a = 5 < 5           # a = False
   3 a = 6 > 3           # a = True
   4 a = "aaaa" < "bbbb" # a = True
   5 a = "aaaa" < "BBBB" # a = False

Операции сравнения типа "больше или равно" и "меньше или равно": все то же самое, что и для операций "больше" и "меньше", но равенство сравниваемых величин будет теперь давать True. Обратите внимание, что порядок следования символов в операции важен: вы не можете написать => или =<.

   1 a = 3 >= 5           # a = False
   2 a = 5 <= 5           # a = True
   3 a = 6 >= 3           # a = True
   4 a = "aaaa" <= "bbbb" # a = True
   5 a = "aaaa" <= "BBBB" # a = False

2.3. Логические операции

Операция И (and): операндами являются два булевых значения. Возвращается булево значение True, если обе они True, и False иначе

   1 a = True and True     # a = True
   2 a = True and False    # a = False
   3 a = False and True    # a = False
   4 a = False and False   # a = False

Операция ИЛИ (or): операндами являются два булевых значения. Возвращается булево значение True, если хотя бы одна из них True, и False иначе.

   1 a = True or True     # a = True
   2 a = True or False    # a = True
   3 a = False or True    # a = True
   4 a = False or False   # a = False

Операция НЕ (not): действует на один операнд и как бы обращает его значение: если он True, то результатом будет False, и наоборот.

   1 a = not True     # a = False
   2 a = not False    # a = True

3. Функции

3.1. Что такое функция

Функция - это выделенные в отдельный блок кода команды, которые выполняются не в тот момент, когда до них доходит интерпретатор, а в ответ на последующие вызовы функции. Функция характеризуется тремя вещами:

  1. Название. Это уникальное имя, по которому функция будет вызываться. Ваши новые функции не должны называться так же, как встроенные функции языка Python. Названия функций должны удовлетворять тем же требованиям, что и имена переменных (см. раздел 2).
  2. Список аргументов. Аргументы функции - это переменные, принимающие значения тех чисел, строк и пр., которые пользователь передает функции при ее вызове. Функция может не содержать аргументов.
  3. Возвращаемое значение. Некоторые функции в ходе своей работы приходят к результату, который они передают обратно в место своего вызова. Если не указано, что функция возвращает, то она возвращает величину None служебного типа NoneType.

3.2. Как задать функцию

Первая строчка при задании функции содержит ключевое слово def, указывающее на то, что сейчас будет задана новая функция, а также имя функции и список аргументов. Строчка завершается двоеточием. Все строчки-команды, из которых построено тело функции и которые следуют за этой строчкой, в обязательном порядке следует выделять отступом: табуляцией или несколькими (по стандарту языка - четырьмя) пробелами. Последняя команда функции может содержать ключевое слово return, после которого указывается та переменная, которая будет возвращена функцией.

В примере ниже название функции myFunc, она принимает два аргумента, первый из которых помещается в переменную x, а второй в переменную y. Далее во второй строчке вычисляется значение переменной f, которое и является возвращаемым значением для данной функции, как видно из строчки 3.

   1 def myFunc (x, y):
   2         f = 5*(x ** 2) + 3*y + 7
   3         return f

3.3. Как запустить функцию

После того, как функция задана, обратиться к ней можно по имени, указав в круглых скобках после имени те конкретные значения параметров, при которых требуется запустить функцию. Следите за тем, чтобы задание функции было по строчкам выше, чем ее вызов; иначе интерпретатор языка не сможет вызвать ее. В строках 1-3 примера ниже задана функция, а в строках 5 и 6 она вызывается.

   1 def myFunc (x, y):
   2         f = x + y
   3         return f
   4 
   5 a = myFunc (4, 5)     # а будет равно 4 + 5 = 9
   6 b = myFunc (3, 2)     # b будет равно 3 + 2 = 5

4. Основные встроенные функции в Python и их особенности

Встроенные функции языка Python описаны подробно на сайте с официальной документацией.

4.1. Приведение типов

Если нужно привести тип той или иной переменной к другому типу, для этого используются функции:

Обратите внимание на то, что строчку можно привести к числу только, если в строчке написано число. Например, int("123")=123, float("3.14")=3.14. В противном случае привести строчку к числу нельзя (это вызовет ошибку скрипта), а при приведении дробного числа (тип float) к целочисленному типу int дробная часть будет просто отброшена, то есть округления по правилам математики не произойдет. Чтобы узнать тип той или иной переменной, можно применить к ней функцию type(x).

4.2. Получение ввода с клавиатуры

   1 # Пример для Python 2.7
   2 username = raw_input("Please enter your name: ")
   3 password = raw_input("Please enter your password: ")
   4 print "Haha, now I have your password, %s" % username
   5 print "Your password was", password

4.3. Вывод информации на экран

   1 name = "Dasha"
   2 age = 26
   3 print "My name is %s, my age is %i" % (name, age)
   4 temp_str = "My name is %s, my age is %i" % (name, age) # temp_str = "My name is Dasha, my age is 26"
   5 print temp_str

4.4. Открытие файла для чтения, проход по строкам файла и закрытие файла

Рассмотрите следующий код примера. Он открывает файл с именем, заданным в переменной name (строка 2), задает переменную n, которая будет считать строчки файла (строка 3), а затем инициирует цикл for (строка 4). При этом каждая новая строка файла будет помещаться в переменную temp_str, и в строчке 5 эта переменная будет перезаписываться, дабы удалить из нее лишние символы конца строки. Функция strip(), которая для этого используется, принимает в качестве аргумента перечисление символов, которые нужно "откусить" от строки с начала и с конца. Если запустить ее без параметров, то в качестве этих символов будут символы пробела, табуляции \t, конца строки \n и возврата каретки \r (собирательно называются "whitespace characters" - пустые символы, показывающиеся при печати или отображении как пустые места). Далее в строке 6 результат выводится на экран (обратите внимание на подстановку в строку кортежа значений), а потом в строке 7 счетчик \n увеличивается на 1. После выхода из цикла (строчка 8) будет напечатано общее количество прочитанных строк в файле. Наконец, строчка 9 закрывает файл.

   1 name = "Dibrova_YP_0000001.fasta"
   2 foofile = open (name)
   3 n = 1
   4 for temp_str in foofile:
   5     temp_str = temp_str.strip("\n")
   6     print "String %i: %s" % (n, temp_str)
   7     n = n + 1
   8 print "Found %i strings in file!" % n
   9 foofile.close()

4.5. Получение списка целых чисел в нужном интервале и с нужным шагом

   1 list1 = range(2, 8, 3)  #list1 будет [2, 5]
   2 list2 = range(2, 8)     #list2 будет [2, 3, 4, 5, 6, 7]
   3 list3 = range(8)        #list3 будет [0, 1, 2, 3, 4, 5, 6, 7]

4.6. Вычисление длины чего-то, имеющего длину

   1 foo = ["Cat", True, 8.9, 15, "Lalala"]  #list
   2 boo = ("Mouse", "Dog", 13)              #tuple
   3 koo = "Learn programming or die trying" #str
   4 
   5 f = len(foo) #f = 5
   6 b = len(boo) #b = 3
   7 k = len(koo) #k = 31

4.7. Командная строка и получение аргументов из командной строки

Пусть, например, скрипт называется my_script.py, и содержит следующий код:

   1 import sys
   2 for i in range(1, len(sys.argv)):
   3     print "Argument %i is %s" % (i, sys.argv[i])

Этот скрипт в первой строке импортирует модуль sys, а потом во второй строке запускает цикл, где мы проходим по всем элементам списка аргументов, пропуская нулевой, и печатаем на экран. Введем следующее в командную строку: myscript.py lalala.fasta 10 356. Скрипт напечатает на экране:

Argument 1 is lalala.fasta
Argument 2 is 10
Argument 3 is 356

4.8. Выход из скрипта по команде

Модуль sys может использоваться не только для получения аргументов командной строки. С его помощью можно в нужном месте скрипта завершить его работу. Этой функцией лучше не злоупотреблять по тем же причинам, по которым следует быть аккуратными с командами "насильственного" прокручивания циклов continue и break (см. раздел 7). Опять-таки, польза этого состоит в том, чтобы избежать лишних уровней вложенности в скрипте.

Пусть, например, скрипт должен проверить, получил ли он ровно 2 аргумента от пользователя; если получил, то работать как обычно, а если не получил – то выдать на экран предупреждение и ничего не делать, завершить работу. Теоретически можно сделать гигантскую пару операторов условий if и else, в одном из которых будут все команды скрипта. Но это неудобно. В примере ниже показана альтернатива.

   1 import sys
   2 
   3 if len(sys.argv) != 3:
   4     print "Script should receive 2 arguments:"
   5     print "First: name of the file"
   6     print "Second: # of residues on a line"
   7     sys.exit()
   8 
   9 filename = sys.argv[1]
  10 number = sys.argv[2]

Еще одно возможное применение команды sys.exit() – при отладке своего скрипта. Предложим, Вы написали длинный и неработающий скрипт, который печатает кучу всего на экран. Но Вы хотите проверить его строчка за строчкой, и чтобы после нужной строчки остальные команды не выполнялись. Теоретически, опять-таки, можно каждый раз помещать их в комментарии, но удобнее воспользоваться этой командой.

4.9. Открытие файла для записи и запись в файл

   1 newfile = open("AnyFileName.txt", "w")
   2 newfile.write ("This is my file! My name is %s, my age is %s\n" % ("Dasha", 26))
   3 str1 = "This string will be next"
   4 str2 = "And this text will merge with the previous =("
   5 newfile.write (str1)
   6 newfile.write (str1)
   7 newfile.close()

В этом случае вот такой текст будет напечатан в файл с именем AnyFileName.txt, которых будет создан в той же директории, где лежит скрипт:

This is my file! My name is Dasha, my age is 26
This string will be nextThis string will be next

5. Операторы условий (if, elif, else)

Некоторые фрагменты кода нужно выполнить только если выполнено определенное условие. Для этого используется оператор if и дополняющие его операторы elif и else. Обратите внимание, что по-английски if будет называться не operator, а statement: такие особенности перевода =)

Давайте разберем первый пример. Данный скрипт просит пользователя ввести сперва его имя, а потом его возраст (строчки 1 и 2). Заметьте, что во второй строчке результат действия функции raw_input() приводится к типу int, чтобы сохранить его как число, а не как строчку. Строчка 3 начинается с названия оператора if, а заканчивается двоеточием. Все что между ними - это то условие, которое проверяется. Условие при исполнении кода всегда – какое-то конкретное булево значение (то есть True или False), но обычно оно задается неявно, через операцию сравнения (как в нашем примере) или через результат нескольких логических операций над булевыми значениями.

Строки 4-5 – это те команды, которые будут выполнены только если булево значение в строке 3 будет равно True. Заметьте, что они начинаются со стандартного отступа. Строка 6 уже отступа не содержит, и поэтому уже не принадлежит условию: она будет выполняться в любом случае.

Пример 1. Условие и оператор if

   1 name = raw_input("Enter your name, please: "))
   2 age = int(raw_input("How old are you? "))
   3 if age < 16:
   4     print "Oh, %s! You are a child, darling!" % name
   5     print "You don't need python, go play!"
   6 print "%s is %s years old" % (name,age) 

Часто бывает так, что требуется развилка в алгоритме: если выполнено некоторое условие, то нужно сделать что-то одно, а если не выполнено, то сделать что-то другое. Бывает что вариантов даже несколько. Для реализации такой развилки можно использовать дополнения оператора if (а можно и не использовать: просто писать несколько операторов if подряд или вложенными друг в друга). Разберем пример 2 с использованием дополняющих операторов.

В строках 1-3 задаются три булевые переменные. Строчка 4 начинает оператор if; заметьте, что в качестве условия в нем стоит логическая комбинация двух булевых величин. Строка 5, соответственно, будет выполнена только если условие будет иметь значение True. В строке 6 задается следующий вариант, который будет проверен программой, если условие имеет значение False. Используется оператор elif, сокращение от else if. В нашем примере этого не случится, потому что оно True, но погода может и поменяться :) Таких вариантов может быть несколько. Соответственно, строка 7 - то действие, которое надо выполнить в этом случае. Строка 8 задает последний оператор else, который, заметьте, не содержит никакого условия: команды внутри тела этого оператора будут выполнены если ни одно из условий, описанных в операторах выше, не выполнилось. Как оператор elif, так и else могут отсутствовать.

Пример 2. Дополнения оператора if: elif и else

   1 rain = True
   2 happy = False
   3 sun = True
   4 if rain and sun:
   5     print "Gribnoi dogd'! ^_^"
   6 elif rain and happy:
   7     print "Sweet rain :)"
   8 else:
   9     print "Gloomy rain :("

Иногда, если альтернатив всего две, можно написать их без использования else, если Вам так станет понятнее код. См. пример 3 (обратите внимание на комбинацию логических операций в условии второго if (5 строка).

Пример 3. Код без использования else

   1 rain = True
   2 sun = True
   3 if rain and sun:
   4     print "Gribnoi dogd'! ^_^"
   5 if not (rain and sun):
   6     print "Gloomy rain :("

6. Списки, кортежи и строки

   1 stud_list = ["Anna", "Victor", "Sergei"]   # Список (list)
   2 a = stud_list[1]                           # a = "Victor"
   3 l = len(stud_list)                         # l = 3
   4 stud_list[1] = "Dasha"                     # Список теперь ["Anna", "Dasha", "Sergei"]
   5 
   6 stud_tuple = ("Anna", "Victor", "Sergei")  # Кортеж (tuple)
   7 a = stud_tuple[1]                          # a = "Victor"
   8 l = len(stud_tuple)                        # l = 3
   9 
  10 foostring = "Students will learn or die"   # Строка (str)
  11 a = foostring[7]                           # a = "s"
  12 l = len(foostring)                         # l = 26

7. Циклы

Пример 1. Реализация цикла for для списка

   1 for temp_var in ["Sasha", "Cat", True, 15]:
   2     print temp_var
   3     print "Taking next..."
   4 print "Now the cycle is over!"

Пример 2. Реализация цикла for для выполнения определенного количества операций

   1 for n in range(117):
   2     print "I love programming, I will do all my tasks in time"

Пример 3. Реализация цикла while

   1 n = 0
   2 while (n < 117): 
   3     print "I love programming, I will do all my tasks in time"
   4     n = n + 1   

Пример 4. Использование командыcontinue

   1 for n in range(10):
   2     if (n == 7):
   3         continue
   4     print n

Пример 5. То же самое, что в примере 4, но без команды continie

   1 for n in range(10):
   2     if (n != 7):
   3         print n

Пример 6. Использование команды break

   1 for n in range(10):
   2     if (n == 7):
   3         break
   4     print n

8. Классы

8.1. Что такое класс

8.2. Примеры классов: кошка, белок

8.3. Как задать простой класс

Пример 1. Класс без методов

   1 class Cat:
   2     name = "Noname"
   3     age = 0
   4     tale_len = 0

Пример 2. Класс с методом

   1 class Cat:
   2     name = "Noname"
   3     age = 0
   4     tale_len = 0
   5     def miau(self):
   6         print "Miaaaoooo!"
   7         print "My name is %s" % self.name

8.4. Как создать объект класса. Инициализирующая функция

   1 y = Cat()

Пример 3. Класс с методом и инициализирующей функцией

   1 class Cat:
   2     name = "Noname"
   3     age = 0
   4     tale_len = 0
   5     def miau(self):
   6         print "Miaaaoooo!"
   7         print "My name is %s" % self.name
   8     def __init__(self, n, a, t):
   9         self.name = n
  10         self.age = a
  11         self.tale_len = t
  12 
  13 y = Cat("Murka", 7, 11)

8.5. Как обращаться к атрибутам и методам класса

   1 y.name = "Kitty"
   2 y.miau()

...скоро раздел будет дополнен

9. Стандартные классы Python и некоторые полезные методы этих классов

В Python даже самые обычные числа являются на самом деле объектами классов, и объектами классов являются также списки, строки и т.п. Это значит, что можно вызывать функции, которые являются методами данного класса, через конкретную переменную. Список функций для каждого встроенного класса с описаниями можно получить в консоли Python, набрав help(имя класса), например help(str).

Обращение к методам класса происходит через знак точки после имени переменной, относящейся к данному классу. Например, класс int содержит встроенный метод добавления числа к переменной, конкретному экземпляру класса. Поскольку этот метод практически никогда не используется пользователем (вместо него все пользуются интуитивно понятной арифметической операцией сложения), у него "страшное" имя: оно начинается и заканчивается двумя символами подчеркивания. Давайте рассмотрим пример ниже: в строчке 2 переменная a создается заново со значением 10 понятным образом. Строка 3 делает абсолютно то же самое, но при этом объект a вызывает метод класса int с названием __add__(), на вход которому требуется подать число, которое нужно прибавить.

   1 a = 5
   2 a = a + 5
   3 a = a.__add__(5)

9.1 int (англ. integer) - целое число

9.2 float(англ. floating point value, число с плавающей точкой) - десятичная дробь

9.3 bool (англ. boolean) - булево значение (True или False)

9.4 str (англ. string) - строка

   1 string = "aaaaaabbbbbMy actual string is hereabbbab"
   2 string.strip("ab")                 #string не изменилось
   3 string = string.strip("ab")        #string сейчас изменилось и стало "My actual string is here"

   1 string = "My   name is Daria"
   2 list1 = string.split()           #list1 - это ["My", "name", "is", "Daria")
   3 list2 = string.split("is")       #list2 - это ["My   name ", " Daria")
   4 list3 = string.split(" ", 1)     #list3 - это ["My", "name is Daria")

   1 string = "The sky is blue; the sun is yellow"
   2 new_string1 = string.replace("is", "was") # newstring1 - это "The sky was blue; the sun was yellow"
   3 new_string2 = string.replace(" ", "_", 2) # newstring2 - это "The_sky_is blue; the sun is yellow"
   4 new_string3 = string.replace(" ", "")     # newstring3 - это "Theskyisblue;thesunisyellow"

   1 string = "Kitty played with Tom. Their play was nice"
   2 a = string.count("play")        # a = 2
   3 b = string.count("play", 5, 10) # b = 1
   4 c = string.count (" ")          # c = 7

   1 string = "This is a SiMpLe sentence"
   2 large_letters = string.upper() # large_letters содержит "THIS IS A SIMPLE SENTENCE"
   3 small_letters = string.lower() # small_letters содержит "this is a simple sentence"

   1 str1 = "Dasha"
   2 str2 = str1.translate(None, "ah") # str2 будет "Ds"

   1 a = "abcdefghij"
   2 b = a[2:6]    # b = "cdef"
   3 c = a[2:6:2]  # c = "ce"
   4 d = a[::2]    # d = "acegi"
   5 e = a[::-1]   # e = "jihgfedcba"

9.5 list - список

Давайте рассмотрим пример использования этого инструментария. Список foo будет содержать студентов, которые приходят и уходят. В первой строчке задается список, во второй в него добавляется в конец один элемент. В третьей строчке создается новый список, который дописывается в четвертой к нашему списку. Еще один способ вставки информации в список показан в строке 5: указывается номер, после которого нужно вставить новый элемент. Строчка 6 показывает, как удалить самый концевой элемент, строчка 7 – как удалить элемент с номером 2. В строчке 8 для удаления используется поиск: первый элемент списка с поданным значением будет удален. Наконец, строчка 9 обращает список.

   1 foo = ["Vasya", "Lena", "Sasha", "Petr", "Genya"] # ["Vasya", "Lena", "Sasha", "Petr", "Genya"]
   2 foo.append ("Dima")                               # ['Vasya', 'Lena', 'Sasha', 'Petr', 'Genya', 'Dima']
   3 new_list = ["Alex", "Maria"]                      
   4 foo.extend (new_list)                             # ['Vasya', 'Lena', 'Sasha', 'Petr', 'Genya', 'Dima', 'Alex', 'Maria']
   5 foo.insert (3, "Dasha")                           # ['Vasya', 'Lena', 'Sasha', 'Dasha', 'Petr', 'Genya', 'Dima', 'Alex', 'Maria']
   6 foo.pop()                                         # ['Vasya', 'Lena', 'Sasha', 'Dasha', 'Petr', 'Genya', 'Dima', 'Alex']
   7 foo.pop(2)                                        # ['Vasya', 'Lena', 'Dasha', 'Petr', 'Genya', 'Dima', 'Alex']
   8 foo.remove("Alex")                                # ['Vasya', 'Lena', 'Dasha', 'Petr', 'Genya', 'Dima']
   9 foo.reverse()                                     # ['Dima', 'Genya', 'Petr', 'Dasha', 'Lena', 'Vasya']

9.6 tuple - кортеж

to be written...

9.7 dict - словарь

Пример 1. Создание нового словаря

   1 foo = dict()
   2 boo = {}
   3 age = {"Alex" : 21, "Victor" : 15}

Пример 2. Обращение к элементам словаря

   1 age = {"Alex" : 21, "Victor" : 15}
   2 a = age["Alex"] # a = 21
   3 age["Anna"] = 45
   4 b = age["Dasha"] # Ошибка!

Пример 3. Использование словаря для подсчета числа нуклеотидов каждого типа в гене

   1 gene = "AAAAATCTACTCATTGGTCCA"
   2 nucleotide_count = dict()
   3 for x in gene:
   4     if x in nucleotide_count:
   5         nucleotide_count[x] = nucleotide_count[x] + 1    
   6     else:
   7         nucleotide_count[x] = 1
   8 print nucleotide_count # Будет выведено {'A': 8, 'C': 5, 'T': 6, 'G': 2}

Рассмотрим в примере 4 использование этих методов. Пусть мы храним оценки студентов в виде словаря marks (строка 1). Поскольку marks.keys() возвращает список ключей, по нему можно пройти с помощью обычного цикла for (строки 2 и 3) Кстати, обратите внимание, что порядок выдаваемых этим методом ключей не будет соответствовать порядку, в котором элементы помещались в словарь. В строке 5 мы решаем избавиться от элемента, с ключом "Dasha". Это можно сделать с помощью метода pop() (строки 5-8). Можно и сразу очистить словарь (строка 10).

Пример 4. Применение некоторых методов класса dict

   1 marks = {"Anna" : 5, "Sasha" : 5, "Dima": 3, "Dasha": 2, "Stas": 4}
   2 for foo_key in marks.keys():
   3     print "Student: %s, mark: %i" % (foo_key, marks[foo_key])
   4 
   5 bad_stud = "Dasha"
   6 m = marks.pop(bad_stud)
   7 print "%s was expelled, mark is %i" % (bad_stud, m) # Dasha was expelled, mark is 2
   8 print marks                                         # {'Dima': 3, 'Stas': 4, 'Anna': 5, 'Sasha': 5}
   9 
  10 marks.clear()
  11 print marks                                         # {}

10. Советы по использованию комментариев

10.1. Общие советы

10.2. Оформление "шапки" скрипта

   1 """
   2 Term 1, block 2, practicum X
   3 Fasta Reader 1.0
   4 This script reads fasta-format file with a single sequence and
   5 prints it to STDOUT with different cut-off of the sequence string
   6 Author: Dibrova DV
   7 Last modified: 05.10.2013
   8 """

10.3. Правильное комментирование функций в Python

   1 def int_round(value):
   2     """
   3     value - float value (integer is allowed but senceless)
   4     return - integer closest to the given value
   5     """
   6     result = ...
   7     return result