В предыдущей задаче мы разбили программу на функции. Но настоящая польза от функций получается тогда, когда функции принимают параметры.
Вот так может выглядеть функция рисования облака.
def draw_cloud():
filled_circle("white", (300, 100), 30)
filled_circle("white", (320, 80), 30)
filled_circle("white", (340, 100), 30)
filled_circle("white", (160, 100), 30)
Создадим функцию, которая рисует облако где угодно.
Облако состоит из четырех кругов. Обозначим центр первой окружности за (x,y).
Тогда центры остальных окружностей будут
(x + 20, y - 20), (x + 40, y) и (x + 60, y)

(Облако здесь мы нарисовали линиями, а центры - желтыми окружностями)
Теперь можно переписать функцию рисования облака. Пусть она принимает x и y и рисует облако по этим координатам.
def draw_cloud(x, y):
filled_circle("white", (x, y), 30)
filled_circle("white", (x + 20, y - 20), 30)
filled_circle("white", (x + 40, y), 30)
filled_circle("white", (x + 60, y), 30)
Теперь мы можем одной строчкой нарисовать еще одно облако. Нарисуем в функции draw_sky() целых три:
def draw_sky():
filled_circle("yellow", (700, 100), 70, 0)
draw_cloud(300, 100)
draw_cloud(400, 150)
draw_cloud(600, 120)

Но и это еще не все. Можно например, передавать облаку цвет, и тогда рисовать серые дождевые облака, или розовые, закатные.
def draw_cloud(x, y, color):
filled_circle(color, (x, y), 30, 0)
filled_circle(color, (x + 20, y - 20), 30)
filled_circle(color, (x + 40, y), 30)
filled_circle(color, (x + 60, y), 30)
Кстати, если облака нам нужны чаще всего белые, то можно использовать значения по умолчанию.
Если мы напишем заголовок функции так:
def draw_cloud(x, y, color="white"):
#...
То сможем вызывать функцию и с параметром цвета и без него:
draw_cloud(100, 100) # так рисуем белое облако
draw_cloud(130, 130, "gray") # а вот так серую тучу