Кортежи в черепашьей графике (модуль turtle языка Python)

Словарь урока

из модуля turtle:
  • teleport ‒ телепорт
  • write ‒ написать
  • forward ‒ вперед
  • right ‒ направо
  • dot ‒ точка
из модуля random:
  • random ‒ случайный
  • randint ‒ случайное (random) целое (integer)
из языка Python:
  • import ‒ импорт
  • from ‒ из (от)
  • for ‒ для
  • range ‒ диапазон, ряд
  • while ‒ пока, до тех пор пока
  • not in ‒ не в

На прошлом уроке в заголовке цикла 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 включительно.

Задания для самостоятельной работы

  1. Создайте кортеж с любыми элементами. С помощью функции write выведите их на холсте по порядку (в ряд или столбик).
  2. В продолжение к первому заданию придумайте код, который выводит элементы кортежа в обратном порядке.
  3. Создайте кортеж из трех случайных чисел. Пусть черепаха нарисует на холсте точку, координаты центра которой ‒ первые два числа кортежа, а размер ‒ третье число.
  4. Разработайте программу, которая чертит на холсте 10 разноцветных звездочек (как в прошлом уроке). Цвет каждой берется из кортежа.

Turtle. Программирование на Python для школьников




Все разделы сайта