Занятие 6



Научимся работать со списками данных. Сначала мы создадим список возможных цветов:

colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'magenta', 'black', 'gray', 'lightgreen']

А ещё ускорим работу черепашки: speed(100) и используем команду goto(x, y) для перехода в точку с координатами (x, y).

Теперь, безо всякой случайности, выберем оранжевый и синий цвет (нумерация идет с нуля):
 
оранжевый — colors[1]
синий –
colors[5]


Убедимся, что это работает:

from turtle import *
from random import randrange as rnd
colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'magenta', 'black', 'gray', 'lightgreen']
color(colors[5],colors[1])
speed(100)
up()
for z in range(12):
    x = rnd(-200,200)
    y = rnd(-200,300)
    goto(x,y)
    down()
    begin_fill()
    circle(rnd(10,50))
    end_fill()
    up()
done()

Остался один шаг – выбирать случайный номер. Для этого нужно знать длину списка. Можно написать так: rnd(10), но так делать не стоит. Ведь мы можем захотеть удалить или добавить цвет. Придется переделывать код программы, что не очень удобно.

Лучше мы узнаем длину списка: len(colors), и это значение подставим в функцию rnd: rnd(len(colors)). Теперь по номеру возьмем цвет:


from turtle import *
from random import randrange as rnd
colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'magenta', 'black', 'gray', 'lightgreen']
color(colors[rnd(len(colors))],colors[rnd(len(colors))])
speed(100)
up()
for z in range(12):
    x = rnd(-200,200)
    y = rnd(-200,300)
    goto(x,y)
    down()
    begin_fill()
    circle(rnd(10,50))
    end_fill()
    up()
done()

Работает, но … цвет одинаковый! При каждом запуске – свой, но одинаковый у всех окружностей. Так не пойдет – нужно перенести выбор цвета внутрь цикла:

from turtle import *
from random import randrange as rnd
colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'magenta', 'black', 'gray', 'lightgreen']
speed(100)
up()
for z in range(20):
    color(colors[rnd(len(colors))],colors[rnd(len(colors))])
    x = rnd(-200,200)
    y = rnd(-200,300)
    goto(x,y)
    down()
    begin_fill()
    circle(rnd(10,50))
    end_fill()
    up()
done()