Задать вопрос
Ответы пользователя по тегу Python
  • Он не хочет заполнять пользователей, и я не знаю как сделать что бы заполняло почему ошибка?

    Vindicar
    @Vindicar
    RTFM!
    А с какого перепугу он должен заполнять пользователей, если на момент цикла
    for guild in bot.guilds:
        for member in guild.members:

    бот ещё не подключён к сети?
    Почитай про событие on_ready, там прямо написано:
    Called when the client is done preparing the data received from Discord. Usually after login is successful and the Client.guilds and co. are filled up.

    Т.е. только после этого события имеет смысл обращаться к списку гильдий бота.э
    Ответ написан
    Комментировать
  • Почему не видит файл?

    Vindicar
    @Vindicar
    RTFM!
    Нельзя импортировать файл, находящийся в папке уровнем выше.
    Ну, по-нормальному нельзя. Можно через задницу.
    Лучше сделай иначе: пусть бот принимает какой-то объект с настройками. Как параметр конструктора, как отдельный метод... да хоть как. Главное, чтобы сам не импортировал.
    В корневой папке проекта держи main.py, который импортирует настройки, импортирует бота, скармливает боту настройки и запускает бота. И этот main.py уже запускай.
    Ответ написан
    Комментировать
  • Как сигнализировать когда объект выходит за границы?

    Vindicar
    @Vindicar
    RTFM!
    Вопрос и впрямь не по питону, алгоритм легко портируется.
    Если нужно детектить именно пересечение любой из точек границы, и именно для круга и квадрата, то это очень просто. Уменьши квадрат, сдвинь каждую сторону внутрь на радиус круга.
    Например, у тебя был квадрат от (0;0) до (100;100), круг радиусом 10 (диаметром 20). Новый квадрат будет от (10;10) до (90;90).
    После этого проверяй, входит ли центр круга внутрь нового квадрата. Если входит - круг внутри исходного квадрата. Если центр на стороне - круг касается стороны исходного квадрата. Если центр вне нового квадрата - круг вышел за границу исходного.
    Проверка вхождения точки внутрь ортогонального (стороны параллельны осям координат) прямоугольника выполняется тривиально, сам догадаешься как.

    Есть второй способ, базируется на массивах numpy (python-opencv их использует для хранения массивов пикселей изображения).
    Делаешь два изображения-маски (одноканальных, одного размера), одно для одного объекта, другое для другого. В твоём случае одно (A) будет содержать белый круг на чёрном фоне, а другое (B) - чёрный квадрат на белом фоне.
    Тогда можно будет сделать так:
    intersection = numpy.logical_and(A, B)
    if intersection.any():
        print('Collision!')

    logical_and() вернёт логический массив того же размера, что A и B. Элемент массива будет истиннен только если соотвествующие элементы в A и B будут ненулевыми.
    Таким образом, если два объекта пересекаются, то logical_and() вернёт True для пересёкшихся пикселей.
    А метод any() вернёт True если любой элемент массива истинен, т.е. если есть хоть один пересёкшийся пиксель.

    Этот метод куда более ресурсоёмкий, чем то что я описал в выше,но зато работает для объектов произвольной формы. Только нарисуй их.
    Кроме того, можно сделать numpy.count_nonzero(intersection), чтобы узнать, насколько велико пересечение (сколько пикселей в нём). Это тоже может быть полезно если ты хочешь "прощать" небольшие пересечения.
    Ответ написан
    2 комментария
  • Python SQLite как правильно сделать выборку?

    Vindicar
    @Vindicar
    RTFM!
    Хранишь отдельно строку запроса и отдельно список значений.
    Инициализируешь строку запроса SELECT * FROM table WHERE (1 = 1) - тогда у тебя будет корректный запрос и при наличии, и при отсутствии параметров.
    Затем для каждого параметра проверяешь, если он был передан - к строке запроса добавляешь f'AND ({paramname} = ?)' (где paramname это имя параметра), а в список значений добавляешь в конце значение этого параметра. Если не передан - не делаешь ничего.
    Тогда у тебя в конце будет строка вида
    SELECT * FROM table WHERE (1 = 1) AND (b = ?) AND (c = ?)
    , и к ней список значений, которые sqlite должна будет подставить вместо ?. Читай документацию на метод execute(), как это сделать.
    Ответ написан
    1 комментарий
  • Почему бот не видит сообщения?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не думаешь, что пишешь.
    msg = event.text.lower()
    Ты переводишь сообщение в нижний регистр...
    if msg == "Старт" or msg == "Меню":
    ...а сравниваешь со строкой не в нижнем. Конечно, она никогда не будет равна.
    Ответ написан
    3 комментария
  • Как спарсить номер телефона если блок закрыт?

    Vindicar
    @Vindicar
    RTFM!
    Ну так а ты что хочешь - сайт защищается от парсеров. Вроде твоего, да.
    Варианта два:
    1. Выясняй, хранится ли телефон в странице (если да, то где?) или подгружается (если да, то куда нужно отправить запрос?). Если телефон хранится/передаётся зашифрованным, выясняй, как сайт его расшифровывает, потом реализуй этот же алгоритм сам.
    2. Успешно притворись браузером, пусть сайт сам всё сделает. Т.е. опять селениум.
    Ответ написан
  • Как записывать информацию в CSV каждый раз с новой строки?

    Vindicar
    @Vindicar
    RTFM!
    А ещё лучше - освой модуль csv, он простой и удобный.
    Ответ написан
    Комментировать
  • Как обновлять изображение OpenCV Python?

    Vindicar
    @Vindicar
    RTFM!
    1. Если интервал обновления известен, и некоторая задержка между обновлением файла и обновлением видимой картинки не критична, то просто заворачиваешь код в цикл while с нужной задержкой. Для задержки можешь использовать параметр waitKey(), это задержка в миллисекундах.
    2. Если обновление нерегулярное, а обновлять изображение нужно немедленно по изменению файла, то ставь пакет watchdog, он позволяет реагировать на изменение файла.
    Ответ написан
    Комментировать
  • Как с помощью лямбда функции изменить значение в словаре?

    Vindicar
    @Vindicar
    RTFM!
    про update() уже написали, от себя добавлю dict_.__setitem__('a', 10)
    Ответ написан
    Комментировать
  • Как удалить последнюю запятую в списке?

    Vindicar
    @Vindicar
    RTFM!
    Открой для себя метод str.join() и генераторные выражения
    ",".join( f"'{n}'" for n in glob.iglob(...) )
    Я надеюсь, в имени файла у тебя не попадётся апострофов.
    Ответ написан
    9 комментариев
  • Можно ли задать размеры и расположение консольного окна при запуске через subprocess на python?

    Vindicar
    @Vindicar
    RTFM!
    По-простому - нет. Можно через задницу, т.е. через WinAPI.
    Лучше напиши, зачем тебе это - может, проще не использовать консоль?
    А мне по-простому и не интересно

    * используй ctypes для работы с функциями winapi
    * Функция WINAPI EnumWindows() чтобы найти все окна в системе
    * Функция WINAPI GetWindowThreadProcessId() чтобы узнать ID процесса, которому принадлежит окно.
    * таким образом ищешь дескриптор окна своего дочернего процесса
    * Функции WINAPI SetWindowPos() + SetWindowSize(), чтобы позиционировать найденное окно

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

    Vindicar
    @Vindicar
    RTFM!
    Смотришь заголовки ответа, в частности заголовок Content-Length. Он содержит длину содержимого в байтах. Имей ввиду, его присутствие не гарантируется (хотя сейчас почти все его отправляют).
    Ответ написан
    Комментировать
  • Как указать тип переменной?

    Vindicar
    @Vindicar
    RTFM!
    Не очень ясно, что требуется.
    Если тебе требуется помещать в эту переменную экземпляры класса Language, то пишешь compiler: Language

    Если же у тебя есть набор строковых значений, которые там могут быть, оформи их как enum.Enum и пропиши этот класс.
    class CompilerEnum(enum.Enum):
        C = 'C'
        CPP = 'C++'
        ADA = 'Ada'
        FORTRAN = 'Fortran'
    
    class ApiCallData(t.NamedTuple):
        code: str
        compiler: CompilerEnum
        stdin: str


    Это подразумевает, что ты знаешь список языков на момент запуска скрипта.
    Если это не так, то статическая типизация не поможет, тебе придётся прописывать тип str и проверять корректность вручную.
    Ответ написан
    Комментировать
  • Хочу написать функцию (python) по изменению какого элемента списка массивов(np.array) со списками, но выдает ошибку, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    for a in self.weights a будет не индексами, а элементами списка. В твоём случае - массивами numpy. Аналогично
    for b in a: будет не индексами строк массива, а самими строками
    for c in b: будет не индексами столбцов, а значениями ячеек. Так что
    self.weights[a][b][c] получит вместо чисел-индексов массивы и сойдёт с ума.

    А вообще, то что ты пытаешься сделать, делается тривиальнейше.
    x = np.randint(-1000, 1000, size = (2, 3), dtype=np.float32)  # массив случайных чисел, две строки, три столбца
    x /= 100.0  # делим поэлементно на сто

    В список завернёшь сам, хотя я не понимаю почему список, а не еще одно измерение в массиве.
    Ответ написан
    Комментировать
  • Противоположность not?

    Vindicar
    @Vindicar
    RTFM!
    if bbb:
    Сработает, но не всегда.
    Нужно иметь ввиду, что истинность в питоне - штука расплывчатая. Например:
    0, 0.0 - ложны, ненулевые числа - истинны.
    пустая строка - ложна, непустая строка - истинна
    пустой список / словарь / множество - ложны, непустые - истинны
    None ложно всегда.

    А вот для других классов результат не всегда однозначен.
    Если класс описывает для себя понятие ложности и истинности (определяет метод __bool__()), то он может сам решать, когда его экземпляр будет ложным, а когда истинным (так же как это делает список).
    Если же класс это не описывает, его экземпляры всегда истинны.
    Ответ написан
    1 комментарий
  • Как вытащить все белые объекты и измерить их белизну OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Преобразуй кадр в цветовую систему HSV, ищи пиксели, у которых канал Saturation ниже заданного порога (т.е. они более-менее серые), а канал Value выше заданного порога (т.е. они более-менее яркие). По полученной маске уже отбирай пиксели для анализа.

    Либо можно схитрить, если использовать более сложный эталон, например, шахматную доску. cv2.findChessboardCorners() позволит найти координаты углов *внутри* доски известного размера, например, для доски 8х4 нужно указывать размер 7х3. Найди крайние угловые точки, извлеки этот кусок кадра. На нём точно будут только светлые и тёмные пиксели твоего эталона, чей цвет ты контролируешь. Прогони пороговое преобразование алгоритмом Otsu (есть в опенцв из коробки), получишь маску светлых пикселей. Их уже анализируешь.
    Ответ написан
    5 комментариев
  • Как вставить данные в строку Python?

    Vindicar
    @Vindicar
    RTFM!
    Фигурная скобка в начале строки (и в пачке других мест) тебя не смутила? Заэкранируй её.
    Ну или просто используй старый стиль форматирования, через %. В нём фигурные скобки не являются спецсимволами.
    Ответ написан
  • Как подключить к mysql по SSH спомощью библиотеки aiomysql?

    Vindicar
    @Vindicar
    RTFM!
    Что ты вообще подразумееваешь под "подключиться к mysql по SSH"? Сделать проброс порта через SSH, чтобы достучаться до сервера БД, который иначе не доступен?
    Так это не задача либы mysql вообще. Либо держи SSH-туннель поднятым отдельной программой, либо используй специализированную библиотеку типа sshtunnel. В обоих случаях отдавай aiomysql тот локальный порт, на котором заканчивается твой SSH-туннель.
    Ответ написан
  • Как сделать так, чтобы цикл не прерывался при срабатывании alarm clock?

    Vindicar
    @Vindicar
    RTFM!
    если код выполняется дольше n секунд

    Вынеси выполняемый код в отдельный процесс через multiprocessing, по истечении таймаута либо оставляй процесс "как есть", либо убивай принудительно.
    В противном случае ты скорее всего не сможешь принудительно завершить код, который делает неизвестно что, и при этом не оставить программу в непредсказуемом состоянии.
    Ответ написан
    Комментировать