Команды Черепашки ограничены тем, что заложили в нее создатели. Но как быть, если нам требуется нарисовать много квадратов? Конечно, можно скопировать и вставить много раз команды для рисования квадрата, но это будет не слишком красиво и не очень понятно. А уж когда потребуется что-то изменить, то станет совсем грустно.
Попробуйте разобраться в такой программе:
from turtle import * speed(0) fd(120) rt(90) fd(120) rt(90) fd(120) rt(90) fd(120) rt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) lt(180) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) rt(90) fd(60) rt(90) fd(60) rt(90) fd(60) rt(90) rt(180) fd(120) rt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) lt(180) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) lt(90) fd(60) rt(90) fd(60) rt(90) fd(60) rt(90) fd(60) rt(90) done()
Чтобы не было грустно, а было хорошо и удобно, мы создадим новую команду, которую назовем sq (от слова square). Тогда рисование квадрата можно будет выполнять одной командой sq().
from turtle import * def sq(): fd(100) rt(90) fd(100) rt(90) fd(100) rt(90) fd(100) done()
Что произошло после запуска данной программы? Подсказка: «ничего» — неправильный ответ. Правильный ответ должен звучать так: программа запустилась без ошибок, показала окно с Черепашкой, ничего не нарисовала.
Слова словами, но ведь ничего не нарисовано! И это правильно, ведь команды рисовать не было, а было объяснение новой команды “sq”. Чтобы воспользоваться этой командой нужно написать sq(). Обратите внимание на скобки: без скобок программа запустится и не покажет ошибок, однако нарисовано ничего не будет. На самом деле def – это создание функции (другие названия: подпрограмма, вспомогательный алгоритм, процедура). Пока мы работаем с Черепашкой это будет удобно называть «созданием новой команды».
from turtle import * def sq(): fd(100) rt(90) fd(100) rt(90) fd(100) rt(90) fd(100) sq() done()
Теперь нарисуем два квадрата рядом, на расстоянии 50.
from turtle import * def sq(): fd(100) rt(90) fd(100) rt(90) fd(100) rt(90) fd(100) sq() fd(50) sq() done()
Думаю, будет лучше поднять перо после рисования. И опустить – перед рисованием:
from turtle import * def sq(): pd() fd(100) rt(90) fd(100) rt(90) fd(100) rt(90) fd(100) pu() sq() fd(50) sq() done()
Для красоты добавим заливку цветом:
from turtle import * def sq(): color('red','yellow') begin_fill() pd() fd(100) rt(90) fd(100) rt(90) fd(100) rt(90) fd(100) pu() end_fill() sq() fd(50) sq() done()
2. Создать команду «Прямоугольник» (rect)
3. Нарисовать 6 прямоугольников 80х60 в два ряда
4. Создать команду «Треугольник» (равносторонний)
5. Нарисовать квадрат 50х50, 30х30, 90х90, 10х10, 40х40
При выполнении последнего задания у вас должна была появится мысль, что здесь что-то не так, что должен быть какой-либо другой удобный способ рисования разных квадратов. Конечно же, он существует: для этого нужно использовать параметр:
from turtle import * def sq(a): color('red','yellow') begin_fill() pd() fd(a) rt(90) fd(a) rt(90) fd(a) rt(90) fd(a) pu() end_fill() sq(100) fd(50) sq(20) done()
7. Изменить команду «Прямоугольник» так, чтобы можно было рисовать прямоугольник произвольного размера (потребуется два параметра. Объявлять: def rect(a,b), вызывать: rect(100,80)
8. Изменить команду «Треугольник», чтобы можно было рисовать треугольник произвольного размера
9. Нарисовать несколько квадратов, вложенных друг в друга
10. Нарисовать несколько квадратов, вложенных друг в друга
11. Нарисовать несколько квадратов, вложенных друг в друга
Больше команд, хороших и разных!
Создадим команду (функцию) для рисования цифры 1 b 2 стиле индекса на почтовых конвертах. Для упрощения расчетов будем использовать команды pos и getpos Черепашки.
from turtle import * def one(): x,y = pos() pu() setpos(x,y+30) pd() setpos(x+30,y+60) setpos(x+30,y) pu() setpos(x+30,y) def two(): x,y = pos() pu() setpos(x,y+60) pd() setpos(x+30,y+60) setpos(x+30,y+30) setpos(x,y) setpos(x+30,y) pu() one() fd(10) two() fd(10) done()
Недавно начал учить питон и наткнулся на вашу страничку. Проект суперский! И хотя я уже знаком в питоне и с функциями и списками и т.д. тем не менее ваши задачи открывают для меня много нового. Спасибо.
На 9-ом задании зациклился немного и вот что получилось:
Если можно прокоментировать буду рад. Может можно как то оптимизировать.
Привет. Рад, что задачи нравятся, признаюсь, мне и самому нравятся.
Теперь по задаче (я отредактировал комментарий — добавил
после кода)
В данном случае функция использована не совсем правильно: логичнее треугольник выделить в свою функцию. Не то, чтобы это сильно было важно, но так будет логичнее.
Логичнее использовать for x in range вместо while
Если уж использовать while, то безопаснее так: while chet > 0.
В данной задаче счетчик не сможет «перескочить» через ноль, но лучше себя приучить к безопасному сравнению. Чтобы ненароком не уйти в зацикливание.
В конце я добавил я вывод сообщения «the end..», чтобы было понятно, что программа не зависла, а благополучно закончила свою работу.
блин, не вставились правильно. Вот так нужно выделять код:
[pythоn]
…
[/pythоn]