Кортежи в черепашьей графике (модуль turtle языка Python)
Словарь урока
из модуля turtle: |
|
---|---|
из модуля random: |
|
из языка Python: |
|
На прошлом уроке в заголовке цикла while
мы использовали структуру, в которой в скобках через запятую перечислялись строки:
('круг', 'квадрат', 'треугольник', 'отрезок')
Это пример кортежа. Как числа и строки, он является типом данных, однако более сложным, составным.
Элементами кортежа не обязательно должны быть строки. Это могут быть числа и любые другие объекты.
Кортежи можно присваивать переменным. Так в примере прошлого урока мы могли бы создать кортеж не в заголовке цикла, а заранее:
figures = ('круг', 'квадрат', 'треугольник', 'отрезок') while figure not in figures:
Представим, что черепаха должна выводить на холсте разноцветные фигуры, но не случайными цветами, а только из перечня дозволенных. Поместим выбранные нами цвета в кортеж:
colors = ('OliveDrab3', 'DeepPink', 'gold', 'GreenYellow', 'orange', 'RoyalBlue', 'SeaGreen', 'violet')
А вот как извлекать из него элементы, зависит от наших задач. Если требуется нарисовать столько точек, сколько цветов в кортеже, можно просто перебрать его в цикле for
:
for i in colors: teleport(randint(-300, 300), randint(-200, 200)) dot(randint(20,40), i)
Здесь на каждой итерации цикла из colors
извлекается очередной цвет и присваивается переменной i
. В теле цикла цвет используется в качестве одного из аргументов, передаваемых в dot
. Также мы не используем переменные для координат и размера точки, а вместо этого сразу передаем случайные числа в функции.
Другой пример ‒ когда нужен определенный цвет из кортежа. К нему можно обратиться по его номеру, так как в кортежах элементы пронумерованы, начиная с нуля. Так в нашем случае цвет 'gold'
третий по счету. Но так как нумерация начинается с нуля, то его номер, или индекс, ‒ это 2.
Чтобы получить элемент по его номеру, сначала пишется имя переменной кортежа, после него в квадратных скобках указывается индекс элемента. В нашем случае получится так: colors[2]
. Это выражение вернет строку 'gold'
. Нарисуем этим цветом большую точку:
dot(100, colors[2])
Если надо получить случайный цвет из кортежа, то с помощью функции randint
можно получить случайный индекс и уже его подставлять в квадратные скобки. Так в нашем кортеже 8 элементов, последний из которых имеет индекс 7, значит в randint
надо передавать аргументы 0 и 7.
i = randint(0, 7) dot(100, colors[i])
В результате цвет точки на холсте будет определяться после запуска программы.
Теперь предположим, что количество элементов в кортеже не 8, а много. Нам сложно их посчитать. Или если в дальнейшем мы добавим туда еще элементы, придется просматривать весь код и менять число, связанное с количеством элементов. Обычно программисты так не делают. Вместо этого они используют специальную функцию языка программирования, которая измеряет длину структуры. В языке Python это функция len
. Если в качестве аргумента мы передадим ей наш кортеж, то узнаем, сколько в нем элементов:
write(len(colors))
На холсте черепаха выведет число 8. Поскольку индекс последнего элемента на 1 меньше, чем их количество, то, чтобы получить номер последнего элемента, надо использовать такое выражение: len(colors) - 1
. С функцией randint
это будет выглядеть так:
i = randint(0, len(colors)-1)
Напишем программу, в которой на холсте рисуется 30 точек цветами, перечисленными в кортеже. При этом выбор цвета из кортежа для каждой точки происходит случайно:
colors = ('OliveDrab3', 'DeepPink', 'gold', 'GreenYellow', 'orange', 'RoyalBlue', 'SeaGreen', 'violet') for point in range(30): teleport(randint(-400, 400), randint(-300, 300)) i = randint(0, len(colors)-1) dot(20, colors[i])
В заголовке цикла for
мы используем переменную point
. Ей на каждой итерации цикла присваивается число из диапазона от 0 до 29 включительно. Значение этой переменной нам нигде не требуется. Важно лишь, что цикл совершит 30 оборотов. Переменную с именем i
мы используем в теле цикла для присвоения ей случайного индекса.
Обратите внимание, что функция range
генерирует диапазон, в который не включается само число, которое передается как аргумент. В отличие от нее, randint
включает указанную верхнюю границу. Так команда range(10)
позволит получить последовательный ряд чисел от 0 до 9 включительно. А randint(0, 10)
выдаст любое число из ряда от 0 до 10 включительно.
Задания для самостоятельной работы
- Создайте кортеж с любыми элементами. С помощью функции
write
выведите их на холсте по порядку (в ряд или столбик). - В продолжение к первому заданию придумайте код, который выводит элементы кортежа в обратном порядке.
- Создайте кортеж из трех случайных чисел. Пусть черепаха нарисует на холсте точку, координаты центра которой ‒ первые два числа кортежа, а размер ‒ третье число.
- Разработайте программу, которая чертит на холсте 10 разноцветных звездочек (как в прошлом уроке). Цвет каждой берется из кортежа.