Раздел «Язык Си».PythonTurtleIfFor:

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. При этом цвета должны чередоваться в шахматном порядке

Задача 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)

for i in range(3):
   pc = branch(6, 50, 5, 20, 10)     # ветка вверх
   пероВверх()
   встатьНа(pc)
   пероВверх()
   встатьНа(pc)

-- TatyanaDerbysheva - 26 Apr 2017

Attachment sort Action Size Date Who Comment
rin.png manage 171.3 K 03 May 2017 - 22:33 TatyanaDerbysheva  
rin.svg manage 3.9 K 03 May 2017 - 22:34 TatyanaDerbysheva  
branch.png manage 1.8 K 04 May 2017 - 10:37 TatyanaDerbysheva