Нажми — и увидишь, что делает команда
- ⏱ Сколько займёт
- 40–60 минут, 6 шагов. Каждый шаг заканчивается результатом на экране.
- 💻 Что нужно
- Телефон или компьютер. Редактор открывается прямо в браузере, ставить ничего не надо.
- ⏸ Если прервёшься
- Ничего не потеряется: прогресс сохраняется на этом устройстве. Вернёшься — продолжишь с того же шага.
- 🎓 Чему научишься
- функции def · аргументы · повторное использование кода
Дай имя куску кода
На полке стоят одинаковые склянки, и на каждой один и тот же рецепт, переписанный от руки.
«Двадцать раз переписывать одно и то же — это не работа, это наказание», — Сова сметает склянки в ящик.
Запиши заклинание один раз, дай ему имя — и зови по имени. Столько раз, сколько нужно.
Это анимация исполнения кода: команды идут строка за строкой, и паруса появляются в том же порядке. Тот же код ты напишешь сам — только не забудь penup() и pendown() внутри функции, иначе черепашка соединит паруса линиями.
Читать текстом
После этого острова твои программы станут аккуратными.
1 # ТРИ ЗВЕЗДЫ БЕЗ ФУНКЦИИ: одно и то же трижды
2 goto(-100, 50)
3 for i in range(5):
4 forward(40); right(144)
5
6 goto(0, 50)
7 for i in range(5):
8 forward(40); right(144)
9
10 goto(100, 50)
11 for i in range(5):
12 forward(40); right(144)
Двенадцать строк ради трёх звёзд, и восемь из них — копии. Точка с запятой в строках 4, 8 и 12 — это «две команды в одной строке»: так короче, но обычно каждую команду пишут на своей. А если захочешь поменять звёзды с пятиконечных на шестиконечные? Придётся править в трёх местах и нигде не забыть.
1 def star(x, y, size): # ИМЯ и что ей нужно знать
2 penup()
3 goto(x, y)
4 pendown()
5 for i in range(5):
6 forward(size)
7 right(144)
8
9 # а теперь три звезды в три строки:
10 star(-100, 50, 40)
11 star(0, 50, 70) # эта побольше
12 star(100, 50, 25) # а эта поменьше
Строка 1 говорит: «вот заклинание по имени star, ему нужны три числа». Всё, что с отступом ниже, — тело заклинания. А строки 10–12 вызывают его трижды с разными числами. Захочешь поменять форму — правишь только тело.
Одна функция — семь вызовов
Собери картинку из вызовов. Смотри на код слева: сверху одна функция, ниже — короткие строчки-вызовы. Вся работа описана единожды, а пользуемся сколько нужно.
Одна функция — три звезды. Сверху описание star в девять строк, а внизу три коротких вызова с разными числами. Смотри на результат: звёзды разного размера и цвета, но код рисования написан один раз.
Приятная новость: ты пользовался функциями с первого дня. forward(100) — это вызов чужой функции, которую кто-то написал до тебя. Теперь ты умеешь писать свои.

- 1Строки 8–10 — то, что станет телом функцииВот этот кусок и есть работа: цикл, который что-то рисует. Заверни его в def — и у куска появится имя. Всё, что внутри функции, живёт на отступе; кончился отступ — кончилась функция.
- 2Палитра «Циклы и если» — кнопка def ():Она вставит def (): сразу с двоеточием. Имя придумываешь сам, латиницей: zvezda, domik, parus. А в скобки идут параметры — то, что заклинание узнаёт снаружи: def zvezda(size, cvet):
- 3Кнопка →| отступТело функции живёт на отступе, а вызовы пишут БЕЗ него, у самого левого края. Спутаешь — вызов окажется внутри функции и не сработает никогда. Кнопка «↵ строка» рядом переводит на новую строку.
- 4Жёлтая кнопка ▶ ЗапуститьФункция написана, а холст пустой — почти всегда одно и то же: ты её описал, но ни разу не позвал. Описание само по себе ничего не рисует. Допиши внизу без отступа zvezda(40), zvezda(70), zvezda(25) — и запускай.
- 5Холст — три вызова, три фигурыОдна и та же функция, позванная трижды с разными числами, даст три разные фигуры в разных местах. А код рисования написан ровно один раз: захочешь поменять форму — правишь только тело, и меняются сразу все три.
Это наш редактор «Python в кармане» со страницы /kod/ — открой её в соседней вкладке. На кадре он показан дважды: слева вкладка «Код», где ты пишешь, справа вкладка «Результат», куда программа переключится сама после запуска. Нажимай на кружки по порядку: метка покажет место, строка ниже объяснит, зачем оно.
Одни делают, другие считают
1 # функция может ВЕРНУТЬ ответ
2 def area(side):
3 return side * side
4
5 s = area(5) # в s попадёт 25
6 print(s)
7
8 # star ничего не возвращает: она РИСУЕТ.
9 # бывают функции-делатели и функции-считатели.
Есть функции-делатели: нарисовать звезду, спрятать черепашку — они действуют и ничего не возвращают. И есть функции-считатели: получили числа, посчитали и вернули ответ словом return. Ты уже пользовался такой — len(список) возвращает длину.
Хорошее имя функции — маленькая документация. Читаешь draw_star(0, 50, 40) и всё понимаешь, даже не заглядывая внутрь. Ради этого имена и придумывают внимательно.
Проверка · Что делает слово return?
Зачем функции параметры в скобках?
Оба верных ответа — +10 дублонов.

Функция — способ не держать всё в голове
Человек одновременно удерживает в голове мало вещей. Программа на тысячу строк в голову не помещается — и не должна.
Поэтому код режут на функции: у каждой одно понятное имя и одно дело. Дальше думаешь именами, а не строчками.
В больших проектах это уже не удобство, а необходимость: над кодом работают десятки людей, и каждый читает чужие функции по названию.
Функция написана, а экран пустой
Ошибок нет, экран пустой. Самая частая беда с функциями у новичков — и лечится одной строкой. Найди место, где чего-то не хватает.
И ещё одна ловушка рядом: скобки в вызове обязательны. Напишешь просто звезда без скобок — Python поймёт это как «дай мне саму функцию», а не «выполни её». Ошибки не будет, звезды тоже.
Функция внутри функции
1 from turtle import * ; import random
2 def star(x, y, size, col):
3 ... тело ...
4
5 def house(x, y, size):
6 ... тело ...
7
8 def sky(count):
9 for i in range(count):
10 star(random.randint(-200,200), random.randint(0,150), 12, "gold")
11
12 # А ВНИЗУ — сама картина, читается как список дел:
13 sky(40)
14 house(-60, -120, 70)
15 star(150, 130, 40, "white") # луна поярче
Смотри на строку 10: функция sky внутри себя вызывает star. Так и строят большие программы — из маленьких кусочков собирают покрупнее. А внизу, в строках 13–15, вся картина умещается в три строки, которые читаются как список дел.
Правило простое и техническое: описание должно идти раньше вызова. Python читает файл сверху вниз, и если вызвать функцию до её объявления — он о ней ещё не знает и выдаст NameError.
Последняя галочка — проверка на взрослость кода. Покажи только последние строки программы кому-нибудь. Если человек понял, что нарисует программа, — ты назвал функции правильно.
Пейзаж из заклинаний
Смысл задания не в рисунке, а в устройстве программы. Когда финал файла выглядит как sky(40) · forest(7) · house(-60, -120, 70) — это уже взрослый код, который приятно и открыть, и менять.
Как сдать работу: в «Python в кармане» код сохраняется сам — закрыл страницу, вернулся, и он на месте. Кнопки «поделиться» там нет и ссылки на твою работу тоже: покажи экран взрослому или пришли скриншот — этого достаточно. Поле выше нужно, только если ты писал в другом редакторе, который выдаёт ссылку. Дай кому-нибудь поменять последние строки — пусть переставит домик или добавит звёзд. Человек, не знающий Python, справится за минуту, если функции названы понятно. Вот это и есть хороший код.
Читать текстом
Жми — Гильдия отметит шестой остров Обсерватории.