Команды Черепашки ограничены тем, что заложили в нее создатели. Но как быть, если нам требуется нарисовать много квадратов? Конечно, можно скопировать и вставить много раз команды для рисования квадрата, но это будет не слишком красиво и не очень понятно. А уж когда потребуется что-то изменить, то станет совсем грустно.
Попробуйте разобраться в такой программе:
Чтобы не было грустно, а было хорошо и удобно, мы создадим новую команду, которую назовем sq (от слова square). Тогда рисование квадрата можно будет выполнять одной командой sq().
Что произошло после запуска данной программы? Подсказка: «ничего» — неправильный ответ. Правильный ответ должен звучать так: программа запустилась без ошибок, показала окно с Черепашкой, ничего не нарисовала.
Слова словами, но ведь ничего не нарисовано! И это правильно, ведь команды рисовать не было, а было объяснение новой команды “sq”. Чтобы воспользоваться этой командой нужно написать sq(). Обратите внимание на скобки: без скобок программа запустится и не покажет ошибок, однако нарисовано ничего не будет. На самом деле def – это создание функции (другие названия: подпрограмма, вспомогательный алгоритм, процедура). Пока мы работаем с Черепашкой это будет удобно называть «созданием новой команды».
Теперь нарисуем два квадрата рядом, на расстоянии 50.
Думаю, будет лучше поднять перо после рисования. И опустить – перед рисованием:
Для красоты добавим заливку цветом:
1. Нарисовать 4 квадрата (80х80) в линию по горизонтали, с расстоянием между квадратами, равным 20
2. Создать команду «Прямоугольник» (rect)
3. Нарисовать 6 прямоугольников 80х60 в два ряда
4. Создать команду «Треугольник» (равносторонний)
5. Нарисовать квадрат 50х50, 30х30, 90х90, 10х10, 40х40
При выполнении последнего задания у вас должна была появится мысль, что здесь что-то не так, что должен быть какой-либо другой удобный способ рисования разных квадратов. Конечно же, он существует: для этого нужно использовать параметр:
6. Изменить команду «Квадрат» так, чтобы можно было рисовать квадрат с произвольного размера
7. Изменить команду «Прямоугольник» так, чтобы можно было рисовать прямоугольник произвольного размера (потребуется два параметра. Объявлять: def rect(a,b), вызывать: rect(100,80)
8. Изменить команду «Треугольник», чтобы можно было рисовать треугольник произвольного размера
9. Нарисовать несколько квадратов, вложенных друг в друга

10. Нарисовать несколько квадратов, вложенных друг в друга

11. Нарисовать несколько квадратов, вложенных друг в друга
Больше команд, хороших и разных!
Создадим команду (функцию) для рисования цифры 1 b 2 стиле индекса на почтовых конвертах. Для упрощения расчетов будем использовать команды pos и getpos Черепашки.

12. Создайте команды для рисования цифр: 0,6
13. Создайте надпись с текущим годом: 2016
14. Составьте из этих цифр другие числа:
6012, 1602, 6666, 0000. Во всех ли случаях удалось составить цифры, не подгоняя положение Черепашки?
Недавно начал учить питон и наткнулся на вашу страничку. Проект суперский! И хотя я уже знаком в питоне и с функциями и списками и т.д. тем не менее ваши задачи открывают для меня много нового. Спасибо.
На 9-ом задании зациклился немного и вот что получилось:
from
turtle
import
*
def
tre(dl, ch):
n
=
int
(dl)
x
=
(dl
/
(ch
*
2
))
y
=
(x
/
2
)
chet
=
ch
while
chet !
=
0
:
ht()
down()
fd(n)
lt(
120
)
fd(n)
lt(
120
)
fd(n)
lt(
120
)
up()
fd(x)
lt(
90
)
fd(y)
rt(
90
)
n
=
n
-
(dl
/
ch)
chet
=
chet
-
1
print
(
''' Программа рисует РАВНОСТОРОННИЕ треугольники
равномерно вложенные друг в друга.'''
)
print
(
'Введите длинну стороны внешнего треугольника: '
, end
=
'')
dl
=
float
(
input
())
print
(
'Введите количество вложенных треугольников: '
, end
=
'')
ch
=
int
(
input
())
tre(dl, ch)
done()
Если можно прокоментировать буду рад. Может можно как то оптимизировать.
Привет. Рад, что задачи нравятся, признаюсь, мне и самому нравятся.
Теперь по задаче (я отредактировал комментарий — добавил
до кода и
после кода)
В данном случае функция использована не совсем правильно: логичнее треугольник выделить в свою функцию. Не то, чтобы это сильно было важно, но так будет логичнее.
Логичнее использовать for x in range вместо while
Если уж использовать while, то безопаснее так: while chet > 0.
В данной задаче счетчик не сможет «перескочить» через ноль, но лучше себя приучить к безопасному сравнению. Чтобы ненароком не уйти в зацикливание.
В конце я добавил я вывод сообщения «the end..», чтобы было понятно, что программа не зависла, а благополучно закончила свою работу.
from
turtle
import
*
def
tr(n):
down()
fd(n)
lt(
120
)
fd(n)
lt(
120
)
fd(n)
lt(
120
)
up()
def
tre(dl, ch):
n
=
int
(dl)
x
=
(dl
/
(ch
*
2
))
y
=
(x
/
2
)
for
z
in
range
(ch):
ht()
tr(n)
fd(x)
lt(
90
)
fd(y)
rt(
90
)
n
=
n
-
(dl
/
ch)
print
(
''' Программа рисует РАВНОСТОРОННИЕ треугольники
равномерно вложенные друг в друга.'''
)
print
(
'Введите длинну стороны внешнего треугольника: '
, end
=
'')
dl
=
float
(
input
())
print
(
'Введите количество вложенных треугольников: '
, end
=
'')
ch
=
int
(
input
())
speed(
10
)
tre(dl, ch)
print
(
'the end...'
)
done()
блин, не вставились правильно. Вот так нужно выделять код:
[pythоn]
…
[/pythоn]