• Как перешагнуть итерацию?

    @Andy_U
    Если Вы до начала входа в цикл, знаете, куда "прыгнуть" после первого шага, то можно так:

    for i in [0] + [j for j in range(6, len(array))]:
        print(array[i])


    Если же следующий индекс определяется после входа в цикл, читайте про итераторы и генераторы.
    Ответ написан
    Комментировать
  • Как сделать многопоточный перебор массива?

    @Andy_U
    Вот, например, суммирование элементов массива в несколько процессов (и без всяких C-расширений) :

    # -*- coding: utf-8 -*-
    
    import numpy
    import multiprocessing
    
    
    def sub_sum(z):
        return numpy.sum(z)
    
    
    def parallel_sum(values, cpuz):
    
        boundaries = [i for i in range(0, len(values), len(values)//cpuz)]
        boundaries[-1] = len(values)
    
        with multiprocessing.Pool(cpuz) as pool:
            rc = pool.starmap(sub_sum, [(values[c1:c2],) for c1, c2 in zip(boundaries[: -1], boundaries[1:])])
    
        return sum(rc)
    
    
    if __name__ == '__main__':
    
        cpuz = multiprocessing.cpu_count()
        n = 999
        values = numpy.array([i for i in range(n)])
    
        print('cpuz =', cpuz)
        print('sum =', parallel_sum(values, cpuz))
        print('sum =', n*(n-1)//2)
    Ответ написан
    Комментировать
  • Как вывести японские символы в консоли python3?

    @Andy_U
    Поставьте в Pycharm консольным шрифтом DejaVu Sans Mono (чтобы я еще помнил, где его взял). Это в Settings->Editor->Color&Fonts->Console Font. Я там еще сделал line spacing 0.99 чтобы у sympy не было разрывов между строк, там где не надо.
    Ответ написан
  • Как пропатчить класс, который вызыватся в __init__ другого класса?

    @Andy_U
    Если я Вы хотели протестировать такой код, то решение (для Python 2.7.11) ниже.

    import unittest
    import mock
    
    
    class B(object):
        def some1(self):
            print 'some 1'
    
    
    class C(object):
        def some2(self):
            print 'some 2'
    
    
    class A(object):
        def __init__(self):
            self.b = B()
            self.c = C()
    
        def just_do_it(self):
            print 'Hello'
            self.b.some1()
            self.c.some2()
    
    
    class BMock(object):
        def some1(self):
            print 'mock.some 1'
    
    
    class CMock(object):
        def some2(self):
            print 'mock.some 2'
    
    
    class ATestCase(unittest.TestCase):
    
        @mock.patch('main.B')
        @mock.patch('main.C')
        def test_success_just_do_it(self, c, b):
            b.side_effect = BMock
            c.side_effect = CMock
            a = A()
            a.just_do_it()
    Ответ написан
    Комментировать
  • Проблемы с кодировкой python 3. Как быть?

    @Andy_U
    1) history.decode('utf-8') это уже строка, второй раз не надо.

    2) Ошибка у вас при выводе на консоль, но в Pycharm консоль по умолчанию юникодная. В Windows тоже. Т.е., проверьте на всякий значение os.environ['PYTHONIOENCODING']. Прямо перед печатью.
    Ответ написан
    8 комментариев
  • Какой подход (модель) выбрать для предсказания закупок лекарств?

    @Andy_U
    Вообще-то, это задача по теории обслуживания... Есть случайное потребление, есть случайные поставки со случайными задержками, есть стоимость хранения, есть "штрафы" за отстутствие товара на складе, товар портится, если не использован в течение некоторого срока, и т.д. и т.п.

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

    @Andy_U
    Не очень понял, зачем Вам это надо, но минимальные исправления ниже, причем варианты для Dialog1 и Dialog2 разные, без доп.информации не знаю, как лучше.

    class Main(object):  # основная функция
    
        def __init__(self):
            self.ab = AB()  # создаем экзмпляр класса с переменными
            d1 = Dialog1(self.ab)  # Создаем экзэмпляр класса который должен поменять переменную ab.a
            d2 = Dialog2(self)  # Создаем экзэмпляр класса который должен поменять переменную ab.b
    
        def sum(self):
            c = self.ab.a + self.ab.b
            print(c)
    
    
    class Dialog1(object):
        def __init__(self, parent):
            parent.a = 5  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main
    
    
    class Dialog2(object):
        def __init__(self, parent):
            parent.ab.b = 6  # !!! Пытаюсь поменять значение в переменной созданом в родительском классе Main
    
    
    class AB(object):
        a = 1
        b = 2
    
    m = Main()
    
    print(m.ab.a)
    print(m.ab.b)
    Ответ написан
    1 комментарий
  • В чем ошибка при импортировании matplotlib?

    @Andy_U
    Я наступил на похожие грабли с питоном 3.5 (см. https://toster.ru/q/248442). Там мне помогла инсталляция redistributable для VS 2015. Какой питон в Анаконде, и redist от какой версии VIsual Studio нужен - надо смотреть.
    Ответ написан
    Комментировать
  • Как рассчитать среднеквадратичное отклонение, если среднее значение неизвестно?

    @Andy_U
    Если вы знаете количество чисел, их сумму и сумму их квадратов, то можете вычислить и среднее, и дисперсию. Любой учебник по мат.статистике и/или стат.обработке данных Вам поможет. Единственно, что надо следить за накоплением ошибок округления и возможным переполнением при суммировании.
    Ответ написан
    Комментировать
  • Подключить файл с внешнего сервера в проект GIT, возможно?

    @Andy_U
    Каждый раз говорю, subtree заметно проще и безопаснее в использовании, чем module.
    Ответ написан
  • Почему Tkinter._test() в одном случае запускается а в другом нет?

    @Andy_U
    У вас, очевидно, какие-то проблемы с Xwindows. Задайте вашу ошибку, как критерий поиска в Google, и пробуйте предлагаемые варианты. Ну, и Cygwin, это не совсем Linux. Пробуйте лучше на "нормальном" Linux'е в виртуальной машине.
    Ответ написан
    Комментировать
  • VS + Python + кириллица, ошибка в консоли, как решить?

    @Andy_U
    Вот выдержка из документации к Питону 3.5.1:


    Python » 3.5.1 Documentation » The Python Standard Library » 29. Python Runtime Services » sys

    The character encoding is platform-dependent.

    Under Windows, if the stream is interactive (that is, if
    its isatty() method returns True), the console codepage is
    used, otherwise the ANSI code page.

    Under other platforms, the locale encoding is used (see
    locale.getpreferredencoding()).

    Under all platforms though, you can override this value
    by setting the PYTHONIOENCODING environment variable
    before starting Python.

    When interactive, standard streams are line-buffered. Otherwise,
    they are block-buffered like regular text files. You can override
    this value with the -u command-line option.


    Далее, текущая кодировка консоли в Windows (для России это cp866), ну и строка для ANSI получаются вот так:

    import ctypes
    
        def ansi_encoding():
            return 'cp'+str(ctypes.windll.kernel32.GetACP())
    
        def console_output_encoding():
            return 'cp'+str(ctypes.windll.kernel32.GetConsoleOutputCP())


    Еще может помочь значение sys.stdout.encoding и прочих подобных...

    Сделать консоль Windows юникодной можно командой chcp 65001.

    Теперь про Pycharm: он устанавливает environment переменную

    PYTHONIOENCODING=utf-8

    ну и консоль у него юникодная. Шрифт для консоли рекомендую DejaVu Sans Mono - единственный правильно выводит формулы из sympy.

    Про то, что текст программы должен быть в utf-8, уже писали. Строчка про encoding не обязательно, но чтобы и питон 2 и питон 3 правильно выводили текст хоть на консоль, хоть в pycharm, программа должна выглядеть так:

    # -*- encoding: utf-8 -*-
    
    from __future__ import print_function
    import sys
    
    print(sys.version)
    print(u'Здравствуй жопа, новый год!')
    Ответ написан
  • Возможен ли перехват вывода командной строки в реальном времени?

    @Andy_U
    Это решение намного красивее. Естественно, некоторая доработка напильником класса SubprocessProtocol потребуется. Я недавно проверял - работает, причем можно одновременно перехватывать и stdout, и stderr.

    P.S. На всякий случай - параметр data в pipe_data_received - это байты, поэтому его и нужно декодировать в utf-8 строку. Если под Windows и есть русские имена файлов - придется разобраться, какую кодировку использует rar. Скорее всего - cp866.
    Ответ написан
    Комментировать
  • Что за странная сортировка в TortoiseSVN?

    @Andy_U
    Очень похоже, что такие имена файлов рассматриваются, как числа, и ведущие нули игнорируются. А тогда 2001 < 2031 < 2100 и 3102 < 20011. И опять же, 4 - это очень маленькое число.
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux лучше изучить?

    @Andy_U
    Ubuntu - не советую. Там (в 15.10) уже установлены питоны версий 27.10, 3.4.3 и 3.5.0 Все из пакетов и все зачем то нужны. Т.е., питоновские пакеты/модули для них можно тоже только через apt-get ставить/обновлять (pip может все сломать, судя по StackOverflow). Установка 3.5.1 по умолчанию (configure, make, sudo make install) что-то ломает :(

    А в CentOS 7.2 хотя бы только 2.7.5 имеется из коробки, поэтому с 3.X можно развлекаться, как душе угодно. А вот 2.7.5 до 2.7.11 лучше не пытаться обновлять - в результате у меня на виртуалке сломался yum (который пользуется питоном, а в нем пакетом yum, который я нашел только в пакете, а не на PyPi) :D
    Ответ написан
  • Что лучше использовать для мультимодульного проекта: subtree или submodule?

    @Andy_U
    В первой из процитированных вами статей (от 2009 гю) говорится не о git subtree, а о subtree merge strategy. Вторая - правильная. Единственно, чего не делаю, так это не определяю subtree как remote, чтобы во всяких Git Extension лишних "хвостов" от подпроектов не повисало.

    Далее, поскольку любое обновление подпроекта через subtree pull делается ручками, а не автоматически, то вашего последнего утверждения я не понимаю. Вот сделал наконец разработчик новую версию своего модуля (длинной серий коммитов), потом в основном проекте сделал новую ветку, туда сделал pull своих окончательных изменений, проверил, что все работает, и может мержить в основную ветку. Или какой там у вас workflow? А разработчикам основного модуля и знать о subtree не надо. Вот есть поддиректория с (изменившимся) плагином - вот и пользуйтесь. Есть проблемы - обсуждайте с его разработчиком.

    P.S. И почитайте про "грабли" с submodule - по ссылке во второй статье...
    Написано только что
    Ответ написан
  • Проблема с pip3, как разобраться?

    @Andy_U
    Попробуйте и консоль и Pycharm запустить с правами администратора (клик правой кнопкой мышки, потом Run As Administrator), а потом ставить пакеты. У меня и на Windows 7 и на Windows 8.1 в этом случае все ставится куда и должно (а без прав - ругается, но в AppData/Roaming/Python, если галочку не поставить, не лезет). Про десятку ничего не скажу. Вот почему Pycharm сам не запрашивает административные права для установки пакетов, не понимаю - раздражает сильно.
    Ответ написан
    Комментировать
  • Как задать размер шрифта осей в matplotlib?

    @Andy_U
    Как-то так:

    matplotlib.rcParams.update({'font.size': 16})
    Ответ написан
    1 комментарий
  • Как устранить ошибку microsoft visual c++ 10.0 is required (unable to find vcvarsall.bat)?

    @Andy_U
    Запомните url: www.lfd.uci.edu/~gohlke/pythonlibs, где вы найдете уже скомпилированный модуль/пакет для вашей версии питона и разрядности, скачаете его и инсталлируете командой pip install file .whl (lxml там точно есть).
    Ответ написан
    5 комментариев
  • Как установить модуль в python 3?

    @Andy_U
    Пользуйтесь утилитой pip. Она вполне себе умеет "просачиваться" через прокси, даже с аутентификацией. Или вот, только что проверил - Pycharm без проблем ее (ваш patool) скачал и установил.

    P.S. Что у вас за прокси?
    Ответ написан
    7 комментариев