Различия между версиями 5 и 6
Версия 5 от 2020-10-01 08:47:16
Размер: 4737
Редактор: hbd
Комментарий: Добавлена Задача_0
Версия 6 от 2020-10-01 08:53:14
Размер: 4954
Редактор: hbd
Комментарий: Добавлена Задача_1
Удаления помечены так. Добавления помечены так.
Строка 20: Строка 20:
  * <!> (если надо — пере/доформулировать) Задача_1: Написать функцию вычитания двух объектов, которая должна, помимо вычитания того, что и так вычитается, вычитать некоторые хранимые последовательности (по правилам множеств, т. е. если элемент есть в вычитаемом хотя бы раз, то он не встречается в разности); порядок элементов и тип результата должен быть сохранён. В качестве примера вычесть целые, вещественные, множества, кортежи и строки.   * <!> Задача_1: написать функцию вычитания двух объектов
   * должно поддерживаться вычитание объектов, для которых вычитание уже определено (целые, вещественные, множества, ...)
   * должно поддерживаться вычитание упорядоченных хранимых последовательностей (кортежей, строк) по следующим правилам:
    * в "разность" должны попасть все элементы "уменьшаемого", которых нет в "вычитаемом"; если элемент встречается в "вычитаемом" хотя бы раз, то он не попадает в "разность"
    * элементы должны располагаться в "разности" в том же порядке, что и в "уменьшаемом"
Строка 22: Строка 26:
    * составить множество типов последовательностей, для которых нужно имитировать вычитание, и проверять в нём     * проверять на всех указанных выше типах последовательностей, для которых нужно реализовать вычитание
Строка 24: Строка 28:
    * строка обрабатывается чуть-чуть не так (но есть вариант, когда так же)     * строка обрабатывается чуть-чуть не так, как кортеж (но есть вариант, когда так же)

04. Функции и замыкание

  • Функция как именованная запись алгоритма
    • duck typing
    • пространство имён и pythontutor.com
      • вызов одной функции из другой
      • {i} написать примитивно-рекурсивную функцию на 4 вызова, пронаблюдать как она работает

    • <!> Задача_0: поиск Парето-фронта в двумерном пространстве

      • пара (x,y) доминируется парой (a,b), если x<=a, y<=b, и верно хотя бы одно из: x<a, y<b

      • написать функцию Pareto, которая:
        • получает на вход набор пар чисел, количество пар заранее не известно
        • находит Парето-фронт, т.е. все пары из заданного набора, каждая из которых не доминируется никакой парой из заданного набора
        • возвращает результат в виде кортежа из найденных пар чисел
      • функция должна поддерживать вызов в формате Pareto(pair_1, pair_2, pair_3, ...), где pair_i -- кортеж из двух чисел
      • допустимо решать задачу путем прохода по набору пар и проверки, доминируется ли очередная пара какой-либо из других пар
    • лямбда-функции (функции-выражения)
      • как работает sorted(…, key=fun)

      • {i} переписать Задачу_2 из прошлого семинара в однострочник с использованием sorted():

        • ввести и отсортировать по возрастанию ключей числовой список, в качестве ключа сравнения использовать остаток от деления x2 на 100
    • <!> Задача_1: написать функцию вычитания двух объектов

      • должно поддерживаться вычитание объектов, для которых вычитание уже определено (целые, вещественные, множества, ...)
      • должно поддерживаться вычитание упорядоченных хранимых последовательностей (кортежей, строк) по следующим правилам:
        • в "разность" должны попасть все элементы "уменьшаемого", которых нет в "вычитаемом"; если элемент встречается в "вычитаемом" хотя бы раз, то он не попадает в "разность"
        • элементы должны располагаться в "разности" в том же порядке, что и в "уменьшаемом"
      • Подсказки:
        • проверять на всех указанных выше типах последовательностей, для которых нужно реализовать вычитание
        • как работает type(object)()?

        • строка обрабатывается чуть-чуть не так, как кортеж (но есть вариант, когда так же)
    • <!> (доформулировать) Задача_2 (на рекурсию): Реализовать функцию бинарного поиска в упорядоченной индексируемой хранимой последовательности

      • Проверить её на строках и кортежах
  • Замыкание: как образуется, почему изнутри это не так просто, как снаружи?
    • Разбор примера про adder-ы из лекций
  • {i} Функуционал: на вход две функции от одной переменной (f(x) и g(x)) , на выходе — функция от одной переменой h(x)=f(x)+g(x)

  • <!> Задача_3: Функционал-еval()-ище. Написать функцию calc(s, t ,u), которой передаются три строки. Каждая строка — это формула; s и t — над одной переменной x, а u — над двумя переменными x и y. Возвращается функция, которая по заданному x вычисляет u(s(x), t(x)).

    • Например, calc("x", "2*x+1", "x/y") должно возвращать функцию, которая вычисляет $$x / {2x+1}$$

LecturesCMC/PythonIntro2020/Prac/04_FunctionsClosure (последним исправлял пользователь FrBrGeorge 2020-10-07 18:54:34)