• Как сделать график квадратичной функции?

    Можете нарисовать картинку, как вы себе представляет результат?
    По идее после ввода коэффициентов уравнения и нажатия кнопки "Посчитать", вы на Canvas рисуете график функции, которая есть ваше квадратное уравнение и рисуете оси координат.
    Точки где ось координат "Х" пересечет график и будут корнями уравнения.
  • Что происходит в момент объявления функции?

    Файл читается построчно и тут же интерпретируется.
    До объявления функции у вас a = 1 - тут создается глобальная переменная.
    Далее в процессе чтения файла создается функция test и в конце этой функции в пространстве имен этой функии создается локальная переменная "a".

    Если из вашего примера убрать вызов функции test() все отработает без ошибок.
    Ошибка возникает в тот момент, когда интерпретатор выполняя функцию находит локальную переменную "a", это при вызове функции print(a), и ошибка от того, что значение локальной переменной "a" еще не присвоено.
    Оно появиться после выполнения строки a = 2, т.е. схема такая:

    загрузка модуля:
    a = 1 #глобальная переменная "a" со значением 1
    def test():
    print(a) #глобальная переменная "a" со значением 1
    a = 2 #создается локальная переменная "a", значение она получит только в момент выполнения функции

    test()

    #выполнение функции
    def test():
    print(a) #локальная переменная "a"без присвоенного значения - ошибка!
    a = 2 #если бы сюда дошли была бы локальная переменная "a" со значением 2

    Именно об этом по ссылке и говорится, смотрите первый пункт: "Почему я получаю исключение UnboundLocalError, хотя переменная имеет значение?"

    Если бы вы в функции test() закомментировали код a = 2, создающий локальную переменную такой ошибки бы не было.

    Т.е. вот так работает правильно:
    a = 1
    def test():
    print a

    test()

    Все портит попытка присвоить имени "a" какое-либо значения в теле функции.
    В этот момент создается локальная переменная с именем "a", которая закрывает для функции значение глобальной переменной "a".

    Порядок разрешения имен в общем случае такой:
    local - локальные переменные
    nonlocal - "нелокальные" переменные, это те, что объявляются в теле функции и д.б. доступны во вложенных
    функциях объявленных в теле той же функции. (шаблон декоратор как пример)
    global - глобальные переменные
    built-in - встроенная область
  • Что происходит в момент объявления функции?

    https://pythonworld.ru/osnovy/faq.html
    Судя по тому что там написано, как только мы присваиваем какое-то значение глобальной переменной внутри функции, создается новая локальная переменная с таким же именем. И получается что в момент загрузки модуля
    все "ОК", т.к. функция видит глобальную переменную, но в момент выполнения функции все крашится, т.к. уже действует локальная, но без присвоенного ей значения.
  • Что происходит в момент объявления функции?

    Python интерпретатор и обрабатывает код построчно. В момент выполнения print a интерпретатор останавливает выполнени программы, т.к. значение переменной “a” должно быть определено до использования, если это не так, то ошибка и что там дальше интерпретатор не знает.
  • Как сделать перестановки с заменой в python?

    выравнивание слетает, но тут его не сложно восстановить
  • Какой алгоритм должен быть для построения треугольников?

    Каждый элемент списка, это точка, с координатами заданными двумя строками.
    На выходе для каждого треугольника должны быть три разные точки, для которых нужно проверить, что они не лежат на одной линии (хотя в задаче этого явно не сказано)
    И да тут задача переборная и для получения всех треугольников нужно пройтись по всем вариантам, но сложность меньше чем O(N^3).
    Если все точки разные и никакие три из них не лежат на одной прямой, то для массива из 5 точек, будет
    1,2,3
    1,2,4
    1,2,5
    1,3,4
    1,3,5
    1,4,5
    2,3,4
    2,3,5
    2,4,5
    3,4,5

    Количество треугольников - это количество сочетаний по 3 точки из 5 имеющихся, т.е.
    C(5, 3) = 5!/(3!*2!) = 120/(2*6) = 10
    В общем случае будет C(N,3) = N!/((N-3)!*3!), т.е. например для n = 1000 получим 166167000 треугольников

    Т.е. перебор индексов элементов массива такой 1>=i>j>k<=N и тут точно не будут возникать дубли треугольников.
    Единственный момент, реальные индексы нужно начинать с нуля и заканчивать на N-1
    N - количество элементов массива.

    Поэтому комментарий Rsa97 не плохое решение, тем более что более быстрого нет, перебор нужно выполнить полностью.
  • Оправдано ли увеличение и дублирование кода для разбиения логических процессов?

    Чтобы открыть транзакцию нужно вызвать метод begin_transaction() у объекта db
    Чтобы зафиксировать транзакцию нужно вызвать метод commit()
    Т.е. Для вашего кода д.б.что-то вроде такого:

    public function updateShipment($parcels) {

    $this->db->begin_transaction()

    $this->db->query("UPDATE " . DB_PREFIX . "shipment_parcel SET date_delivery = NOW() WHERE point_id = '" . (int)$this->session->data['point_id'] . "' AND parcel_id IN (" . implode(',', $parcels) . ")");

    $this->db->query("UPDATE " . DB_PREFIX . "parcel SET date_return = '" . $this->db->escape(date('Y-m-d', strtotime('+' . $this->config->get('config_parcel_deadline') .' days'))) . "', date_modified = NOW() WHERE point_id = '" . (int)$this->session->data['point_id'] . "' AND parcel_id IN (" . implode(',', $parcels) . ")");

    foreach($parcels as $parcel_id) {
    $this->db->query("INSERT INTO " . DB_PREFIX . "parcel_history SET parcel_id = '" . (int)$parcel_id . "', parcel_status_id = '" . (int)$this->config->get('config_recieved_status') . "', user = '" . $this->db->escape($this->operator->getFullname()) . "', date_added = NOW(), date_modified = NOW()");

    $this->db->commit()
    }
    }

    Подробнее про это можно почитать вот тут например:
    php.net/manual/ru/mysqli.begin-transaction.php
    www.weblibrary.biz/mysql/sintaksis-oper/uprav-tran...
    https://habrahabr.ru/post/238513/

    И да, использование транзакций может приводить к блокировкам, в течении того времени пока транзакция не зафиксирована или не отменена. Это значит, что изменные или добавленные в одном коннекте в транзакции записи будут не доступны в запросах из другого коннекта и запросы будут висет в ожидании того, что завершится наложившая блокировку транзакция. Но такое поведение можно скорректировать если указать уровень изоляции. Про это тоже можно почитать в указанных ссылках.
  • Как оптимизировать запрос с ORDER BY и FULLTEXT search?

    Да, все верно. Для поля ind не нужно указывать алиас t1, т.к. такого поля нет в таблице.
    Нужно вместо t1.ind написать ind
  • Оправдано ли увеличение и дублирование кода для разбиения логических процессов?

    В приведённом вами коде в первой функции есть четыре запроса. Если не выполнять их в транзакции, то возможно что например первый insert отработал, а затем случился разрыв коннекта с базой и в итоге посылка зависла в непонятном состоянии. Если весь пакет из этих запросов обернуть в транзакцию, то в случае любого сбоя в любой момент выполнения пакета все, что было выполнено до момента сбоя будет возвращено в исходное состояние, т.е. в состояние до начала выполнения первого запроса пакета. Если же все ОК, то транзакция фиксируется, т.е. все изменения вступают в силу.
    То что все состояния выделены в отдельные процедуры это хорошо, пусть есть дублирование, но зато код не зависим и доработав один процесс можно не опасаться регресса в других(но тесты для каждого процесса нужно написать). То что вы заложили таблицу истории в проект это тоже хорошо, аудит очень нужен, для разбора конфликтных ситуаций. Я бы заложил в проект механизм чистки или архивации для тех посылок, которые уже доставлены, например завести рядом таблицы с аналогичной структурой и постфиксом arch и переливать туда данные по посылкам, которые доставлены например месяц назад или ранее(можно сделать настраиваемым). Таким образом, оперативные таблицы не будут сильно распухать.
  • Сохранение данных БД и восстановление/синронизация с сервером при обрыве связи, как лучше реализовать?

    Могут ли одни и те же данные менять разные пользователи? Если ответ да, то синхронизацию сделать не просто. Вот на есть статья про варианты решения этой задачи.
    https://habrahabr.ru/company/ncloudtech/blog/264923/

    Если ответ нет, тогда второй вопрос: может ли один пользователь залогиниться с разных устройств и менять свои данные, если да то тоже отсылка к предыдущей статье.

    Третий вариант, ответ нет на оба вопроса. Тогда для синхронизации данных на локале и в удаленном хранилище нужно иметь уникальный ключ для данных. По этому ключу можно находить новые-удалённые записи, т.к. в этом случае ключ будет только или в удалённом или в локальном хранилище. А для поиска изменений нужно будет сравнивать по всем полям все строки таблиц у которых ключ есть и в локальном и в удалённом хранилище.
  • Как победить ошибку "OverflowError: signed integer is greater than maximum"?

    Можно попробовать использовать распаковку аргументов:
    def view_todos(page=1, **kwargs):
    try:
    return Todo.objects(**kwargs).paginate(page=page, per_page=10)
    except:
    abort(404)

    В таком виде декоратор будет более универсальным, вариант запуска с вашим кейсом:
    view_todos(1, category_id=Cat.id )
  • Как найти наибольшую поседовательность за O(n)?

    Длинна текущей последовательности. В этом hash map каждый ключ это отдельная последовательность а значение это ее длинна. Если брать ваш пример то как тот будет:
    Шаг 1
    Ключ = 1 значение = 1
    Шаг 2
    Ключ = 2 значение = 2 потому что мы продолжаем последовательность начатую на шаге 1
    Шаг 3
    Уже имеем две последовательности
    Ключ = 2 значение 2
    Ключ = 433 значение = 1
    Шаг 4
    Ключ = 2 значение = 2
    Ключ = 433 значение = 1
    Ключ = 500 значение = 1
    Шаг 5
    Ключ = 3 значение = 3
    Ключ = 433 значение = 1
    Ключ = 500 значение = 1
    Шаг 6
    Ключ = 3 значение = 3
    Ключ = 433 значение = 1
    Ключ = 500 значение = 1
    Ключ = 900 значение = 1
    Шаг 7
    Ключ = 4 значение = 4
    Ключ = 433 значение = 1
    Ключ = 500 значение = 1
    Ключ = 900 значение = 1
    Т.е. на каждом шаге мы берём один элемент из массива и либо удлиняем имеющуюся цепочку, либо начинаем новую.