Задать вопрос
  • UnboundLocalError: local variable 'metawallet' referenced before assignment. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Если в result нет ни одной строки, какое значение будет у metawallet?
    Ответ написан
  • Как это расшифровать?

    Vindicar
    @Vindicar
    RTFM!
    Выглядит как двухбайтная кодировка. Символ § - это код A7, т.е. диапазон кодов 0xA700 - 0xA7FF.
    Если считать это как юникод, то это диапазон из Basic Multilingual Plane, соответствует Latin Extended D.
    Я подозреваю, что устройство подверглось локализации путём тупой замены отображаемого шрифта, т.е. без замены используемой кодовой страницы.

    Далее, я заметил, что только часть "§£§Ù§â§à§ã§Ý§Ñ§ñ §Ø§Ö§ß§ë§Ú§ß§Ñ" сходится по числу букв с "Взрослая женщина", если считаем что пробел остаётся как есть. Тогда получаем §Ñ = 0xA7D1 соответствует "а", а §Ö = 0xA7D6 соответствует "е", как раз на пять символов дальше. §£ = 0xA7A3 соответствует "В", т.е. большие буквы расположены в кодировке раньше. Отсюда можешь попробовать составить таблицу для перекодировки.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы не выводило лишних строк?

    Vindicar
    @Vindicar
    RTFM!
    У тебя два раза вызывается input("Ваше предположение") - один раз вне цикла, другой раз в цикле.
    Просто поставь guess заведомо невозможное значение (например, None) вначале, вместо вызова int(input())
    Ответ написан
    3 комментария
  • Как сделать нейросеть по изменению изображения?

    Vindicar
    @Vindicar
    RTFM!
    Пару тысяч штук мало будет, если честно. Особенно с учётом того, что размер входного изображения для нейросети чаще всего фиксирован.
    Для такой задачи можно и без нейросети обойтись.
    А если именно с нейросетью, почитай материал по свёрточным сетям (convolution networks), для начала.
    Ответ написан
    Комментировать
  • Почему я когда хочу замутить игрока я пишу например "-замутить @F1azy 1 тест" сообщение о муте игрока присылается только после того когда мут прошёл?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты приказал боту сделать именно так.
    await member.add_roles(muterole) # добавляешь роль
    await asyncio.sleep(time * 60) # ЖДЕШЬ
    await member.remove_roles(muterole) # удаляешь роль
    await channel.send(embed = emb) #отправляешь сообщение

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

    Vindicar
    @Vindicar
    RTFM!
    Открыть для себя threading / multiprocessing. Второй муторнее в плане передачи данных от кода-родителя к коду-потомку, но если передаёшь только строки - сойдёт. Зато на многоядерных процах будет лучше работать.
    Ответ написан
    Комментировать
  • Rак запустить программу фоном Python?

    Vindicar
    @Vindicar
    RTFM!
    Если под виндой, переименуй файл в .pyw. По умолчанию лаунчер питона настроен так, чтобы при запуске .pyw файлов не открывать консоль. А если ты сам GUI не создаёшь...
    Ответ написан
    Комментировать
  • В чём проблема? Как решить?

    Vindicar
    @Vindicar
    RTFM!
    bot = discord.ext.commands.Bot(command_prefix = "|");
    bot.run("ТОКЕН")
    client = discord.Client()
    client.run('ТОКЕН')

    Вот скажи, ЗАЧЕМ тебе и Client и Bot?
    Впрочем, догадываюсь. Читать документацию - это ведь для ламеров, а в видяшке написано @client, значит, нужен класс Client, и не волнует.
    class discord.ext.commands.Bot
    Represents a discord bot.
    This class is a subclass of discord.Client and as a result anything that you can do with a discord.Client you can do with this bot.

    Выделение моё.
    В итоге ты регистрируешь команды на одном клиенте, запускаешь совсем другого, и удивляешься, что ничего не работает.
    Про самописную обработку команд в on_message() комментировать не буду.
    Ответ написан
    Комментировать
  • Как вычитать от даты 2 дня ( дата вида строки)?

    Vindicar
    @Vindicar
    RTFM!
    Храни в БД Unix timestamp (количество секунд от начала эпохи). Оно компактнее, и операции сравнения и плюс/минус интервал делать куда как проще.
    Ну и питон позволяет получить дату/время в виде timestamp, и преобразовать обратно.
    Ответ написан
  • Почему не выводит python в командной строке?

    Vindicar
    @Vindicar
    RTFM!
    Галку py launcher (ассоциировать с файлами .py) не забыл?
    Ответ написан
  • Как грамотнее написать скрипт для обновления данных по таймеру?

    Vindicar
    @Vindicar
    RTFM!
    async def long_task():
        while True:
            await do_stuff()
            await asyncio.sleep(3600) # если нужна простая периодичность
    
    # для запуска
    task = asyncio.get_running_loop().create_task(long_task())
    # для останова
    task.cancel()  #выкинет спец. исключение в long_task(), так что finally отработает
    Ответ написан
    4 комментария
  • Как перезагрузить модуль с помощью строчного названия?

    Vindicar
    @Vindicar
    RTFM!
    1. sys.modules
    This is a dictionary that maps module names to modules which have already been loaded. This can be manipulated to force reloading of modules and other tricks.

    2. Ещё может пригодиться importlib.invalidate_caches()
    This function should be called if any modules are created/installed while your program is running to guarantee all finders will notice the new module’s existence.
    Ответ написан
    Комментировать
  • Как на питоне проверить наличие строки в массиве из файла?

    Vindicar
    @Vindicar
    RTFM!
    Ну так почему бы не поискать, как обрезать пробелы и как применить функцию ко всем элементами массива в питоне? Там есть эквиваленты и array_map() и trim().
    Ответ написан
    Комментировать
  • Как определить язык пользователя в Python?

    Vindicar
    @Vindicar
    RTFM!
    Браузер присылает заголовки Accept-Language, также можно полагаться на геолокацию.
    Но это всё должно использоваться только как способ определить язык по умолчанию. Предоставляй пользователю способ сменить язык явно.
    Ответ написан
    Комментировать
  • Как возвращать промежуточный результат?

    Vindicar
    @Vindicar
    RTFM!
    Перепишите скрипт A так, чтобы он позволял сообщать сведения о прогрессе иначе. Упрощенный пример:

    Было:
    import time
    
    for i in range(100):
        time.sleep(1)
        print($"{i}%")


    Стало:
    import time
    
    def run_script(on_progress):
        for i in range(100):
            time.sleep(1)
            on_progress(i)
    
    if __name__ == '__main__':
        run_script(lambda i: print($"{i}%"))


    Тогда в другом скрипте будет:
    from script_a import run_script
    
    def my_progress(i):
        pass # показываешь прогресс скрипта
    
    run_script(my_progress)


    Пример очень упрощённый, если скрипт выдаёт несколько видов информации, то либо on_progress будет иметь несколько параметров, либо потребуется несколько таких функций.
    Ответ написан
    1 комментарий
  • Позиционирование в tkinter не поддается логике?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, нельзя смешивать разные менеджеры в рамках одного контейнера. Если ты этого не понял, я фз что ты читал. Т.е. ты можешь гридом разместить несколько панелей, а потом каждую панель наполнять по-разному.
    Во-вторых, стоит чуть-чуть погуглить, и находишь вот такой материал где прямо прописано, что не так со свойством height (ну и width заодно).
    Height of the button in text lines (for textual buttons) or pixels (for images).

    Решение, мягко говоря, спорное, но оно документировано. Размер виджету нужен только как некоторое предпочтительное значение по умолчанию, так как вообще-то всей геометрией занимается выбранный менеджер геометрии. А раз уж хочешь использовать place, почему ты не обратил внимание на параметры width/height?
    В общем, не принимай собственную невнимательность за чужие ошибки.
    from tkinter import *
    
    frame_bot = Tk()
    frame_bot.geometry("640x480")
    # place() возвращает None, как и stack() / grid()
    Button(frame_bot, text="back", bg='gray').place(x=5, y=405, width=30, height=30) 
    Button(frame_bot, text="write", bg='blue').place(x=45, y=405, width=30, height=30)
    Button(frame_bot, text="home", bg='green').place(x=85, y=405, width=30, height=30)
    
    frame_bot.mainloop()
    Ответ написан
    1 комментарий
  • Как сохранить значение переменной после перезапуска кода?

    Vindicar
    @Vindicar
    RTFM!
    Не присваивай переменной значение прописанное прямо в коде, а читай его из файла. Если переменная и впрямь одна и она примитивная (число/строка) - можно просто из файла, если их несколько - нужна структура и модуль json, если их много - впору задуматься о БД.
    Ответ написан
    Комментировать
  • Как получить данные с функции, при нажатии на кнопку?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала неплохо бы осознать, что понятие "за функцией" существует и в пространстве, и во времени.

    В пространстве - ты описываешь в функции локальную переменную Key, которая не видна снаружи, в глобальной области видимости, а также не видна в других функциях. Если хочешь сохранить это значение глобально, объяви переменную снаружи функции, присвоив ей какое-то начальное значение (скажем, None), а внутри функции опиши переменную как global.

    Во времени - весь приведенный тобой код, вплоть до вызова root.mainloop() (который ты не привёл), выполняется в самом начале работы скрипта - еще до того, как на экране появится окно. Чтобы код мог использовать значение, которое было получено в рамках btn_click(), нужно, чтобы этот код выполнялся гарантированно после btn_click() или же внутри btn_click(), но после получения значения Key. Как это гарантировать - подумай сам. Либо обяжи пользователя нажимать на кнопки в строго определнном порядке, либо привяжи исполнение кода к вызову btn_click().
    Ответ написан
    Комментировать
  • Как накладывать изображения в python?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. если переформулировать вопрос:
    Есть два изображения (A и B) с одинаковым набором маркеров. Нужно трансформировать изображение B так, чтобы его маркеры совпали по положению с маркерами изображения A, а потом наложить результат на изображение A.
    Я так понял?

    Если да, то это делается примерно так.
    1. Формируешь два массива координат - маркеры на изображениях A и B. Как - зависит от типа маркеров, но порядок должен быть одинаковым в обоих массивах. Форма (shape) массивов должна быть (N, 1, 2), где последний индекс отвечает за x или y координату, а N - число маркеров.
    2. Вызываешь
    homography, ptmask = cv2.findHomography(arrayB, arrayA, cv2.RANSAC)
    .
    homography будет матрицей проективного преобразования - как повернуть маркеры B, чтобы они легли на маркеры A. ptmask будет содержать сведения о том, какие пары точек удалось совместить.
    3. Делаешь вызов cv2.warpPerspective(), чтобы повернуть изображение B согласно матрице homography. Параметр размера должен быть таким чтобы второе изображение точно уместилось вместе с первым. Например, можно заранее создать большое изображение по размеру.
    4. Делаешь совмещение. Используешь cv2.PerspectiveTransform(), чтобы понять, где на итоговом изображении будут углы изображения B, делаешь cv2.fillPoly() чтобы создать бинарную маску для наложения. В маске белый пиксель будет означать "сюда поместить пиксель из повернутого B", а черный - "оставить пиксель как есть". Используешь эту маску, чтобы выполнить наложение.

    Пример кода и исходных данных - не совсем то, что тебе нужно, но идею передаст, я надеюсь.
    Ответ написан
  • Tkinter grid, как растянуть сетку на все окно?

    Vindicar
    @Vindicar
    RTFM!
    Адаптивность решается через rowconfigure() и columnconfigure().
    А вот сам вопрос кривой: тебе нужно окно на весь экран, или только виджет на всё окно? Это разные вещи, как бы.

    Если нужно растянуть один виджет на всё окно (root), то просто
    widget.pack(fill='both', expand=True)
    Ответ написан