• Как исправить поворот массива numpy?

    Vindicar
    @Vindicar
    RTFM!
    метод reshape() возвращает версию массива с другими размерами, а не меняет эти размеры на месте.
    Так как вы игнорируете возвращаемое значение, вы пытаетесь повернуть одномерный вектор.
    Но там ещё будут проблемы с sorted(arr_b), так как sorted() интерпретирует двумерный массив как коллекцию одномерных, и пытается сортировать только эту коллекцию.
    Ответ написан
    Комментировать
  • Как заставить дискорд бота отправлять сообщения в случайное время?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала определи, что понимается под случайным временем.
    Например, "одно сообщение через каждые t секунд, где t - равномерно распределённое число от 300 до 3600"
    Или "выбрать случайный момент времени в сутках, дождаться его наступления, отправить реплику"
    Или "пусть бот каждый N секунд бросает кубик, если выпала единица - выводим сообщение".
    Все три способа подразумевают разную реализацию и разные ограничения.

    Я полагаю, делаешь бота на discord.py?
    Тогда копай в сторону:
    1. модуля random, чтобы понят как генерировать случайные числа
    2. раздел документации по discord.py посвящённый длительным процессам.

    Логика примерно такая:
    1. Разберись по примеру выше, как делать простой цикл, чтобы бот писал что-то в консоль.
    2. Используй asyncio.sleep() чтобы задержать выполнение цикла на какое-то время.
    3. Научись генерить случайные числа с помощью модуля random, и сделай задержку случайной.
    4. Научись делать случайный выбор сообщения с помощью random.choice()
    5. Научись отправлять сообщения в канал а не в консоль (метод, который пригодится)

    Подробнее - только кодом.
    Ответ написан
  • Что не так, не понимаю TypeError: can only concatenate str (not "int") to str?

    Vindicar
    @Vindicar
    RTFM!
    input() возвращает строку. Сразу конвертируй её в целое, и уже потом работай.
    Ответ написан
    Комментировать
  • Как сделать конвертер единиц в tkinter?

    Vindicar
    @Vindicar
    RTFM!
    Для value_type пропиши callback на изменение значения.
    self.value_type = IntVar()
    self.value_type.trace_add('write', self.select_value_type)

    При этом метод select_value_type должен иметь сигнатуру вида
    def select_value_type(self, *args):
    В твоём случае параметры метода не важны, так как он связан с изменением одной переменной. Вот почему можно просто прописать *args.
    Ответ написан
    2 комментария
  • Отсортировать список по именам элементов?

    Vindicar
    @Vindicar
    RTFM!
    Удалить en и ru из списка, если удалось, вставить их в начало вручную? Это вообще-то не сортировка. =)
    for lang in ('en', 'ru')[::-1]: #инверсия порядка тут необходима
      try:
        l.remove(lang)
      except ValueError: #нет такого языка в списке
        pass
      else: #был такой язык в списке, вставляем обратно
        l.insert(0, lang)
    Ответ написан
    Комментировать
  • Как забрать сразу несколько ролей?

    Vindicar
    @Vindicar
    RTFM!
    Напиши функцию, которая берёт такую строку, превращает её в массив.
    API remove_roles() позволяет указать несколько ролей сразу, просто распакуй массив в список аргументов через *.
    input_str = '123 456 789'
    role_ids = input_str.split()
    reason = 'Потому что гладиолус!' #или None
    target_member.remove_roles(*role_ids, reason=reason)
    Ответ написан
    1 комментарий
  • Почему возникает ошибка error: [Errno 24] Too many open files при requests.get?

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

    Vindicar
    @Vindicar
    RTFM!
    Так, как вы это пытаетесь сделать - никак. Просто невозможно.
    Максимум, вы можете схитрить: пусть load() возвращает объект(ы) модуля(ей), которые она импортировала, а код, который вызывает load(), сам присваивает этим объектам имена.
    #somemodule.py
    def load():
      import mymodule1
      import mymodule2
      return mymodule1, mymodule2

    А потом
    import somemodule
    mymodule1, mymodule2 = somemodule.load()


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

    Vindicar
    @Vindicar
    RTFM!
    1. Гуглишь "discord.py reaction role github"
    2. Находишь ботов типа Reaction Light.
    3. Разбираешься, как это сделано у них.
    4. ???
    5. PROFIT

    Ну или забиваешь на раздумья и используешь их как есть.
    Ответ написан
  • Что требуется в задаче Python?

    Vindicar
    @Vindicar
    RTFM!
    В первой задаче всё достаточно просто.
    1) чтобы понять, насколько мы увеличим сумму чисел, достаточно посчитать сумму до и после преобразования. Так что задач сводится к "максимизировать сумму чисел, меняя в них цифры"
    2) Чтобы максимизировать сумму, надо максимизировать слагаемые. Так что нужно как можно сильнее увеличить числа, заменив одну цифру за раз.
    3) Как увеличить число как можно сильнее? Нужно заменить старший разряд в числе на девятку, это даст наибольший эффект.
    4) Тонкость раз: если старший разряд уже девятка, нам нужен следующий разряд, и т.д. пока не найдём НЕ девятку. Если число из одних девяток, его игнорируем.
    5) Тонкость два: если у нас есть числа 12 и 123, то больший эффект будет достигнут увеличением второго, т.к. у него старший разряд больше.
    6) Тонкость три: если у нас есть числа 123 и 456, то больший эффект будет достигнут увеличением первого, т.к. у него старший разряд имеет меньшее значение.

    Отсюда логика решения: для каждого числа ищем старший разряд, не равный 9. Фиксируем сведения о числе, номере разряда (единицы, десятки, сотни и т.п.), и цифре в разряде.
    В списке найденных "кандидатов на замену" убираем все варианты, где номер разряда меньше максимального в списке (т.е. если у кого-то можно заменить сотню, то десятки и единицы уже не рассматриваем). Этот шаг можно совместить с генерацией списка.
    Из оставшихся кандидатов ищем того, у кого цифра в разряде наименьшая. Эту цифру в этом числе и заменяем на девятку.
    Прирост числа, а значит и прирост общей суммы, будет равен (9 - старая цифра) * вес разряда. Например, заменили в сотнях 2 на 9, получим прирост (9 - 2) * 100 = 700.

    Процесс повторяем k раз, прирост накапливаем.
    Ответ написан
    Комментировать
  • Как создать интерфейс к уже существующему скрипту на Python?

    Vindicar
    @Vindicar
    RTFM!
    Вынесите основной функционал вашего скрипта в подпрограммы, типа
    def generate_emails() -> List[str]:
        'Генерирует список адресов почты.'
        ...
    
    def check_emails(emails: List[str]) -> List[bool]:
        'Получает список адресов почты возвращает список ответов "успешно или нет".'
        ...


    Потом пишете новый скрипт, в нём импортируете старый и используете эти функции.
    Чтобы создать GUI, посмотрите в сторону Tkinter, он в питоне есть из коробки и для простых задач подойдёт.
    Ответ написан
    Комментировать
  • Можно ли выйти сразу из всех функций?

    Vindicar
    @Vindicar
    RTFM!
    Вариант 1: Пусть функции возвращают значение типа bool, если оно истинное - то вызвавшая функция тоже должна прерваться.

    Вариант 2: выбросить исключение, поймать его там, где нужно остановить цепочку выходов. Имеет смысл описать своё исключение для такого, это несложно.

    Вариант 3:
    import sys
    sys.exit()
    Завершает работу скрипта. По факту, то же что и вариант 2, так как sys.exit() выбрасывает неотлавливаемое исключение.
    Ответ написан
    Комментировать
  • Как получить значение из памяти по его адресу?

    Vindicar
    @Vindicar
    RTFM!
    Если на винде, то нужно использовать winapi, ReadProcessMemory(). При этом нужны права доступа к процессу. Простейший способ их иметь - запустить этот процесс самим как дочерний.

    Вообще питон для таких вещей не слишком подходит, но с помощью модуля win32 там можно обращаться к winapi функциям.

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

    Vindicar
    @Vindicar
    RTFM!
    В зависимости от того, как рисуешь контур:
    • либо в cv2.drawContours() указываешь параметр thickness=-1 (залить фигуру, работает на многих рисовальных функциях)
    • либо используешь cv2.fillPoly() вместо cv2.polylines()

    Читай документацию, она полезная.
    Ответ написан
    1 комментарий
  • Как убрать лишний "мусор" OpenCv python?

    Vindicar
    @Vindicar
    RTFM!
    Выше уже написали про морфологическое открытие (несколько раундов эрозии, потом несколько раундов диляции). Это удалит "тонкие" элементы, в т.ч. пятна, но не сильно исказит форму "толстых".
    А если тебе нужно только одно белое пятно, то используй поиск связных компонентов (непрерывных белых пятен), и фильтруй найденные компоненты по площади и/или пропорциям. Найдя нужный, обрабатывай его отдельно.
    Ответ написан
    Комментировать
  • Как сделать, чтобы роль по реакции на сообщения, ставилась игроку, который написал запрос, а не админу, который поставил реакцию?

    Vindicar
    @Vindicar
    RTFM!
    Подсказка - нужно изменить эту строку:
    member = payload.member
    Для on_raw_reaction_add() поле payload.member - это тот, кто поставил реакцию.
    Если почитать доки, то у payload есть несколько полей, и среди них message_id, которое содержит id сообщения, на которое была поставлена реакция.
    После этого нужно получить канал, где было сообщение (если что, в payload есть guild_id и channel_id), и на этом канале вызвать fetch_message(). Получите объект класса Message, у которого уже будет свойство author.
    Ответ написан
    Комментировать
  • Как узнать "размер" контура OpenCv?

    Vindicar
    @Vindicar
    RTFM!
    Нужно определиться, что считать под размером.
    Длину контура можно найти через cv2.arcLength(), но она может быть большая для неровных контуров (зазубренные края) и для вытянутых контуров.
    Площадь контура - через cv2.contourArea().
    Видимые размеры можно оценить через cv2.boxPoints().
    Ответ написан
    2 комментария
  • Как передать переменную в экранированную js строку?

    Vindicar
    @Vindicar
    RTFM!
    Можно использовать f-строки (сравнительно новая штука).
    f'''
    foo = {value};
    alert(foo);
    '''

    Если нужна поддержка старых версий питона, то используй форматирование строк
    '''
    foo = {value};
    alert(foo);
    '''.format(value=value)
    Ответ написан
    Комментировать
  • Проблема с cogs, переделал код и не могу понять в чём проблема?

    Vindicar
    @Vindicar
    RTFM!
    Из документации по purge():
    You must have the manage_messages permission to delete messages even if they are your own (unless you are a user account). The read_message_history permission is also needed to retrieve message history.

    У бота точно есть разрешения на это?

    Далее, purge(limit = 1) - что вообще пытаетесь сделать? Удалить сообщение с командой? purge() вообще-то для массовых удалений по критерию.
    Не лучше ли будет использовать ctx.message.delete()?
    Ответ написан
    1 комментарий
  • Как исправить ошибку discord.py?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, фигачить cursor.execute() прямо в f-строку - это очень, очень плохая идея. За такое бьют по пальцам.
    Во-вторых, not subscriptable означает, что ты пытаешься обратиться по индексу (типа x[0]) в то время как объект (x) - это None.
    90% шанс что это вызов .fetchone()[0] - запрос к базе не находит нужную строку, тогда fetchone() возвращает None, а дальше попытка получить индекс от None генерирует исключение.

    Никогда, НИКОГДА не пиши в f-строках выражение сложнее чем 2*2. Вынеси промежуточный результат в переменную, проверь её значение на корректность, затем уже используй.
    Ответ написан
    Комментировать