Задать вопрос
  • Как открыть ssh туннель на python?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри в сторону Parallel-SSH, в частности под-модуля NativeTunnel. Но насколько я понимаю, с туннелями всегда морока.
    Ответ написан
  • Как произвести деплой бота дискорд используя коги?

    Vindicar
    @Vindicar
    RTFM!
    locale.Error: unsupported locale setting
    Передал в locale.setlocale() неверное/неизвестное имя локали.

    locale.setlocale(0, "ru-ru")
    ЧТД. Локаль правильно называется "ru_ru".

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

    Vindicar
    @Vindicar
    RTFM!
    Если аргумент None, означает ли это, что должно использоваться некоторое значение по умолчанию? Если да, то можно вынести if по этому аргументу отдельно, а дальше вести себя так, словно аргумент задан.

    Если же нет, то стоит спросить себя - а не слишком ли много эта функция на себя берёт? Не стоит ли её разделить на несколько?
    Ответ написан
    Комментировать
  • Как найти значения производных созданного массива numpy в python?

    Vindicar
    @Vindicar
    RTFM!
    Что такое производная функции, знаешь?
    Ну вот представь, что массив - это набор значений функции в последовательных точках.
    Правда, остаётся вопрос, какой шаг брать - т.е., насколько по оси X отстоят друг от друга нулевой элемент и первый элемент. Простейший случай - считаем координатой X индекс элемента в массиве. Но тогда производная вообще считается тривиально, так как расстояние по X между соседними точками будет равно 1. В приведённом тобой примере шаг (dx) выбирается случайно.

    В примере кода приведён простейший способ расчёта производной по двум точкам. Он прост, хотя и чувствителен к погрешностям. Есть и другие.
    Ответ написан
    2 комментария
  • Как исправить ошибку в коде Python?

    Vindicar
    @Vindicar
    RTFM!
    А почему так много аргументов subprocess.Popen()?
    "powershell putty.exe ", login, "@", name_server, " -pw", password, - 6 штук.
    В документации четко написано: "args should be a sequence of program arguments or else a single string or path-like object. "
    А также:
    class subprocess.Popen(args, #и так далее
    args без звёздочки, так что это должен быть ОДИН аргумент. Т.е. коллекция строк, например, список.
    Ответ написан
  • Как сделать приветствие в боте дискорд?

    Vindicar
    @Vindicar
    RTFM!
    Правильно говорит. Имя функции с точкой типа "discord.on_member_join" в Питоне допустимым не является. Подучи сначала основы Питона, потом бросайся писать ботов.
    Ответ написан
    2 комментария
  • Здравствуйте. Как правильно написать функцию для определения типа данных при создании таблицы в sqlite3?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала не пытаться засунуть запрос в одну f-строку, а собирать его по частям. Нечитаемо же. И зачем тебе @staticmethod, если это не часть класса? А если часть класса, то почему staticmethod, а не classmethod - ты же обращаешься к константе data_type, которая должна быть в том же классе, не?
    А вообще, у меня такое чувство что ты пытаешься сделать свою ORM. Попробуй погоняй ponyorm или peewee, они простые и удобные.
    Ответ написан
    Комментировать
  • Как разрешить нажимать на реакцию одному пользователю?

    Vindicar
    @Vindicar
    RTFM!
    Хранить коллекцию вида "сообщение-автор", реагировать на проставление реакции, удалять реакцию если автор реакции не совпадает с заданным для этого сообщения.
    Ответ написан
    Комментировать
  • Возможно ли сделать стрим в видео звонок телеграм?

    Vindicar
    @Vindicar
    RTFM!
    Гипотетически - да. Но не факт, что есть готовые решения, и тем более конкретно для ноды. Нужно смотреть используемую вами библиотеку для телеги, поддерживает ли она видео-звонки, и если да, что в каком виде она принимает видеопоток. Если это что-то абстрактное, то возможно, удастся завернуть видео из стрима в этот формат и скармливать телеге понемножку. Если же требуется доступ именно к вебкамере, то тогда искать реализацию виртуальной вебкамеры.
    Ответ написан
    1 комментарий
  • Как можно реализовать фильтрацию текста на python?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых - это будет соревнование брони и снаряда, т.к. пользователи будут пытаться обходить ваш блэклист. Так что не ожидайте, что решение будет "раз и навсегда".
    Во-вторых, должно ли сообщение содержать хоть одно слово из белого списка, чтобы быть пропущенным? Не очень ясно, что вы имели ввиду под белым списком.
    В-третьих, и сообщение, и элементы фильтра должны подвергаться предварительной нормализации. Речь не только о приведении к регистру, но и работе с омографами (простейший случай - русское и латинское "о"), а также удалении некоторых символов (например, символ невидимого пробела или комбинаторные символы). Можно решить, заменяя перед проверкой разные символы на простейший омограф, например, русское о на латинское - как в сообщении, так и при подготовке черного и белого списков.
    В-четвёртых, нужно подумать о ложных срабатываниях. Грубо говоря, если мы не удаляем пробелы, пользователю достаточно написать "б л я" чтобы обойти нашу систему. Если удаляем, "гребля" будет давать ложное положительное срабатывание. Если занесём "гребля" в белый список и сделаем так, чтобы оно имело приоритет перед пересекающимся словом из чёрного списка - то тогда будет ложное отрицательное срабатывание на "игре бля". Разумеется, список слов зависит от контекста сообщений, но его составление будет долгим итерационным процессом.

    С учётом вышесказанного -
    1. нормализовать строку,
    2. проверить вхождение подстрок из чёрного списка,
    3. если они есть - проверить, есть ли вхождения подстрок из белого списка, пересекающиеся с вхождениями чёрного.
    4. убрать из рассмотрения все пересекающиеся вхождения чёрного списка
    5. если остались вхождения из чёрного списка - реагируем на сообщение как на нежелательное. Иначе считаем его допустимым.
    Ответ написан
    Комментировать
  • Почему не находит атрибут .group?

    Vindicar
    @Vindicar
    RTFM!
    Потому что надо не только прочитать сообщение об ошибке, но и понять его.
    Тебе английским по черном говорят, что ты пытаешься взять атрибут (в данном случае вызвать метод) у объекта типа None.
    Иными словами, re.search() тебе вернуло None.
    А когда это случается? Открываем документацию и читаем. Если коротко, строка в first_m не соответствовала указанному регулярному выражению.
    Ответ написан
    Комментировать
  • Как создать список треков?

    Vindicar
    @Vindicar
    RTFM!
    > upcoming.index(_)
    Попробуй использовать enumerate() для нумерации элементов списка (или иной коллекции).
    Ответ написан
    Комментировать
  • Как произвести вывод промежуточных результатов вычисления в элемент tkinter?

    Vindicar
    @Vindicar
    RTFM!
    В большинстве случаев, когда изменяешь элемент управления, он не перерисовывает себя немедленно - он только принимает к сведению, что ему нужно будет перерисовать себя при первой возможности. А первая возможность ему представится, когда твой обработчик calc() закончит работу.

    Поэтому есть пара вариантов.
    1. вызывать внутри цикла в calc() root.update_idletasks(). Это приостановит твой обработчик и даст шанс элементам управления отрисоваться, а потом возобновит выполнение.
    2. Разбить обработчик на отдельные короткие (это важно!) итерации. В конце каждой итерации планировать выполнение следующей с помощью root.after(), если требуется. Тогда в промежутках между завершением текущей итерации и вызовом запланированной следующей ткинтер будет успевать отрисовываться.

    В обоих случаех следует предусмотреть/проверить, что будет если нажать на кнопку дважды. Я подозреваю, ничего хорошего, так что кнопку стоит отключить на время выполнения обработчика.
    Ответ написан
    4 комментария
  • При использовании range( ), через N-ное количество циклов падает скорость?

    Vindicar
    @Vindicar
    RTFM!
    reversed(range(250))
    Зачем? Чем не устроил range(249, -1, -1)?

    Далее, ты и в up() и в down() в цикле создаёшь раз за разом один и тот же объект, а потом забываешь про него. Зачем устраивать разминку для сборщика мусора? Создай объект 1 раз и модифицируй его - либо в глобальной переменной, либо (лучше) в классе.
    Ответ написан
    Комментировать
  • Как из базы данных получить все значения столбца в список?

    Vindicar
    @Vindicar
    RTFM!
    Если используешь для работы с базой движок sqlite3, то будет как-то так
    con = sqlite3.connect("mydb.sqlite") #подразумеваю, что таблицу ты уже создал
    cur = con.cursor()
    cur.execute("SELECT id FROM users")
    ids = [row['id'] for row in cur]

    Только если данных много, такой запрос может съесть много памяти.
    Так что встречный вопрос: а тебе зачем выбирать всю таблицу? Может, всё-таки нужно отфильтровать часть записей?
    Ответ написан
    Комментировать
  • Как обработать изображение через CV2?

    Vindicar
    @Vindicar
    RTFM!
    Непонятно, что именно ты пытаешься сделать.
    Если просто перевести скриншот в другое цветовое пространство, то вот этих двух строчек
    image = pyautogui.screenshot(region=(514, 495, 264, 12))
    image = cv2.cvtColor(np.array(image), cv2.COLOR_BGR2GRAY)
    должно хватить.
    Дальше crop лучше делать средствами cv2, благо для этого достаточно средств numpy-массивов (а именно так cv2 хранит изображения).
    Ответ написан
  • Последовательность чтения кода браузером?

    Vindicar
    @Vindicar
    RTFM!
    Percivald, ты не понимаешь.
    Тут три действия, а не два.
    1. Запланировать показ текущего значения изменяемого объекта planet (console.log() делает именно это!)
    2. Изменить значение объекта planet
    И спустя некоторое (пусть и небольшое) время
    3. Отобразить текущее значение изменяемого объекта planet.
    Не важно, в каком порядке выполняются 1 и 2, к момент выполнения 3 значение planet уже будет изменено.

    А вот если выводить строку, например, innerHTML, ситуация изменится, потому что строки не изменяемы!
    И тогда будет так:
    1. Запланировать показ объекта-строки, которая в настоящий момент находится в объекте planet.
    2. Сменить содержимое planet на другое. Старая строка при этом не пропадает, так как её показ уже запланирован. Про новую строку консоль ничего не знает.
    И спустя время
    3. Показать в консоли запланированный объект-строку.

    Иными словами, в первом случае содержимое объекта planet читается на шаге 3, где оно уже изменилось. Во втором случае, значение строки, которую мы взяли из planet, тоже читается на шаге 3 - но тот факт, что внутри planet эта строка была заменена на другую, ни на что не влияет.

    Вот, на пальцах:
    Вариант 1
    611443763c478362532846.png

    Вариант 2
    6114439e7363a433817881.png
    Ответ написан
    1 комментарий
  • Как получить список все классов из текущего файла?

    Vindicar
    @Vindicar
    RTFM!
    Нужно знать имя модуля. Для основного скрипта (который непосредственно выполняешь) это будет '__main__'. ЕМНИП это имя можно узнать из магической переменной __name__.

    import sys
    
    def enum_classes(module_name: str = __name__):
      module = sys.modules[module_name]
      return [v for v in vars(module).values() if type(v) is type and v.__module__ == module_name]


    Первая часть условия отсеет всё, кроме классов. Вторая по идее отсеет то, что попало в пространство имён через импорт типа "from X import Y".
    Ответ написан
    Комментировать
  • Python sqlite как обновить запись в базе?

    Vindicar
    @Vindicar
    RTFM!
    Убери кавычки вокруг последнего "?". В текущем варианте ты обновляешь баланс пользователя с именем "?", т.е. подстановка из переменной не происходит.
    И да, как посоветовали выше - проверь, что у тебя в переменных money и user перед запросом.
    print('Money:', repr(money))
    print('User:', repr(user))
    repr() выведет строку как строковую константу в питоне, т.е. можно будет увидеть обычно невидимые символы, которые могут присутствовать. Например, пробелы в конце строки.
    Ответ написан
    Комментировать