Глава 13 из 27

Бесплатно

3: Строим первые программы

⏱️ 45-60 минут
📊 intermediate

Глава 13: "Рисуем с помощью кода"

На следующей встрече Профессор Бит встретил Алису с загадочной улыбкой.

— Сегодня мы будем заниматься искусством, — объявил он, указывая на большой монитор в центре комнаты.

— Искусством? — удивилась Алиса. — Но разве мы не изучаем программирование?

— Программирование и искусство прекрасно совместимы, — ответил Профессор. — Сегодня мы будем рисовать с помощью кода!

Байт радостно подпрыгнул и вывел на своём экране красочный узор из геометрических фигур.

— Для создания графики с помощью кода мы будем использовать библиотеку turtle (черепашка), — объяснил Профессор. — Это простой, но очень мощный инструмент для рисования.

Он на мгновение замолчал, глядя на экран, и тихо прочитал:

В рисунке — отпечатки эволюций,
В строке — звучанье древней глубины.
Витиеватость творческих конструкций
Приносит в код дыханье новизны.

И так плетёт фракталы мирозданье,
Ведя беззвучный, вечный диалог.
Творя, пока не кончится дыханье,
Мы в вечности проводим рода ток.

Любой куплет однажды спетой песни
Спет голосами тех, кто был до нас.
Их делая полней и интересней,
Мы сохраняем их для новых рас.

— Вот об этом и пойдёт наша работа сегодня, — сказал он и набрал на клавиатуре первые строки кода:

python
import turtle

Создаём холст и кисть


холст = turtle.Screen()
холст.bgcolor("white") # Белый фон

кисть = turtle.Turtle()
кисть.shape("turtle") # Форма черепашки
кисть.color("blue") # Синий цвет
кисть.pensize(2) # Толщина линии

Рисуем квадрат


for _ in range(4):
кисть.forward(100) # Двигаться вперёд на 100 шагов
кисть.right(90) # Повернуть направо на 90 градусов

холст.exitonclick() # Закрыть окно при клике мышкой

На экране появилось окно с белым фоном, на котором маленькая синяя черепашка нарисовала чёткий квадрат.

— Вау! — воскликнула Алиса. — Черепашка действительно рисует!

— Библиотека работает по принципу "черепашьей графики", — объяснил Профессор. — Ты управляешь черепашкой, которая оставляет за собой цветной след, когда двигается. Это похоже на то, как если бы ты водила карандашом по листу бумаги.

— А что означает подчёркивание в строке for _ in range(4)? — спросила Алиса.

— Очень внимательно! — кивнул Профессор. — Подчёркивание _ используется в Python, когда нам не важна переменная цикла. Мы просто хотим повторить действие ровно 4 раза, и нам не нужно знать номер текущего шага.

— Давай нарисуем что-нибудь посложнее! — предложила Алиса.

— Конечно! Как насчёт разноцветной спирали? — Профессор написал новый код:

python
import turtle
import random

холст = turtle.Screen()
холст.bgcolor("black") # Чёрный фон

кисть = turtle.Turtle()
кисть.speed(0) # Максимальная скорость рисования

Список цветов для спирали


цвета = ["red", "orange", "yellow", "green", "blue", "purple"]

Рисуем спираль


for i in range(360):
кисть.color(random.choice(цвета)) # Выбираем случайный цвет
кисть.forward(i * 0.01 + 1) # Постепенно увеличиваем шаг
кисть.right(10) # Поворачиваем на 10 градусов

холст.exitonclick()

На чёрном фоне мгновенно появилась красочная спираль, переливающаяся всеми цветами радуги.

— Это невероятно красиво! — восхитилась Алиса. — А что означает кисть.speed(0)?

— Это устанавливает максимальную скорость движения черепашки, — пояснил Профессор. — Значения могут быть от 1 (самый медленный) до 10 (быстрый). А вот значение 0 означает, что анимация рисования отключена, и черепашка рисует узоры мгновенно.

— А можно нарисовать что-то, что больше похоже на настоящий рисунок? Цветок, например? — спросила Алиса.

— Легко, — кивнул Профессор. — Смотри:

python
import turtle

холст = turtle.Screen()
холст.bgcolor("skyblue")

кисть = turtle.Turtle()
кисть.speed(0)

Рисуем стебель


кисть.color("green")
кисть.pensize(5)
кисть.penup()
кисть.goto(0, -200)
кисть.pendown()
кисть.left(90)
кисть.forward(200)

Рисуем серединку цветка


кисть.color("brown")
кисть.penup()
кисть.goto(0, 0)
кисть.pendown()
кисть.begin_fill()
кисть.circle(20)
кисть.end_fill()

Рисуем лепестки


кисть.color("pink")
for i in range(12):
кисть.penup()
кисть.goto(0, 0)
кисть.pendown()
кисть.setheading(i * 30) # Поворот на каждые 30 градусов

# Рисуем один лепесток
кисть.begin_fill()
for j in range(60):
кисть.forward(2)
кисть.left(3)
кисть.end_fill()

Скрываем черепашку и завершаем


кисть.hideturtle()
холст.exitonclick()

На экране вырос красивый цветок с розовыми лепестками, коричневой серединкой и зелёным стеблем на фоне голубого неба.

— Это прекрасно! — воскликнула Алиса. — Но код стал гораздо сложнее.

— Да, здесь мы использовали несколько новых команд, — согласился Профессор. — Давай их разберём:

  • goto(x, y) перемещает черепашку в точные координаты экрана.

  • penup() и pendown() позволяют поднимать и опускать "перо", чтобы перемещаться, не оставляя следа.

  • beginfill() и endfill() заливают цветом область внутри нарисованного контура.

  • setheading() поворачивает черепашку в нужную сторону (по градусам).

  • hideturtle() прячет саму черепашку в конце работы, чтобы она не портила готовый рисунок.
  • Логик, внимательно наблюдавшая за процессом, добавила:
    — В компьютерной графике мы постоянно используем математику. Координаты, углы, расстояния — всё это строгие математические правила.

    — А можно создавать анимации? — загорелись глаза у Алисы.

    — Конечно! — ответил Профессор. — Давай сделаем простую анимацию восхода и заката солнца:

    python
    import turtle
    import time

    холст = turtle.Screen()
    холст.bgcolor("lightblue")
    холст.setup(600, 400) # Размер окна

    Создаём солнце


    солнце = turtle.Turtle()
    солнце.shape("circle")
    солнце.color("yellow")
    солнце.penup()
    солнце.goto(-300, 0) # Начальная позиция слева

    Создаём землю


    земля = turtle.Turtle()
    земля.penup()
    земля.goto(-300, -100)
    земля.pendown()
    земля.color("green")
    земля.pensize(3)
    земля.forward(600) # Рисуем линию земли
    земля.hideturtle()

    Анимация восхода и заката по параболе


    for x in range(-300, 301, 5):
    y = 100 (1 - (x / 300) * 2) # Математическая формула дуги (параболы)
    солнце.goto(x, y)
    time.sleep(0.05) # Небольшая пауза для плавности кадров

    холст.exitonclick()

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

    — Это уже настоящий мультик! — восхитилась Алиса. — Мы использовали цикл, чтобы солнце двигалось шаг за шагом!

    — Ещё одно потрясающее применение программирования в графике — это фракталы, — сказал Профессор. — Фракталы — это узоры, которые бесконечно повторяют свою форму, только в меньшем размере.

    — Звучит сложно, — нахмурилась Алиса.

    — На самом деле, их довольно просто создавать с помощью "рекурсивных" функций, — улыбнулся Профессор. — Это функции, которые вызывают сами себя. Смотри:

    python
    import turtle

    холст = turtle.Screen()
    холст.bgcolor("black")

    кисть = turtle.Turtle()
    кисть.color("green")
    кисть.speed(0)

    Рекурсивная функция для рисования ветки


    def нарисовать_ветку(черепашка, длина, уровень):
    if уровень == 0:
    return

    черепашка.forward(длина)

    черепашка.right(30)
    нарисовать_ветку(черепашка, длина * 0.7, уровень - 1)

    черепашка.left(60)
    нарисовать_ветку(черепашка, длина * 0.7, уровень - 1)

    черепашка.right(30)
    черепашка.backward(длина)

    Настраиваем начальную позицию


    кисть.penup()
    кисть.goto(0, -200)
    кисть.left(90)
    кисть.pendown()

    Рисуем фрактальное дерево


    нарисовать_ветку(кисть, 100, 6)

    кисть.hideturtle()
    холст.exitonclick()

    На экране выросло изящное, детализированное неоновое дерево с множеством ветвей.

    Черепашка рисует фрактальное дерево

    — Это удивительно! — воскликнула Алиса. — Как это работает?

    — Функция нарисовать_ветку() внутри себя снова просит нарисовать ветку, только чуть короче. Так она создаёт меньшие отростки на конце каждой большой ветви, — объяснил Профессор. — Переменная уровень контролирует, сколько раз произойдёт это ветвление. Когда уровень доходит до нуля, магия останавливается, иначе дерево росло бы бесконечно!

    — В природе тоже очень много фракталов, — заметила Логик. — Кроны деревьев, снежинки, листья папоротника, наши кровеносные сосуды — все они имеют фрактальную структуру.

    — Компьютерная графика — это огромный и прекрасный мир, — подытожил Профессор. — От простых квадратов до сложных 3D-моделей в современных видеоиграх. И всё это создаётся с помощью кода!

    — Теперь я понимаю, что программирование — это не только вычисления и обработка данных. Это ещё и творчество, — задумчиво сказала Алиса. — Это как волшебство: пишешь несколько строчек текста, и на экране расцветает рисунок!


    Задание

    Придумай и опиши, какой рисунок ты хотел бы создать с помощью кода. Это может быть что угодно: животное, растение, геометрический узор или абстрактная композиция. Как бы ты использовал основные команды (движение, повороты, цвета) для создания своего рисунка? Сделай набросок на бумаге и подумай, какие циклы или функции могли бы помочь нарисовать повторяющиеся элементы.