Ответы пользователя по тегу Python
  • Почему слетает кодировка?

    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 комментарий
  • Как исправить ошибку 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!
    Нужно пересмотреть структуру вашего кода. Она должна напоминать дерево.
    На вершине дерева - логика программы. Она импортирует в себя остальные модули (т.е. знает о них). Остальные модули в идеале не должны знать ни о логике, ни о других модулях равного им уровня, а быть полностью самостоятельными.
    Если же им нужно знать что-то о логике (например, читать значение или вызывать метод объекта логики при определённых условиях), то этот объект логика должна передать им самостоятельно, передав ссылку на него либо как параметр конструктора, либо позднее, отдельным методом.

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