Олимпиадный тренинг

Задача . Сюжетная картинка c функциями


Задача

Темы:

В материале Большая программа мы сделали программу читаемой. Но можно сделать ее еще лучше. 

Программисты обычно разбивают программы на блоки и дают им имена. Такие конструкции называются функции. Оформим, например, рисование домика в виде фунции:

# рисуем дом
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().

Но, наверное, главное достоинство функций - возможная гибкость программы. Используя функции с параметрами мы сможем нарисовать много похожих объектов, например, несколько облаков в разных местах, разного размера.


time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя