Задать вопрос
Ответы пользователя по тегу Python
  • Как решить 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 комментарий
  • Как исправить ошибку Python Tkinter?

    Vindicar
    @Vindicar
    RTFM!
    Дело в этом коде:
    data = result.split()
                fun_name = data[0]
                arg = data[1:]
                bank_fun[fun_name](arg)

    Вы разбиваете введённую строку по пробельным символам (в т.ч. табы и переводы строки), но не проверяете ни есть ли функция с таким именем, ни правильное ли количество параметров передано, ни правильно ли записаны числа. Т.е. если у вас более трёх пробельных частей в строке, то в arg попадёт более двух значений, а не все функции это позволяют.

    Кратковременное решение: добавьте отлов исключений и проверку корректности вводимого текста.

    Более долгое но правильное решение: не изобретайте велосипед, а освойте модуль argparse, чтобы удобно разбирать команды и контролировать их корректность. А для удобного разбора строки (в том числе фишек типа "завернуть строку с пробелами в кавычки чтобы считалась как один аргумент") используйте модуль shlex. Оба модуля в стандартной поставке питона.
    Ответ написан
    Комментировать
  • Как перехватить traceback из subprocess?

    Vindicar
    @Vindicar
    RTFM!
    Если я верно понял, что пробелма в синхронном вводе-выводе при общении с дочерним процессом, то я бы посмотрел в сторону asyncio, чтобы анализировать полученное содержимое stderr постепенно, по мере его появления. Может, оверкилл, но должно сработать.
    Вот примерная идея, найденная на stackoverflow.
    Ответ написан
    Комментировать
  • Подойдет ли raspberry pi для программирования на python?

    Vindicar
    @Vindicar
    RTFM!
    С малинкой много возни с подключением периферии - сначала её надо подобрать, потом лапша из кабелей мешает.
    Я бы лучше посмотрел нетбук или low-end ноут. Просто удобнее.
    Ответ написан
    1 комментарий
  • Как заставить бота ждать ответа от пользователя?

    Vindicar
    @Vindicar
    RTFM!
    Если нужно обрабатывать последовательность сообщений, описывай автомат состояний.
    Каждое состояние - это ситуация, когда бот ожидает некий набор возможных ответов.
    Каждый ответ - это переход из состояния в состояние.
    При обработке сообщения смотришь, какие переходы есть в текущем состоянии, выбираешь наиболее подходящий и выполняешь его логику.
    Ответ написан
  • Определить, сколько решений имеет система ax + by = c, dx + ey = f?

    Vindicar
    @Vindicar
    RTFM!
    Представь систему как два графика прямых, и ищи их точку пересечения.
    • Если a/d = b/e = с/f, то решений бесконечно много, так как это по сути одно и то же уравнение (одна и та же прямая).
    • Если a/d = b/e != с/f, то решений нет, так как это уравнения параллельных прямых.
    • В противном случае есть ровно одно решение, так как у непарарллельных прямых есть одна точка пересечения.


    Чтобы решить проблему с коэффициентами, равными 0, перестрой пропорцию с деления на умножение.
    a/d = b/e = с/f => ae = bd и af = cd
    a/d = b/e != с/f => ae = bd и af != cd
    Ответ написан
    Комментировать
  • Как вызвать из класса другого файла функцию?

    Vindicar
    @Vindicar
    RTFM!
    Нужно пересмотреть структуру вашего кода. Она должна напоминать дерево.
    На вершине дерева - логика программы. Она импортирует в себя остальные модули (т.е. знает о них). Остальные модули в идеале не должны знать ни о логике, ни о других модулях равного им уровня, а быть полностью самостоятельными.
    Если же им нужно знать что-то о логике (например, читать значение или вызывать метод объекта логики при определённых условиях), то этот объект логика должна передать им самостоятельно, передав ссылку на него либо как параметр конструктора, либо позднее, отдельным методом.

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

    Vindicar
    @Vindicar
    RTFM!
    self.results = self.cursor.fetchall()
    self.output.setText(self.results)

    Я очень сомневаюсь, что label сумеет переварить список строк в качестве содержимого.
    Ответ написан
    Комментировать
  • Как это работает?

    Vindicar
    @Vindicar
    RTFM!
    Вложенная функция _fib_dict() работает рекурсивно, и ссылается на переменную fib_d в содержащей её функции.
    Ответ написан
    Комментировать
  • Как отправить сообщение в цикле on_message в discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Наверно, потому что ctx.author.send(), если нужно написать в приват автору. Или ctx.channel.send(), если сообщение пришло с сервера и нужно ответить там же.
    Ответ написан
    1 комментарий
  • Как в discord.py сделать функцию shutdown?

    Vindicar
    @Vindicar
    RTFM!
    Если речь об остановке программы, то гипотетически может пригодиться модуль atexit.
    Но нужно иметь ввиду, что этот модуль не поможет если процесс убит сигналом KILL (Unix системы) или через TerminateProcess() (Windows системы).
    Кроме того, нет гарантий, что после вызова atexit-обработчика бот проживёт достаточно долго, чтобы на самом деле отправить сообщение по сети, а не только "принять к сведению и поставить в очередь".

    Так что скорее стоит задуматься, что именно вы пытаетесь сделать, и зачем.
    Ответ написан
    Комментировать
  • Как остановить выполнение программы спустя какое-то время?

    Vindicar
    @Vindicar
    RTFM!
    Просто добавь параметр timeout в FACE_UNLOCK(), фиксируй текущее время перед входом в цикл while(cam.isOpened()), а внутри цикла проверяй, истекло ли достаточно много времени или нет.
    Ответ написан
    1 комментарий
  • Как определить количество строк, не содержащих ни одного нулевого элемента?

    Vindicar
    @Vindicar
    RTFM!
    Как представлена матрица? Список из списков?
    1. Перебираешь циклом for элементы-строки внешнего списка, и для каждой строки проверяешь условие "0 not in row" где row - строка матрицы. Соответственно, если условие выполнено, увеличиваешь на 1 переменную-счётчик.

    2. Не знаю, можно ли это делать по условиям задачи - но я бы использовал класс Counter из модуля collections. Создаёшь пустой экземпляр Counter, потом проходишь циклом for по строкам матрицы, и каждую строку скармливаешь этому экземпляру методом .update().
    В конце перебираешь все ключи в Counter, и если значение для этого ключа больше 1, добавляешь ключ в отдельный список. Потом находишь максимум в этом списке, либо вручную либо функцией max().

    Так как свой код ты не привёл, делать лабу за тебя я не хочу.
    Ответ написан
  • Парсинг динамического сайта на python?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри там же конкретную структуру запроса (что за поля передаются, их значения). Потом сформируй такой же запрос, скажем через requests и отправляй. Также нужно будет понять, как парсить ответ - это json, или это кусок html, или ещё что?
    Детали зависят от конкретного сайта, так что конкретный код - это уже фриланс.

    Только имей ввиду, сайты могут не любить, когда их активно парсят. Варианты могут быть:
    • Проверка кук - просто загрузи сначала главную страницу в той же сессии requests, чтобы куки были.
    • Специальный сеансовый ключ для запросов - выясни, как он загружается, и сделай этот запрос перед началом работы.
    • Ограничение числа запросов с одного хоста - используй прокси, а лучше ограничь скорость работы скрипта.
    • Проверка клиента - поставь правильный User-Agent, можешь даже скопировать заголовки запроса.
    Ответ написан
    Комментировать
  • Как в python вывести текст на рабочий стол?

    Vindicar
    @Vindicar
    RTFM!
    Ты можешь использовать любой фреймворк для создания окна, но проблема будет именно с расположением. Если речь о Windows, то есть два возможных подхода.

    1. Обрабатывай сообщения о перемещении окна, блокируй любые перемещения, ставь окно в самый низ стопки окон. Используй функцию WinAPI SetWindowPos().

    2. Используя функцию WinAPI SetParent(), установить своё окно как дочернее для рабочего стола. Нужно найти дескриптор окна рабочего стола через FindWindow().

    Проблема в том, что доступ к WinAPI через питон возможен, но очень неудобен. Также тебе придётся как-то узнать у твоего выбранного фреймворка дескриптор твоего окна.
    Ответ написан
    Комментировать
  • Почему не открывается файл?

    Vindicar
    @Vindicar
    RTFM!
    Никогда не работал с этим фреймворком, но есть подозрение.
    a.on_selection = self.selected(a.selection)
    ты присваиваешь свойству on_selection возвращаемое значение метода selected(). Так как метод ничего не возвращает, это None. Т.е. ты говоришь, что никакой реакции на on_selection не надо делать.
    Подозреваю, что правильно будет
    a.on_selection = self.selected
    и обрати внимание, что нет скобок! Вместо вызова метода мы передаём ссылку на него.

    Далее, можно было бы и самостоятельно догадаться в чём дело, но тебя сбило с толку вот эта "обработка" исключений:
    try:
                self.ids.my_image.source = filename[0]
            except:
                pass

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

    Vindicar
    @Vindicar
    RTFM!
    1. Гуглить пробовали? Вторая же ссылка по запросу "discord.py embed" ведёт вот на этот пошаговый туториал.

    2. "You Won Free Nitro"? Ну-ну. Зарепортил вопрос.
    Ответ написан
    Комментировать
  • Как обратиться к ключам словаря через input?

    Vindicar
    @Vindicar
    RTFM!
    Засунь словарь в словарь.
    dinos = {
        'carno' : { 'weight': 2170, 'health': 2170, 'bite': 200, 'bleed': 15, 'sbite': 0, 'sbleed': 0 }
        'maia' : { 'weight': 2868, 'health': 2868, 'bite': 175, 'bleed': 0, 'sbite': 0, 'sbleed': 0 }
    }
    
    while True:
        print('Enter attacking dino name: ', end='')
        name = input()
        if name not in dinos:
            print(f'No such dino: {name}')
        else:
            dino = dinos[name]
            break
    #работаем с dino
    Ответ написан
    Комментировать
  • Как парсить cmd окно?

    Vindicar
    @Vindicar
    RTFM!
    Вариант 1. Заставить программу вывести данные в файл (как показал Hemul GM), затем прочитать этот файл.
    Вариант 2. Запустить программу самому через модуль subprocess. Он позволяет перехватить стандартный вывод процесса (т.е. вывод в консоль) и вернуть его содержимое в виде строки.
    Вариант 3. Раз уж в целевой программе есть сетевая поддержка, можно попробовать получить информацию через локальное соединение. Но нужно иметь представление о протоколе обмена (что нужно послать, чтобы запросить данные, и как интерпретировать ответ). Само соединение обеспечит модуль socket.
    Ответ написан
    Комментировать
  • Как можно сделать бонус раз в 24 часа?

    Vindicar
    @Vindicar
    RTFM!
    Фиксируешь время нажатия на кнопку.
    Выбираешь из базы значение предыдущего времени по id пользотеля запросом SELECT.

    Если значения нет, человек пишет в первый раз, заносим значение времени и id пользователя в базу запросом INSERT. Отправляем сообщение о бонусе.

    Если значение есть, и разница между ним и текущим временем более 24 часов, человек может получить бонус. Обновляем значение в базе запросом UPDATE и отправляем сообщение о бонусе.

    Если значение есть, и разница менее 24 часов, отправляем сообщение с оставшимся до следующего бонуса временем.
    Ответ написан