В материале Большая программа мы сделали программу читаемой. Но можно сделать ее еще лучше.
Программисты обычно разбивают программы на блоки и дают им имена. Такие конструкции называются функции. Оформим, например, рисование домика в виде фунции:
# рисуем дом
def draw_house():
filled_circle("red", (100, 600), 100)
filled_rect("white", 0, 600, 200, 200)
filled_rect("brown", 20, 700, 40, 100)
filled_circle("yellow", (30, 750), 5)
filled_rect("yellow", 90, 650, 50, 100)
Такой код дает нам возможность нарисовать домик одной командой draw_house(), там где мы захотим.
Мы можем вызвать в одной функции другие. Например, если у нас есть функция draw_cloud(), то мы можем вызывать ее в draw_sky(), то есть при рисовании неба, одной командой нарисовать облако. Вот так:
def draw_sky():
draw_sun()
draw_cloud()
Полностью программа, разбитая на функции, может выглядеть так:
# подключаем библиотеку
from drawzero import *
# рисуем фон
def draw_background():
filled_rect("blue", 0, 0, 1000, 1000)
filled_rect("green", 0, 800, 1000, 200)
# рисуем солнце
def draw_sun():
filled_circle("yellow", (700, 500), 70, 0)
# рисуем облако
def draw_cloud():
filled_circle("white", (300, 500), 30, 0)
filled_circle("white", (320, 480), 30, 0)
filled_circle("white", (340, 500), 30, 0)
filled_circle("white", (360, 500), 30, 0)
# рисуем небо
def draw_sky():
draw_sun()
draw_cloud()
# рисуем дом
def draw_house():
filled_circle("red", (100, 600), 100)
filled_rect("white", 0, 600, 200, 200)
filled_rect("brown", 20, 700, 40, 100)
filled_circle("yellow", (30, 750), 5)
filled_rect("yellow", 90, 650, 50, 100)
draw_background()
draw_sky()
draw_house()
# задерживаем выход из программы
sleep(3600)
При запуске получается то же самое, Возникает вопрос: а зачем тогда все это? Программой теперь удобно управлять: хотим "выключить" небо, просто удаляем или комментируем одну строку вызова функции draw_sky().
Но, наверное, главное достоинство функций - возможная гибкость программы. Используя функции с параметрами мы сможем нарисовать много похожих объектов, например, несколько облаков в разных местах, разного размера.