Ответы пользователя по тегу Python
  • Как прервать цикл в ивенте on_message?

    Vindicar
    @Vindicar
    RTFM!
    discord.py?
    on_message() отрабатывает на ВСЕ сообщения, в т.ч. сообщения от самого бота. Проверяй отправителя сообщения.
    И да, этот момент есть в документации discord.py. Советую её почитать.
    Ответ написан
    Комментировать
  • Как правильно задать json файл?

    Vindicar
    @Vindicar
    RTFM!
    Без примера входных данных смысла решать задачу нет. Пинайте тьютора/поддержку Яндекса, пусть дадут пример файла.
    Конечно, можно попробовать хакнуть систему таким образом:
    with open('input.json', 'rt') as src:
        raise ValueError(src.read())

    Если бот яндекса сообщает текст ошибки, может, удастся таким образом выковырять JSON текст целиком, или хотя бы его часть.
    Альтернативно, можно поковырять так:
    with open('input.json', 'rt') as src:
        data = json.load(src)
    raise ValueError(repr(type(data)))  # вернёт скорее всего <type 'list'>. Закомментируешь эту строку и делаешь:
    raise ValueError(repr(data[0]))  # ну и так далее пока не поймешь, что за структуру данных тебе подсовывают.
    Ответ написан
    1 комментарий
  • Как найти экстремальные значения списка (не максимального и минимального значения в списке) а последовательных экстремальных значений макс/мин?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. для каждого максимума нужно найти такой последующий минимум, чтобы разница между максимумом и минимумом была наибольшей, так? И затем нужно найти наибольшую из всех таких разниц, и соответствующие ей элементы?
    Я бы сделал это примерно так. Не уверен, что сработате сразу, но надеюсь что идея передана.
    equity_result1 = [ ... ]  # твои данные - значения эквити во времени
    # определяем индексы таких элементов, которые больше своих соседей слева и справа.
    local_max_idx = [ i for i in range(1, len(equity_result1) - 1) if equity_result1[i-1] < equity_result1[i] and equity_result1[i+1] < equity_result1[i] ]
    # определяем минимумы для интервалов, следующих за соотв. локальным максимумом
    local_min = [ min(equity_result1[i+1:]) for i in local_max_idx ] 
    # определяем индексы этих минимумов в списке equity_result1 
    local_min_idx = [ i+1+equity_result1[i+1:].index(minval) for i, minval in zip(local_max_idx, local_min) ] 
    # собираем сведения о "перепадах" в один список пар индексов (максимум, минимум)
    differences = list(zip(local_max_idx, local_min_idx))
    # ищем наибольший "перепад" по критерию "разность между значением максимума и минимума"
    i_max, i_min = max(differences, key = lambda item: equity_result1[item[0]] - equity_result1[item[1]])
    # интересующий тебя интервал - между i_max и i_min включительно


    Не сообразил сразу, но код кривой - если у тебя искомый максимум это начальный элемент equity_result1, код его не увидит.
    Ответ написан
    Комментировать
  • Как сравнить местоположение слов в строке python?

    Vindicar
    @Vindicar
    RTFM!
    Любой метод поиска подстроки в строке (хоть str.index(), хоть регулярные выражения) возвращает позицию найденного слова.
    Нашёл позицию одного слова, нашел позицию другого, сравнил два числа.
    Ответ написан
    Комментировать
  • Что тут не так?

    Vindicar
    @Vindicar
    RTFM!
    Потому что в отданном тексте странице не нашёлся элемент form.
    Сохрани req.content в файл и посмотри сам, есть ли он там.
    Ответ написан
    3 комментария
  • Как сделать асинхронный цикл while true?

    Vindicar
    @Vindicar
    RTFM!
    sleep(10)
    Дай угадаю, from time import sleep?
    Если так, то:
    1. Почитай, как работают асинхронные программы
    2. Осознай свой косяк
    3. Замени time.sleep(10) на await asyncio.sleep(10)
    Ответ написан
    Комментировать
  • Как создать соединение через интернет, а не через имитатор локальной сети?

    Vindicar
    @Vindicar
    RTFM!
    В базовом случае у сервера должен быть внешний IP и открыт соответствующий порт.
    Если сервер за подконтрольным NAT (например, роутером), то порт должен быть проброшен через NAT.
    Если сервер за провайдерским NAT (который пользователю неподконтролен), то тут уже сложнее. Есть техники NAT traversal, но они не вполне тривиальны и обычно требуют наличия вспомогательного узла с внешним IP.
    Ответ написан
    Комментировать
  • Как вынести из переменной само название переменной?

    Vindicar
    @Vindicar
    RTFM!
    Никак. Переменная - это просто именованная ссылка на объект.
    И одна переменная не знает про остальные. Можно узнать число ссылок на объект, но их имена в общем случае узнать нельзя. Есть частный случай, показанный EugeneKh, который работает, если ты знаешь пространство имён, где могут лежать искомые ссылки. Но тут вообще впору задаться вопросом "а зачем тебе это?".

    Также есть такая вещь как предварительное выделение (interning) типовых объектов.
    Иными словами:
    >>> a = -100
    >>> b = -100
    >>> a is b
    False
    >>> a = 100
    >>> b = 100
    >>> a is b
    True

    Потому что объекты int для некоторых часто встречающихся чисел выделяются уже при старте питона, и все упоминания этих чисел просто ссылаются на них. И да - это зависит от интерпретатора.
    Так что для примитивных типов такой подход не сработает.
    Ответ написан
    1 комментарий
  • Как вычислить ошибку при сериализации json?

    Vindicar
    @Vindicar
    RTFM!
    collection_handle : JSON.stringify(\'["good1...........

    это не JSON, это кусок javascript кода.
    Ответ написан
    Комментировать
  • Как преобразовать число в список из 32 битных целых чисел на Python?

    Vindicar
    @Vindicar
    RTFM!
    Требуется список ID сообщений, которые будут подвергаться какой-то обработке.
    Список из одного элемента - это тоже список.
    Ответ написан
    Комментировать
  • Как сократить/оптимизировать код?

    Vindicar
    @Vindicar
    RTFM!
    1. Вместо mssX сделай список списков.
    field = [ ['_'] * 3, ['_'] * 3, ['_'] * 3 ]
    2. Для хода бота пройдись по полю, составь список координат, куда можно ходить. Потом выбирай рандомом из этого списка.
    3. Проверку победы гораздо проще заменить на цикл. Соберём все элементы вдоль линии (вертикаль, горизонталь, диагональ) и посмотрим сколько разных элементов нашли. Если только 1 элемент, и это НЕ "_", то игрок с этим элементом победил.
    for i in len(field):  # перебираем элементы поля
        values = { field[i][c] for c in len(field[i]) }  # собираем символы i-й строки в _множество_
        if len(values) == 1 and '_' not in values:  # есть строка из одинаковых символов, но не из "_"
            return field[i][0]  # возвращаем символ-победитель
        values = { field[r][i] for r in len(field) }  # собираем символы i-го столбца
        if len(values) == 1 and '_' not in values:  # есть столбец из одинаковых символов, но не из "_"
            return field[0][i]  # возвращаем символ-победитель

    По аналогии сделаешь диагонали.
    Ответ написан
    4 комментария
  • Почему float округляет до целого, не воспринимая экспоненты?

    Vindicar
    @Vindicar
    RTFM!
    float(i[0])
    Ты выбираешь нулевой (т.е. начальный) символ строки, и только его превращаешь в число, игнорируя остальные.
    Как следствие, у тебя '5.615780770566875e-5' обрезается до '5'.
    Как чаще всего и бывает, компьютер делает именно то, что ты просишь, а не то, что ты хочешь.
    Ответ написан
    2 комментария
  • Почему не получается открыть файл для записи?

    Vindicar
    @Vindicar
    RTFM!
    Длина полного (т.е. от корня) пути к файлу ограничена на многих системах. Попробуй дать файлу более короткое имя, или переместить его ближе к корню файловой системы.
    Ответ написан
  • Как отследить и скопировать изменённый файл через модуль watchdog?

    Vindicar
    @Vindicar
    RTFM!
    Класс Observer запускает отдельный поток исполнения, твой time.sleep(10) на него не влияет никоим образом.
    Т.е. по идее приложение будет реагировать на изменение файла немедленно.

    Из вопроса неясно, происходит ли вызов обработчика вообще. Уточни.
    Имей ввиду, что операции с файловой системой - штука ненадёжная. Лови исключения, выброшенные shutil.copyfile(), и логгируй их!
    Ответ написан
    3 комментария
  • Как ускорить вывод в консоль Python?

    Vindicar
    @Vindicar
    RTFM!
    Не выводить в консоль так часто.
    Ответ написан
    Комментировать
  • Почему не отправляется изображение?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не читаешь, что пишешь.
    text = '999'
    draw = ImageDraw.Draw(text)

    Конструктор Draw() принимает изображение, на котором надо рисовать, а ты ему какую-то строку подсунул. Вот он и ругается,
    AttributeError: 'str' object has no attribute 'getdraw'
    Ответ написан
    Комментировать
  • Как в OpenCV сделать постройку грида с обновляемыми фото?

    Vindicar
    @Vindicar
    RTFM!
    Изображение в opencv-python - это numpy массив, там можно обновлять области с помощью срезов.
    Например, прямоугольная область с левым верхним углом (X;Y) и размером W x H обновляется тривиально:
    image[Y:Y+H, X:X+W] = new_content
    При этом подразумевается что new_content имеет размер W x H и такое же число каналов.

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

    Vindicar
    @Vindicar
    RTFM!
    area = matrix_new[100:200, 100:200]  # это делает ссылку на область массива, а не копию области!
    area[area == 250] = 255  # так что когда мы изменяем эту область, оригинал изменится.

    Должно работать быстрее, так как цикл прохода по массиву реализован внутри numpy, а не в рамках интерпретатора питона.
    Но будет есть память, если массив большой.
    Ответ написан
    3 комментария
  • Как добавить значение в базу данных?

    Vindicar
    @Vindicar
    RTFM!
    Я подозреваю, что создалась у тебя не таблица, а файл базы данных.
    Что бы создать таблицу, используй db.create_tables([Character])
    Ответ написан
    Комментировать
  • Как сделать что бы айди пользователя был как пинг?

    Vindicar
    @Vindicar
    RTFM!
    1. Перепиши заголовок метода:
    async def cuddle(self, ctx, member: discord.Member=None):

    Тогда discord.py сам попытается найти пользователя, соответствующего аргументу команды.
    2. Используй метод member.mention().
    3. ???
    4. PROFIT

    А вообще такая команда имеет смысл только для тренировки.
    Ответ написан