Учебная страница курса биоинформатики,
год поступления 2011
Циклы, условия, списки
На прошлом занятии рисовали 3 кружка
совершенно одинаковые действия повторяются три раза. А если надо 10 или 100 кружков нарисовать? Для того, чтобы сделать одинаковые действия несколько раз, используют циклы.
Если действия повторяются при выполнении какого-то условия, то можно использовать цикл while. Например, будем рисовать линию из кругов с возрастающим диаметром, пока не упремся в край холста
пример
1 root=Tkinter.Tk()
2 canvas_size = 500
3 canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
4 canv.pack()
5 r = 1
6 x = r
7 y = canvas_size/2
8
9 color = "blue"
10 while (x < canvas_size - r):
11 canv.create_oval(x - r, y - r, x + r, y + r, fill = color)
12 x += r
13 r +=1
14 x += r
15
16 root.mainloop()
17
18 Иногда бывает нужно при некотором условии выполнить одно действие, а в противном случае другое действие. Например, мы хотим покрасить наши круги в синий и красный цвета через один. В этом случае будем использовать условный оператор if.
19
20 i = 0
21 while (x < canvas_size - r):
22 if i % 2 == 0:
23 color = "blue"
24 else:
25 color = "red"
26 i += 1
27 canv.create_oval(x - r, y - r, x + r, y + r, fill = color)
28 x += r
29 r +=1
30 x += r
31
32 root.mainloop()
Давайте напишем программу, которая рисует забавные фигуры из отрезков. Мы рисуем цепочку отрезков одинаковой длины, каждый следующий отрезок поворачивает на один и тот же угол alpha (от 50 до 90 градусов). Угол выбирается случайно в начале программы.
1 import Tkinter
2 import random
3 import math
4
5 root=Tkinter.Tk()
6 canvas_size = 500
7 colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]
8 canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
9 canv.pack()
10
11 alpha = 0
12 x_start = canvas_size/2
13 y_start = 100
14
15 x1 = x_start
16 y1 = y_start
17
18 betha = random.randint(50, 90)
19
20 for i in range (200):
21 size = 100
22 alpha = (alpha + betha) % 360
23 x2 = x1 + size * math.cos(math.radians(alpha))
24 y2 = y1 + size * math.sin(math.radians(alpha))
25 color = random.choice(colors)
26 canv.create_line(x1,y1,x2,y2, fill=color, width=2)
27 x1 = x2
28 y1 = y2
29
30 if (int (x2-x_start) == 0)&(int (y2-y_start) == 0):
31 break
32
33 root.mainloop()
Списки
Списки в языке программирования Python являются упорядоченными последовательностями. списки состоят из различных объектов (значений, данных), и заключаются в квадратные скобки [ ]. Объекты отделяются друг от друга с помощью запятой.
Списки могут состоять из различных объектов: чисел, строк и даже других списков. В последнем случае, списки называют вложенными.
Над списками можно выполнять операции соединения и повторения:
Можно получать доступ к объектам списка по их индексам, измерять длину списка:
Для изменения списка существует ряд методов (почти все элементы в Python являются объектами классов, о чем мы поговорим в одном из следующих уроков; к терминологии же начнем привыкать уже сейчас). Например, append() позволяет добавлять новые элементы в конец списка:
Рассмотрим еще несколько часто используемых методов:
Разберемся, что делает этот код. Метод insert() вставляет элемент, значение которого задано во втором аргументе, начиная с позиции, заданной первым (в примере вставляем число 5 в начало списка). С помощью remove() вы можете удалить элемент по значению (если в списке несколько элементов с одним значением, удаляется первый из них). Метод extend() расширяет список заданной последовательностью (заметьте, как это отличается от append()), ну и pop() «выталкивает» из списка последний элемент. Удалить элемент по индексу можно оператором del, который справляется с любыми переменными: del a[1].
Помимо этого, вы можете использовать методы sort() и reverse().
Напишем программу, которая создает несколько случайных точек и соединяет каждые две из них отрезком. Таким образом, мы рисуем полносвязный граф — клику.
1 import Tkinter
2 import random
3 import math
4 root=Tkinter.Tk()
5 canvas_size = 500
6 colors = ["red","orange","yellow","green","blue","cyan","magenta","light blue"]
7 canv = Tkinter.Canvas(root, width=canvas_size, height=canvas_size, bg="white")
8 canv.pack()
9 npoints = 5
10 x = []
11 y = []
12 for i in range(npoints):
13 x.append(random.randint(0, canvas_size))
14 y.append(random.randint(0, canvas_size))
15 for i in range(npoints):
16 for j in range(i + 1, npoints):
17 color = random.choice(colors)
18 canv.create_line(x[i], y[i], x[j], y[j], fill = color, width = 2)
19 root.mainloop()