Ниже разбор ошибок и пошаговый исправленный вариант кода.
Что не так в исходной программе
- Неполная строка импорта: "from" стоит отдельно без продолжения.
- Неправильный цикл: "for i in range (5)" без двоеточия и нужно 20 повторов.
- Отсутствие импорта random (randint не определён).
- Неправильное задание цвета: "col=randint()" без параметров и затем "color(c{col})" — синтаксис неверен.
- Неправильное использование цвета: чтобы залить окружность цветом, лучше использовать fillcolor(col) и begin_fill()/end_fill().
- Порядок перемещений: при вызове goto(x,y) необходимо поднимать/опускать перо правильно. Также центр окружности по умолчанию не совпадает с текущей позицией; нужно сместиться на радиус вниз, чтобы центр совпал с (x,y).
- Радиус окружности задан как 30, что верно, но чтобы центр был в точке (x,y), нужно переместиться на y-30 перед рисованием круга.
Как сделать правильно: логика
- Импортируем randint: from random import randint.
- Цикл: for i in range(20): ...
- Выбираем случайный цвет из списка c.
- Поднимаем перо, переходим в координаты (x, y-30), опускаем перо.
- Начинаем заполнение, рисуем circle(30), заканчиваем заполнение.
- Повторяем 20 раз, затем ждём клика для выхода.
Корректный код (работает так, чтобы центр каждой окружности был в точке (x, y) и окружности были заполнены случайными цветами):
from turtle import *
from random import randint
список цветов
c = ["red","blue","green","aqua","black","gray","pink","orange"]
speed(0) # максимальная скорость рисования (опционально)
for i in range(20):
x = randint(-100, 100)
y = randint(-100, 100)
# выбрать случайный цвет
col = c[randint(0, len(c) - 1)]
# перемещаемся так, чтобы центр окружности совпал с (x, y)
penup()
goto(x, y - 30) # смещение на радиус вниз
pendown()
# заполнение и цвет окружности
fillcolor(col)
begin_fill()
circle(30)
end_fill()
penup()
exitonclick()
Пояснения по ключевым моментам
- center окружности: в turtle центр окружности при circle(r) примерно находится на расстоянии r от текущей позиции слева от направления движения. Поэтому, чтобы центр совпал с (x, y), мы перемещаемся в точку (x, y - radius) перед рисованием.
- выбор цвета: col выбирается как элемент списка colors; затем используем fillcolor(col) и begin_fill()/end_fill() для заливки.
- цикл: 20 повторов соответствует требованию задачи.
- радиус: circle(30) создаёт окружность радиусом 30 пикселей.
Если нужно, можно заменить заливку на цвет контура, например, так:
- перед рисованием вызвать color(col) для обводки и fillcolor(col) для заливки, либо взять color(col, col) чтобы и обводка, и заливка были одного цвета.