Различия между версиями 9 и 10
Версия 9 от 2018-09-25 00:06:07
Размер: 4310
Редактор: FrBrGeorge
Комментарий:
Версия 10 от 2018-09-26 13:26:40
Размер: 5548
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 27: Строка 27:
Пример: черепашья графика
  * основные команды
  * пример функции: равносторонний треугольник
  * пример функции: треугольники по вершинам квадрата
  * пример функции: равносторонний треугольник с заданной стороной
  * пример функции: прямоугольник с заданными размерами сторон
  * пример функции: треугольник 3×4×5 заданного масштаба
  * пример функции: ''что-то'' по вершинам квадрата (передаём функцию!)
   * треугольник с заданной стороной
   * `circle` с заданным радиусом
   * квадрат с заданной стороной
   * …
  * Редизайн: где `penup()`, где `pendown()`?
Пример: [[py3doc:turtle.html|черепашья графика]]
  * [[http://interactivepython.org/runestone/static/IntroPythonTurtles/Summary/summary.html|основные команды]]
  * Равносторонний треугольник
  {{{#!python
def trg():
    fd(100)
    lt(120)
    fd(100)
    lt(120)
    fd(100)
    lt(120)
  }}}
  * Равносторонний треугольник с заданной стороной
  {{{#!python
def trgS(size):
    fd(size)
    lt(120)
    fd(size)
    lt(120)
    fd(size)
    lt(120)
  }}}
  * Треугольники по вершинам квадрата
  {{{#!python
def trgsq():
    trgS(10)
    lt(90)
    penup()
    fd(100)
    pendown()
    trgS(10)
    lt(90)
    penup()
    fd(100)
    pendown()
    trgS(10)
    lt(90)
    penup()
    fd(100)
    pendown()
    trgS(10)
    lt(90)
    penup()
    fd(100)
    pendown()
}}}
  * Квадрат с заданной стороной и окружность с заданным радиусом
  {{{#!python
def sqrS(size):
    fd(size)
    lt(90)
    fd(size)
    lt(90)
    fd(size)
    lt(90)
    fd(size)
    lt(90)

def crcS(size):
    circle(size)
  }}}
  * ''Что-то'' по вершинам квадрата (передаём функцию!)
  {{{#!python
def smthSQ(size, funct):
    funct(size)
    pu()
    fd(100)
    lt(90)
    pd()
    funct(size)
    pu()
    fd(100)
    lt(90)
    pd()
    funct(size)
    pu()
    fd(100)
    lt(90)
    pd()
    funct(size)
    pu()
    fd(100)
    lt(90)
    pd()
}}}
   * Вызов этой функции (мы её передаём в качестве параметра функцию, которая будет рисовать это самое ''что-то'')
   {{{#!python
smthSQ(15, trgS)
pu()
goto(-100,-100)
pd()
smthSQ(20, sqrS)
pu()
goto(100,100)
pd()
smthSQ(25, crcS)
}}}
  * Редизайн: когда поднимать и опускать перо? ('''TODO''')
Строка 42: Строка 128:
  * Прощёлкать примеры из [[py3doc:turtle.html|документации по turtle]]
Строка 44: Строка 131:
   * заданных размера и цветов стен и крыши
   * с окном и дверью
   * +задать в качестве параметра размер и цвета стен и крыши
   * +с окном и дверью
   * +… ;)

Повторное использование кода

  • Функция Python3 как именованный алгоритм
    • Отличие от функции в строгом смысле (преобразование данных определённого типа в данные (другого?) определённого типа)
  • Задание и вызов функции, блок-со-сдвигом
    • функция — это просто объект
    • правда, он callable() (но бывают и другие callable-объекты)

      • т. е. объект, который можно вызвать с помощью объект()

    • Какие callable-объекты нам уже известны (например, типы, bin(), print() и т. п.)

    • Формат задания функции, синтаксически значимый сдвиг
  • Параметры функции
    • Формальные: имена в описании
    • Фактические: выражения при вызове
  • Возвращаемое значение функции
    • и его неиспользование
  • Суперпозиция функций
  • «Утиная типизация»: все объекты строго типизированы, но по имени этого не скажешь
    • ⇒ функция выполнится, если все операции в ней применимы к переданным объектам
  • Локальные и глобальные имена, правила видимости
    • Время жизни локальных имён (формальных параметров и собственно локальных имён)
    • locals()

    • Загораживание глобальных имён локальными
    • Проблема «побочного эффекта»: разрешать или не разрешать связывание с помощью глобальных имён внутри функции:
      1. Есть связывание ⇒ имя локальное
      2. global

    • Пример

    • Строка документации, help(функция)

Пример: черепашья графика

  • основные команды

  • Равносторонний треугольник
       1 def trg():
       2     fd(100)
       3     lt(120)
       4     fd(100)
       5     lt(120)
       6     fd(100)
       7     lt(120)
    
  • Равносторонний треугольник с заданной стороной
       1 def trgS(size):
       2     fd(size)
       3     lt(120)
       4     fd(size)
       5     lt(120)
       6     fd(size)
       7     lt(120)
    
  • Треугольники по вершинам квадрата
       1 def trgsq():
       2     trgS(10)
       3     lt(90)
       4     penup()
       5     fd(100)
       6     pendown()
       7     trgS(10)
       8     lt(90)
       9     penup()
      10     fd(100)
      11     pendown()
      12     trgS(10)
      13     lt(90)
      14     penup()
      15     fd(100)
      16     pendown()
      17     trgS(10)
      18     lt(90)
      19     penup()
      20     fd(100)
      21     pendown()
    
  • Квадрат с заданной стороной и окружность с заданным радиусом
       1 def sqrS(size):
       2     fd(size)
       3     lt(90)
       4     fd(size)
       5     lt(90)
       6     fd(size)
       7     lt(90)
       8     fd(size)
       9     lt(90)
      10 
      11 def crcS(size):
      12     circle(size)
    
  • Что-то по вершинам квадрата (передаём функцию!)

       1 def smthSQ(size, funct):
       2     funct(size)
       3     pu()
       4     fd(100)
       5     lt(90)
       6     pd()
       7     funct(size)
       8     pu()
       9     fd(100)
      10     lt(90)
      11     pd()
      12     funct(size)
      13     pu()
      14     fd(100)
      15     lt(90)
      16     pd()
      17     funct(size)
      18     pu()
      19     fd(100)
      20     lt(90)
      21     pd()
    
    • Вызов этой функции (мы её передаём в качестве параметра функцию, которая будет рисовать это самое что-то)

         1 smthSQ(15, trgS)
         2 pu()
         3 goto(-100,-100)
         4 pd()
         5 smthSQ(20, sqrS)
         6 pu()
         7 goto(100,100)
         8 pd()
         9 smthSQ(25, crcS)
      
  • Редизайн: когда поднимать и опускать перо? (TODO)

Д/З
Функции и черепашка
  • Прочитать и прощёлкать третью главу учебника

  • Прощёлкать примеры из документации по turtle

  • Ввести три числа — стороны существующего треугольника, вывести его площадь (Формула_Герона)

  • Нарисовать домик (с помощью функций «треугольник» и «прямоугольник»)
    • +задать в качестве параметра размер и цвета стен и крыши
    • +с окном и дверью
    • +… ;)

Python/PsyPython2018/03_Functions (последним исправлял пользователь FrBrGeorge 2018-10-02 01:19:18)