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

    Vindicar
    @Vindicar
    RTFM!
    await channel.add_reaction('')
    реакцию можно добавлять только к сообщениям, а не к каналам.
    Ответ написан
    Комментировать
  • Почему при использовании первого элемента списка выдает ошибку выхода за грани списка?

    Vindicar
    @Vindicar
    RTFM!
    Потому что user_name содержит пустую строку. А вот почему так, это уже второй вопрос.
    Хотя _clean_all_tag_from_str() это тот еще код... вообще разве в title могут быть вложенные теги?
    Ответ написан
    1 комментарий
  • Как сделать отправку сообщеня которое написаное в команде?

    Vindicar
    @Vindicar
    RTFM!
    Плохо искал.
    Находишь искомый канал по id, у текстового канала есть метод send().
    Ответ написан
    Комментировать
  • Не работает бот, что не так?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что до start_polling() атрибут dp.loop имеет значение None.
    Наверняка бот предоставляет событие, которое срабатывает когда бот стартовал - поищи в доках, и запускай задачу внутри этого события.
    Ответ написан
  • Почему в tkinter не обновляется текст на экране?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь, что делаешь.
    btn_ent = Button(frame_btn, text='Ввести', font=100, bd=2, height=5, command=click())

    Ты присваиваешь в качестве обработчика щелчка по кнопке результат вызова функции click(). У неё нет ни одного return, так что она возвращает None.
    Если ты хотел назначить click() как обработчик, то нужно было указать саму функцию, а не результат её вызова.
    command=click


    Далее, сравнение
    txt == 'чтототам'
    некорректно, так как StringVar() и str - разные типы данных, и они не будут равны. Используй
    txt.get() == 'чтототам'
    . Одинокий вызов txt.get() в начале click() бесполезен, так как ты игнорируешь возвращаемое get() значение.

    Собственно, я не вижу где ты инициализируешь переменную txt. У тебя нет ни одного вызова txt.set().

    Ну и до кучи, присваивание TextR перед root.mainloop() ни на что не повлияет, так как она использовалась ранее.
    Если хочешь, чтобы присваивание переменной тут же отражалось в элементах управления, нужно использовать еще один StringVar(), и вызывать его метод .set() для смены значения.
    Ответ написан
    Комментировать
  • Как устранить проблему невыполнения алгоритма?

    Vindicar
    @Vindicar
    RTFM!
    operation=input('Выберите персонажа:')
    if operation == 1:

    input() возвращает только строки. Так что он вернет '1', '2' или '3', а это не то же самое что 1, 2 или 3.
    Ответ написан
  • Что делать, если бот не находит пользователя на сервере?

    Vindicar
    @Vindicar
    RTFM!
    member = main_guild.get_member(member_id)
    AttributeError: 'NoneType' object has no attribute 'get_member'
    Ну чего тут гадать, нет такой гильдии. ID точно не перепутал?
    Кроме того, ты уверен что функция не запускает до того как бот подключился?
    Ответ написан
    Комментировать
  • Проблема со вставкой аргументов в sql запрос python, в чем причина?

    Vindicar
    @Vindicar
    RTFM!
    Ни в коем случае не делайте так
    cur.execute("""INSERT INTO commands (user_id, date, command_name) VALUES (7 , {} , 'd')""".format(time_now))

    Поймаете SQL injection, да и косяков со строками тоже будет немеряно. На один вы уже наткнулись.
    Правильно будет так:
    cur.execute("INSERT INTO commands (user_id, date, command_name) VALUES (7 , ?, 'd')", (time_now,))

    В этом случае передаваемый аргумент будет правильно экранирован, завернут в кавычки и пр.
    Это написано в начале документации по модулю sqlite3, но ведь документацию читают только лузеры. правда же?
    Ответ написан
    1 комментарий
  • Как правильно написать код на пайтон для моей задачи?

    Vindicar
    @Vindicar
    RTFM!
    Почитай официальные примеры, там это есть.
    await bot.api.messages.send(
                peer_id=event.object.user_id, message="Спасибо за подписку!", random_id=0
            )

    Можно предположить, что peer_id - это id пользователя, которому нужно отправить сообщение.
    Ответ написан
  • Как перевести число в двочиную систему состоящую из 2 и 5?

    Vindicar
    @Vindicar
    RTFM!
    Перевод числа в строку с записью двоичной системе - это bin(). Единственное, первые два символа префикса 0b оторвать. Для более удобной замены нескольких символов за один раз лучше использовать .translate(). В итоге получаем:
    table = {ord('0'):'2',ord('1'):'5'}
    print(bin(N)[2:].translate(table))
    Ответ написан
  • Discord.py иерархия как сделать?

    Vindicar
    @Vindicar
    RTFM!
    Пишешь список ролей от наиболее авторитетных до наименее авторитетных.
    При выполнении команды кика/мьюта сравниваешь наиболее авторитетную роль отправителя с наиболее авторитетной ролью цели. Авторитетность тут меряется как индекс в списке ролей - чем меньше, тем лучше.
    Ну а дальше, выполняешь команду только если отправитель более авторитетен чем цель.
    Ответ написан
    Комментировать
  • Как открыть другой файл python и там в словарь перезаписать данные?

    Vindicar
    @Vindicar
    RTFM!
    mlt_melt, не городите велосипед, а используйте модуль json. Будет вам нормальное сохранение структурированных данных - до тех пор, пока их можно представить в виде набора часть-целое.
    А если связи более сложные, например, есть список юзеров и нужно хранить кто с кем в друзьях - то тут уже впору задуматься о реляционной БД.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы числа из словаря после перебора и парсинга суммировались?

    Vindicar
    @Vindicar
    RTFM!
    cumma = 0
    cumma += searcher(i)

    Вот на кой огурец ты сбрасываешь сумму в 0 на каждой итерации цикла? Конечно 0 + x = x.
    Вынеси cumma = 0 за цикл, инвестор.
    Ответ написан
    1 комментарий
  • Взаимосвязь Python с программами?

    Vindicar
    @Vindicar
    RTFM!
    Под наивным "взаимосвязь" скрывается несколько совершенно различных технологий.
    Пакеты pyautogui и pywinauto занимаются вопросами имитации пользовательского ввода (и вообще взаимодействия с интерфейсом программы).
    Если тебе нужно лезть в чужую память - то тут уже нужно использовать win32 API функции ReadProcessMemory()/WriteProcessMemory(). Модуль ctypes в помощь.
    Если тебе нужно лезть в трафик чужого приложения, есть такая штука как dpkt.

    Фокус в том, что ни один из этих инструментов не тривиален в использовании. Нужно хорошо представлять устройство памяти процесса в windows, устройство оконного интерфейса в windows или устройство сетевых протоколов, в зависимости от задачи. А это дело не одного месяца.
    Ответ написан
    4 комментария
  • Как в Python вывести таблицу как в примере?

    Vindicar
    @Vindicar
    RTFM!
    Вывести в консоль?
    Ну я бы подходил к этому так.
    1. Преобразовать все выводимые данные в строки и разбить их по переносам строки.
    2. Определить наибольшую ширину каждого столбца с учётом переносов строки. Для каждой ячейки вычисляем наибольшую ширину строки, потом ищем максимум по столбцу. Можно добавить 1-2 символа как "поля", если надо.
    3. При выводе строки, выводим строки ячеек вместе, используя itertools.zip_longest(). Т.е. сначала первую строку в каждой ячейке, потом вторую, и т.д. Если получили вместо одной из строк None, значит в этой ячейке строки уже закончились - выводим пробелы.
    Ширину вывода каждой ячейки мы знаем из пункта 2, выровнять значение пробелами - тривиально.

    # -*- coding: utf-8 -*-
    import typing as t
    import itertools
    
    def print_table(headers: t.Dict[str, str], data: t.Iterable[t.Dict[str, str]]) -> None:
        keys: t.List[str] = list(headers.keys()) #список ключей в таблице - чтобы сохранять порядок столбцов
        split_data: t.List[t.Dict[str, t.List[str]]] = [] #ячейки, разбитые на строки
        max_widths: t.Dict[str, int] = { key:len(value) for key,value in headers.items() } #ширина каждого столбца в таблице
        for line in data:
            #разбиваем ячейки строки на текстовые строки по \n
            split_line: t.Dict[str, t.List[str]] = { key:value.splitlines() for key,value in line.items() }
            #обновляем ширину столбцов, если надо
            for key in keys:
                new_width = max(map(len, split_line.get(key, [''])))
                if new_width > max_widths[key]:
                    max_widths[key] = new_width
            split_data.append(split_line)
        #выводим заголовки
        for key in keys:
            print(f'{{0:<{max_widths[key]}}}'.format(headers[key]), end='|') #можно вместо | поставить пробел
        print()
        print( '+'.join('-'*v for v in max_widths.values()) + '|') #разделитель заголовка и тела таблицы
        #выводим строки таблицы
        for row in split_data:
            for parts in itertools.zip_longest(*(row[key] for key in keys)):
                #parts - кортеж, где каждый элемент либо строка в очередной ячейке, либо None
                for key,part in zip(keys, parts):
                    #None означает, что в этой ячейке строки текста уже кончились
                    print(f'{{0:<{max_widths[key]}}}'.format(part if part is not None else ''), end='|')
                print()
            print( '+'.join('-'*v for v in max_widths.values())  + '|') #разделитель строк, если надо
    
    data = [
        {'ip':'192.168.0.2', 'model':'DES-3200-26', 'uptime': '3d 12:03:05', 'uplink state': '25: up\n26:up', 'uplink err': '0\n11', 'uplink mcast': '24560\n113'},
        {'ip':'192.168.0.2', 'model':'DES-3200-52', 'uptime': '1d 04:00:15', 'uplink state': '49: up\n50:up\n51:down\n52:down', 'uplink err': '10\n1133\n0\n0', 'uplink mcast': '5497812\n3145\n0\n0'},
    ]
    headers = {'ip': 'IP address', 'model': 'Model', 'uptime': 'Uptime', 'uplink state': 'Uplink state', 'uplink err': 'Uplink errors', 'uplink mcast': 'Uplink M-cast'}
    print_table(headers, data)

    IP address |Model      |Uptime     |Uplink state|Uplink errors|Uplink M-cast|
    -----------+-----------+-----------+------------+-------------+-------------|
    192.168.0.2|DES-3200-26|3d 12:03:05|25: up      |0            |24560        |
               |           |           |26:up       |11           |113          |
    -----------+-----------+-----------+------------+-------------+-------------|
    192.168.0.2|DES-3200-52|1d 04:00:15|49: up      |10           |5497812      |
               |           |           |50:up       |1133         |3145         |
               |           |           |51:down     |0            |0            |
               |           |           |52:down     |0            |0            |
    -----------+-----------+-----------+------------+-------------+-------------|
    Ответ написан
    2 комментария
  • Почему Python такой, как им пользуются?

    Vindicar
    @Vindicar
    RTFM!
    Например, чтобы запустить написанный код на другом пк нужно притащить туда интерпретатор python, накатить все библиотеки которые используются в моем творении и запустить скрипт, и будет все это крутиться в консоли.

    1. Правильно, если нужен именно упакованный exe, используется PyInstaller, хотя это и не очень оптимально.
    2. Файлы с расширением .pyw запускаются без окна консоли (на Windows). На Linux системах есть свои средства подавления окна консоли.
    3. Чтобы запустить программу на .NET, нужно, чтобы была установлена правильная версия .NET Framework. Чтобы запустить программу, скомпилированную на C++ с помощью Visual Studio, под виндой обычно требуется MSVC Redistributable правильной версии. Они могут быть предустановлены, но это не факт. Так что вопрос зависимостей есть не только в питоне. Питон хотя бы имеет пакетный менеджер для таких вещей, и в большинстве случаев установка зависимостей сводится как pip install foo bar baz.
    А как им пользуются, запускают код, он "крутиться" что то там делает или вызывают питоновские скрипты из других языков.

    Как правило, самостоятельно, в виртуальном окружении типа venv или docker. Если скрипту не требуются специфичные зависимости, можно использовать интерпретатор питона, установленный прямо в системе.
    Но есть механизмы, позволяющие программе на C++ встраивать в себя интерпретатор питона - тогда можно использовать питон для написания скриптов для автоматизации этой программы, например. Это используется реже.
    Ответ написан
    Комментировать
  • Как результат каждого процесса записать в отдельный соответствующий файл (Multiprocessing, Python)?

    Vindicar
    @Vindicar
    RTFM!
    for i,item in enumerate(data_group):
        file_name = f"{i}.txt"
        #ну и далее по тексту

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

    Vindicar
    @Vindicar
    RTFM!
    Ты пробовал вывести str(sys.stdin) на экран?
    >>> str(sys.stdin)
    "<_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>"


    sys.stdin - это файл, открытый в текстовом режиме. Работай с ним как с файлом.
    Ответ написан
    1 комментарий
  • Вход на сайт и парсинг данных, как реализовать?

    Vindicar
    @Vindicar
    RTFM!
    Какую библиотеку используешь? Смотришь, какой запрос к сайту выполняется при авторизации в браузере, имитируешь его, сохраняешь возвращённые сайтом куки, потом эти куки указываешь при последующих запросах.
    Ответ написан
    Комментировать