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

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

из модуля turtle:
  • teleport ‒ телепорт
  • write ‒ написать
  • forward ‒ вперед
  • right ‒ направо
  • left ‒ налево
  • circle ‒ круг, окружность
  • steps ‒ шаги (step ‒ шаг)
  • dot ‒ точка
  • colormode ‒ режим (mode) цвета (color), цветовой режим
  • numinput ‒ ввод (input) числа (num, number)
  • onkey ‒ на (on) клавишу (key)
  • listen ‒ слушать, прослушивать
  • reset ‒ перезагрузить
из модуля random:
  • random ‒ случайный
  • randint ‒ случайное (random) целое (integer)
из языка Python:
  • import ‒ импорт
  • from ‒ из (от)
  • def ‒ сокращение от define (определить)
  • if ‒ если
  • else ‒ иначе

Когда пишется исходный код, значение переменных не всегда известно. Оно может определяться уже потом, в процессе выполнения программы. Например, значение будет вводить пользователь.

Другим случаем такого отложенного определения значения переменной является использование генератора случайных чисел. Когда программист пишет код, он указывает вызов этого генератора, но какое число он вернет ‒ неизвестно. Когда программа запускается, и код исполняется, происходит реальный вызов генератора, и он возвращает определенное число. В этот момент мы можем узнать, что это за число.

В языке программирования Python для генерации всякого рода случайности используется модуль random. В нем много разных функций. Мы будем использовать только одну ‒ randint. Чтобы импортировать ее из модуля, в программе должно быть такое выражение:

from random import randint

Оно похоже на то, как мы во всех наших программах импортируем функции модуля turtle:

from turtle import *

Разница лишь в том, что звездочка обозначает импорт всех объектов модуля, а когда указывается название одного или нескольких, то импортируются только они. Далее в примерах этого урока строка импорта из random не будет упоминаться, как и импорт модуля turtle. Однако чтобы программы работали, эти строки кода быть должны.

Рассмотрим некоторые примеры использования случайных чисел в черепашьей графике. Получим случайные координаты и нарисуем в этом месте точку:

x = randint(-300, 300)
y = randint(-200, 200)
teleport(x, y)
dot(30, 'green')

Функция randint в качестве аргументов принимает два целых числа. Первое число ‒ это нижняя граница допустимого диапазона случайных чисел, то есть минимальное из возможных. Второе число ‒ верхняя граница. Так в примере выше переменная x примет любое значение, но в пределах от -300 до 300.

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

colormode(255)

def dots():
    x = randint(-300, 300)
    y = randint(-200, 200)
    size = randint(10, 40)
    r = randint(0, 255)
    g = randint(0, 255)
    b = randint(0, 255)
    teleport(x, y)
    dot(size, (r, g, b))

onkey(dots, 'space')
listen()

Несмотря на то, что переменным r, g, b присваивается одинаковое выражение, в момент исполнения программы каждая из них получит свое значение из диапазона от 0 до 255. Так r может оказаться равна 180, g получит 205, b будет присвоено еще какое-нибудь значение. При следующем запуске функции (когда пользователь снова нажмет пробел) переменным будут присвоены новые значения. В результате все точки окажутся разными.

Иногда, в зависимости от того, какое именно случайное число было получено, должны выполняться разные сценарии программы. В этом случае используется условный оператор, в заголовке которого проверяется значение переменной, в которую было записано случайное число.

def figure():
    reset()
    dot()
    sides = randint(0, 18)
    write(sides)
    teleport(0, -100)
    if sides >= 2:
        circle(100, steps=sides)
    else:
        circle(100)

onkey(figure, 'f')
listen()

В этой программе при каждом нажатии клавиши f фигура будет перерисовываться, потому что в функции есть команда reset, которая очищает холст. В зависимости от значения переменной sides, которое определяется случайным образом, будет нарисован либо многоугольник с количеством сторон, равным sides, либо круг.

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

  1. Заставьте черепаху выводить на холсте квадрат со случайной длиной стороны в диапазоне от 50 до 200 точек.
  2. При нажатии на клавишу пробела черепаха должна чертить в случайном месте холста отрезок длиной 30 точек. При этом вертикальным или горизонтальным он будет, также должно определяться случайно.
  3. Напишите программу, которая выводит на холсте три случайных числа в границах одного диапазона, который запрашивается у пользователя через вызовы функции numinput.

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




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