TODO
- Исправить условия задач второй половины, указав точно какие функции вызывать и где именно вызывать функцию рисования линии в задаче о линии и окружности
- добавить задачу о рисовании двух прямоугольников, если они не имеют общих точек, иначе не рисовать (или наоборот)
Функции возвращают значения
Иногда нужно узнать какие числа или другие значения были у функции, когда она работала.
Тогда можно сказать функции, чтобы она ВЕРНУЛА (
return
) это нужное нам значение
Пример 1. Нарисуем квадрат, вычислим его середину и вернем это значение
# -*- coding: utf-8 -*-
import turtle
import time
def write(data):
t.write(data, font=("Arial", 14, "normal"))
def carre(size, col):
p0 = t.pos() # запомним от какой точки будем рисовать
t.color(col)
t.down()
# вычислим координаты середины
xc = size/2
yc = size/2
# нарисуем квадрат
for i in range(4):
t.fd(size)
t.left(90)
t.up()
t.goto(xc, yc) # встанем на центр
centr = t.pos() # запомним точку центра
t.goto(p0) # вернемся в начальную точку
return centr # ВЕРНЕМ ЗНАЧЕНИЕ центр
t = turtle.Turtle()
t.shape("turtle")
t.width(3)
pc = carre(100, "blue") # Нарисуем квадрат и получим точку центра pc
# вычислять ее больше не нужно
# pc вычисляет функция carre()
t.goto(pc) # поставим черепаху на этот центр
write(pc)
turtle.done()
Задача 0. Исправить функцию
Функция неправильно вычисляет центр квадрата, если мы начинаем не из позиции (0,0).
Исправьте функцию, чтобы она могла вычислять центр квадрата, который рисуют из любой точки. Направление черепах - на восток.
Пример 2. Найдем центр квадрата по-другому
# -*- coding: utf-8 -*-
import turtle
import time
def write(data):
t.write(data, font=("Arial", 14, "normal"))
def sq0(size, col):
p0 = t.pos() # запомним от какой точки будем рисовать
# найдем центр квадрата
t.up()
t.fd(size/2)
t.left(90)
t.fd(size/2)
centr = t.pos() # запомним центр квадрата в переменную centr
time.sleep(1) # ждем 1 секунду
t.goto(p0) # вернемся в начальную точку
t.left(-90) # восстановим направление
t.color(col)
t.down()
# нарисуем квадрат
for i in range(4):
t.fd(size)
t.left(90)
t.up()
return centr # ВЕРНЕМ ЗНАЧЕНИЕ centr
t = turtle.Turtle()
t.shape("turtle")
t.width(3)
pc = sq0(100, "blue") # Нарисуем квадрат и получим точку центра pc
# вычислять ее больше не нужно
# pc вычисляет функция sq0()
t.color('red') # после функции черепаха стала красной
time.sleep(1) # ждем 1 секунду
t.goto(pc) # поставим черепаху на этот центр
write(pc) # напишем координаты точки pc
turtle.done()
Этот способ не зависит от начальных координат черепахи.
Пример 3. Рисуем окружность
Функция
t.circle(radius) рисует окружность радиусом radius из той точки, где стоит черепаха.
Задача 1. Центр окружности
Написать функцию
def circR(radius, color)
, которая ВОЗВРАЩАЕТ точку центра окружности. Получить эту точку в программе и поставить туда черепаху.
Функция используется так:
p = circR(150, 'blue')
t.up()
t.goto(p)
Задача 2 Центр треугольника
Для правильного треугольника со стороной a радиус описанной окружности R и радиус вписанной окружности r есть формулы:
R = 2r
Написать функцию
def trC(size, color)
, которая рисует правильный треугольник и возвращает точку центра этого треугольника. Получить эту точку в программе и поставить туда черепаху.
Направление черепахи в центре может быть любое.
p = trC(300, 'blue')
t.up()
t.goto(p)
Задача 3 Вписанная окружность
Написать функцию
def trOk(size, color)
, которая рисует правильный треугольник и возвращает радиус вписанной окружности. После работы функции черепаха стоит на половине стороны и повернута по направлению движения (готова рисовать окружность).
В основной программе нарисовать вписанную окружность
r = trOk(300, 'blue')
t.circle(r)
Задача 4 Описанная окружность
Написать функцию
def sq(size, color)
, которая рисует квадрат и возвращает радиус описанной окружности. После работы функции черепаха стоит в углу квадрата и повернута перпендикулярно диагонали.
В основной программе нарисовать описанную окружность
r = sq(300, 'blue')
t.circle(r)
Условия.
Чтобы выбрать какое действие выполнить есть УСЛОВИЯ
Например. Если размер квадрата равен 0, то не будем его рисовать.
def sq(size, col):
t.down()
t.color(col)
if size == 0:
write("не буду рисовать")
return t.pos() # здесь функция сразу перестанет работать
for n in range(4): # а это будет выполнять если не 0
t.fd(size)
t.left(90)
Можно сравнить и по-другому
def sq(size, col):
t.down()
t.color(col)
if size > 200 :
write("очень большой!")
for n in range(4):
t.fd(size)
t.lt(90)
Можно и так написать:
def sq(size, col):
t.down()
t.color(col)
if 0 < size and size < 200 :
write("правильный")
else:
write("плохие размеры")
return
for n in range(4):
t.fd(size)
t.lt(90)
Задача 5 Круг справа
Написать функцию
def line(x)
, которая рисует вертикальную линию с координатой
x
. Написать функцию
def circRight(centr, radius, x)
, которая рисует круг, если он будет полностью находится СПРАВА от линии. Если круг находится слева от линии или пересекает линию, пишет
Не буду рисовать
.
Используйте функцию
t.stamp(), чтобы показать центр окружности.
Задача 6 Разные квадраты
Функция
sq(size, color)
рисует квадрат цвета
color
. Функция
sq2(size1, size2, color1, color2)
рисует два квадрата цветом
color1
и
color2
. Если цвета совпадают, второй квадрат будет не видно.
Напишем функцию так, чтобы цвета были обязательно разные. Если цвета одинаковые, поменяем второй цвет:
def sq2(size1,size2,color1,color2):
if color1 == color2:
if color1 == "red":
color2 = "yellow"
else :
color2 = "red"
sq(size1, color1)
sq(size2, color2)
Исправить функцию так, чтобы поменять все цвета и нарисовать квадраты. Проверить ее работу.
Написать в тетради какие вызовы функции sq2 вы будете проверять.
Задача 7 Черточки
Написать функцию
def dash(size, step )
, которая рисует черточки размером
step
на полоске размером
size
. Цвет черточек меняется: нечетная - красная, четная - зеленая. Нужно ВЫЧИСЛИТЬ сколько черточек рисовать.
Если черточка не умещается полностью, не надо ее рисовать.
Задача 8 Вложенные квадраты
Написать функцию
def sqn(size, n)
, которая рисует
n
вложенных цветных квадратов. Размер стороны квадрата каждый раз
уменьшается на 20. Если размер становится равен или меньше 0, то рисование прекращается.
Написать сколько получилось квадратов
вызов | вызов |
sqn(150,14) | sqn(100,5) |
| |
Задача 7a Черточки - нарисовать последнюю
Написать функцию
def dash(size, step)
, которая рисует черточки размером
step
на полоске размером
size
. Цвет черточек меняется: нечетная - красная, четная - зеленая
Если черточка не умещается полностью,
надо нарисовать часть черточки.
Задача 7b Черточки - красный, красный, зеленый
Написать функцию
def dash(size, step)
, которая рисует черточки размером
step
на полоске размером
size
. Цвет черточек меняется: красная, красная, зеленая
Если черточка не умещается полностью, не рисуйте ее.
Задача 9 "Шахматная" доска
Написать функцию
def chessLine(size, step, firstColor)
, которая рисует
size/step
клеточек размера
step
чередуя цвета клеток. Функция должна возвращать цвет последнего квдратика.
Написать функцию
chessPole(h,w,step)
, которая заполняет прямоугольник размером
h x w
клеточками размера
size
. При этом цвета должны чередоваться в шахматном порядке
Как пролучить числа с клавиатуры:
# другой код
# получим числа x1, x2
x1 = int(input().split())
x2 = int(input().split())
# и цвет
color = input()
# другой код
Задача 10. Точка внутри или снаружи окружности?
Центр окружности - точка (0,0)
Получить числа x и y - координаты точки, r - радиус окружности
Написать функцию
def isPointInside(x,y, r), которая определяет где находится точка
(x,y) : внутри или снаружи окружности.
Если точка внутри, то функция возвращает 1 и ставит точку в (x, y), если снаружи, функция возвращает 0, а черепаха остается на месте.
Задача 11. Точка пересечения линий
Рисуем две линии: одна параллельна оси ОХ, а другая параллельна оси ОY.
Первая линия определяется координатами по оси ОХ
(х1, x2) и координатой *y, а вторая линия задается координатами ОY
(y1, y2) и координатой *x
Написать функцию
def isPLineCrossed(x1, x2, y, x, y1, y2), которая определяет точку координаты точки пересечения двух линий. Если линии
пересекаются, то черепаха отмечает точку пересечения и возвращаем 1, если не пересекаются, то черепаха остается на месте и возвращаем 0.
Задача 12. Пересечение линий
Две линии нарисовваны на одной прямой.
Первая линия задается координатами
x1, x2, а вторая задается координатами
x3, x4
Нарисовать обе линии.
Написать функцию
def getLineCrossed(x1,x2, x3, x4, color), которая ищет отрезок - пересечение этих двух линий. Если такой отрезок есть,
то его функция рисует его цветом
color и печатает YES. Если отрезка нет, то черепаха ничего не рисует и печатает NO.
Печатаем на экран.
Задача 10. Ветки
Написать функцию
def branch(n, size0, dsize, ang0, dang)
которая рисует 1 ветку из n отрезков. Первый отрезок длины size0, каждый следующий меньше на dsize. Первый угол поворота налево ang0, каждый следующий больше на dang.
Функция должна возвращать точку, в которой стоит черепаха, после того, как нарисовали половину отрезков ветки.
Чтобы нарисовать этот узор использовали код:
for i in range(3):
pc = branch(6, 50, 5, 20, 10) # ветка вверх
t.up()
t.goto(pc)
pc = branch(6, 50, 5, -20, -10) # ветка вниз
t.up()
t.goto(pc)
--
TatyanaDerbysheva - 26 Apr 2017