Задать вопрос
Ответы пользователя по тегу Python
  • Как создать интерфейс на питоне в браузере?

    Vindicar
    @Vindicar
    RTFM!
    Тебе, по-сути, нужно разработать локально работающий сайт.
    Погугли в сторону django, например.
    Хотя для очень простых вещей можно обойтись и встроенным HTTP сервером питона, с ним не очень удобно работать.
    Ответ написан
  • Куда всунуть аргумент self?

    Vindicar
    @Vindicar
    RTFM!
    Для начала, что такое main() - метод или свободная функция? Если метод, метод вызывается как self.main(). Это азы синтаксиса Питона, их нужно знать прежде чем бросаться воевать с Ткинтером.
    Во-вторых, зачем лямбда? Если метод не требует параметров, то можно указать просто self.main без скобок. Лямбда нужна, если параметры, передаваемые кнопкой, не совпадают с параметрами, требуемыми методом.
    Ответ написан
    6 комментариев
  • Как в discord.py сделать чтобы создатель сервера мог указывать роли для команд?

    Vindicar
    @Vindicar
    RTFM!
    Нужна база данных, так как эту информацию нужно будет сохранять при перезапуске бота.
    Если задача стоит как "укажите, какая роль будет модератором", то тогда в базе должна быть таблица, где сопоставляется ID сервера и ID роли.
    Тогда алгоритм задания роли будет такой:
    1. Проверяем, что отправивший команду является владельцем сервера.
    2. Определяем ID сервера.
    3. Вытаскиваем из параметров команды название роли.
    4. Перебираем роли на сервере, ищем роль с таким названием, запоминаем её ID.
    5. Помещаем пару сервер-роль в таблицу БД. Для обычной базы данных на основе SQL (вроде строенной питоновской sqlite) хорошо использовать запрос вида INSERT ... ON CONFLICT UPDATE ... - это позволит не париться, была ли уже задана роль модератора для этого сервера.

    Алгоритм проверки роли будет такой:
    1. Получаем ID сервера, на котором была отправлена команда.
    2. Получаем ID роли отправителя команды.
    3. Проверяем, есть ли в таблице строка с такой парой сервер-роль.
    4. Если есть, разрешаем выполнить команду.

    В качестве упражнения для обучения это хорошая идея.
    С практической точки зрения - это абсолютно бесполезно, потому что роль с правами модератора может кикать и банить по правому щелчку мыши по юзеру, безо всяких ботов.
    Ответ написан
    Комментировать
  • Как описать обработку исключения при неудачной попытке подключения к IP-камере?

    Vindicar
    @Vindicar
    RTFM!
    1. OpenCV умеет работать с четырьмя источниками видео: видеофайл, набор файлов-кадров, подключённая камера, видеопоток по сети. На втором скриншоте ошибка про CAP_IMAGES намекает, что OpenCV пытается интепретировать URL во втором режиме вместо четвёртого. Стоит указать дополнительный параметр конструктора VideoCapture, задающий режим открытия источника видео.

    2. API OpenCV довольно непоследователен в своей сигнализации ошибок, и выбрасывает исключения только если скормить функции некорректные данные. Ситуации типа некорректного формата изображения сигнализируются возвращаемыми значениями. В вашем случае всё, что остаётся - подождать пару секунд, периодически опрашивая isOpened(). Если она не вернула истину по окончанию интервала, считаем попытку неудавшейся. Альтернатива - пытаться перехватывать сообщенеи в консоль, оно, похоже, выводится стандартным модулем logging. Но это тот ещё хак.

    3. Точный URL зависит от вида и конфигурации ПО, которое используется для web-стриминга. Заранее не узнаешь. Максимум - можно попытаться нагуглить URL по умолчанию для наиболее популярных версий такого ПО и пробовать их по очереди.
    Ответ написан
  • Почему Kivy выдает ошибку при запуске программы?

    Vindicar
    @Vindicar
    RTFM!
    Гугл нашел issue на гитхабе kivy. Последний пост от февраля этого года указывает на необходимость добавить пару каталогов в переменную окружения PATH, примерно так.
    # you must add to the path the location of your SDL2 binaries
    os.environ['PATH'] += ';' + os.path.expandvars('%AppData%\\Python\\share\\glew\\bin')
    os.environ['PATH'] += ';' + os.path.expandvars('%AppData%\\Python\\share\\sdl2\\bin')


    Однако выше упоминается, что это необходимо только если питон установлен по нестандартному пути. Также стоит проверить, установлен ли питон от админа (для всех пользователей) или нет.
    Ответ написан
    Комментировать
  • Что означает Non-UTF-8 code starting with '\xff'?

    Vindicar
    @Vindicar
    RTFM!
    Если скрипт содержит кириллицу или иной юникод (пусть даже в комментариях или в строках), первая строка файла должна содержать указание кодировки. У тебя, я полагаю, кодировка виндовая, windows-1251. Либо укажи её явно, либо пересохрани файл в UTF-8.
    Ответ написан
  • Почему слетает кодировка?

    Vindicar
    @Vindicar
    RTFM!
    Читай документацию на json.dump(), точнее на параметр ensure_ascii.

    If ensure_ascii is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If ensure_ascii is false, these characters will be output as-is.
    Ответ написан
    2 комментария
  • Как отправить post запрос с изменяющимися данными?

    Vindicar
    @Vindicar
    RTFM!
    Разобраться как они генерируются и сгенерировать самому. Без вариантов.
    Ответ написан
  • Почему сначала заканчивается func1, а уж потом выводит, что func1 началась?

    Vindicar
    @Vindicar
    RTFM!
    t = threading.Thread (target = func1())
    Ты запускаешь поток, в качестве тела которого указываешь то, что вернула после вызова func1.
    Это None, и поток ничего не делает.
    Исправь на
    t = threading.Thread (target = func1)
    Нужно запомнить разницу:
    func1 - ссылка на функцию
    func1() - результат вызова функции без параметров
    Ответ написан
    Комментировать
  • Как одной строчкой вызвать методы из всех экземпляров класса?

    Vindicar
    @Vindicar
    RTFM!
    Храни все экземпляры в списке, итерируй по списку.
    Ответ написан
    Комментировать
  • Можно ли сократить код с помощью numpy?

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

    Vindicar
    @Vindicar
    RTFM!
    Иконка должна быть в формате ico, а не jpg, и иметь строго определённый размер (типовые размеры 16х16, 32х32, 64х64, 128х128).
    Если нет ico файла, также допустимо выдрать иконку из exe или dll файла, что pyinstaller и пытается сделать. Безуспешно, так как вы дали ему jpg.
    Ответ написан
    2 комментария
  • Как убрть служебный импорт?

    Vindicar
    @Vindicar
    RTFM!
    Переименовать свой файл, чтобы имя не совпадало со встроенными модулями. Их список известен.
    Ответ написан
  • Python ошибка в классе! понять пожалуйста?

    Vindicar
    @Vindicar
    RTFM!
    self.battery_size = Battery()
    на
    self.battery = Battery()
    Ответ написан
    1 комментарий
  • Считывание программой файл, может кто знает решение?

    Vindicar
    @Vindicar
    RTFM!
    Опишите квадрат как структуру данных - обычный класс, датакласс, именованный кортеж, что угодно. Это позволит вам:
    1. убрать дублирование кода для двух квадратов, и устранить нужду в десятках переменных. У вас будет два экземпляра класса "квадрат", а данные квадратов будут скрыты внутри них.
    2. разделить описание квадрата + операции над ним и его отображение в интерфейсе. Два простых взаимодействующих класса - это обычно лучше чем один сложный.

    Также имейте ввиду, что часто лучше хранить необходимый минимум данных, и вычислять остальное. Это позволит избежать противоречий в данных - например, в вашем коде координаты вершин могут формировать произвольный четырёхугольник вместо квадрата. Если нужен именно квадрат, и именно не-повёрнутый, то я бы написал класс примерно так:
    class Square:
      #конструктор принимает координаты левой верхней вершины и длину стороны квадрата
      def __init__(self, x: int, y: int, a: int):
        self.topleft = (x,y) #давайте переменным более читаемые имена!
        self.side = a
      
      @property
      #это будет свойство - оно будет вычисляться по запросу, а не храниться
      def topright(self):
        return (self.topleft[0]+self.side, self.topleft[1])
      @property
      def bottomleft(self):
        return (self.topleft[0], self.topleft[1]+self.side)
      @property
      def bottomright(self):
        return (self.topleft[0]+self.side, self.topleft[1]+self.side)
      
      def save(self, file): #сохраняем себя в файл
        pass #код этого метода напишите сами
      
      @classmethod
      # это метод класса, он будет вызываться как Square.load(), а не для конкретного экземпляра Square
      def load(cls, file): #загружаем новый квадрат из файла
        x = ... #напишите код загрузки сами
        y = ...
        side = ...
        return cls(x, y, side)
    Ответ написан
  • Как сделать покупку валюты в боте Discord?

    Vindicar
    @Vindicar
    RTFM!
    Если API представляет все необходимые для этого операции, вы можете им воспользоваться и это не противоречит законодательству - то можно.
    Все три "если" - это вопросы, на которые нужно знать ответ.

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

    Vindicar
    @Vindicar
    RTFM!
    Я предполагаю, что функция использует метод скользящего окна, т.е. анализирует некоторое нечётное N точек данных, чтобы вычислить искомую величину в средней точке. Например, для N=7 у нас помимо текущей точки будет использоваться три точки до текущей и три после.
    Но для крайних точек это не подходит, так как у них нет достаточного количества соседей с той или с другой стороны.
    Ответ написан
    Комментировать
  • Как заблокировать человека в боте?

    Vindicar
    @Vindicar
    RTFM!
    Храни список (в файле, а лучше в базе данных) ID заблокированных, при поступлении команды проверяй что ID отправителя сообщения нет в списке.

    Опциональные фишки типа хранения причины бана или даты, когда истекает бан, по желанию.
    Ответ написан
    Комментировать
  • Что делать при ошибки Non-UTF-8 code starting with?

    Vindicar
    @Vindicar
    RTFM!
    Вообще эта ошибка обычно возникает не из-за переводов строки. В начале файла кодировка указана?
    Если нет, то добавь в начало файла строчку
    # -*- coding: encoding name -*-
    вместо encoding name подставь windows-1251 (если пользуешься старой тупорылой кодировкой) или utf-8, смотря в какой кодировке твой исходник.
    Ответ написан
    Комментировать
  • Как решить ValueError: The truth value...?

    Vindicar
    @Vindicar
    RTFM!
    numpy намекает, что выражение rgb != bg_color вернёт не логическое значение, а массив логических значений - результатов сравнения каждого элемента. Иными словами,
    print(numpy.array([1, 2, 3]) != numpy.array([1, 2, 4])) выведет [False, False, True]
    Как следствие, непонятно, считать ли такой массив истинным или ложным если в нём несколько значений и они разные.
    Предпреждение подсказывает и как это поправить.
    Если тебе нужно любое несовпадение, то пишешь (rgb != bg_color).any().
    Если нужно, чтобы все три канала цвета были разными, то (rgb != bg_color).all().

    Но если честно, cleared_img_data - какой-то странный массив.
    Ответ написан
    1 комментарий