• Как можно оптимизировать процесс?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. я правильно понял, что тебе нужно вывести делители для тех чисел между 50М и 60М, у которых 6 делителей и в числе делителей присутствует 911?

    Начни с другого конца. Раз 911 должен присутствовать, то нет нужды перебирать все числа между 50М и 60М - достаточно перебирать только кратные 911. Их будет чуть меньше 11 тысяч, а не 10 миллионов.
    for d in range(50000000 // 911 + 1, 60000000 // 911 + 1):

    Далее разлагаешь d на делители, если делителей ровно 5 - добавляешь в список делителей 911 и выводишь.
    Ответ написан
  • Как создать профили персонажей?

    Vindicar
    @Vindicar
    RTFM!
    1. Определяешь сущности, сведения о которых нужно будет хранить: персонаж, предмет, и т.п.
    2. Определяешь сведения, которые нужно хранить о каждой из сущностей.
    2б. Определяешь способы идентификации каждой сущности - например, назначаешь порядковый номер.
    3. Определяешь связи между персонажами. Например, является ли предмет неотъемлемой частью персонажа?
    3. Осваиваешь какую-нибудь простую ORM, типа peewee или sqlalchemy. Читаешь туториалы, пробуешь написать что-то простое для начала.
    4. Описываешь сущности как модели в рамках ORM. Описываешь связи между ними.
    5. Описываешь операции (скажем, просмотр/создание/удаление персонажа) как запросы к моделям.
    6. Привязываешь операции к командам бота.

    Как-то так.
    Ответ написан
    Комментировать
  • Что не так с этим кодом?

    Vindicar
    @Vindicar
    RTFM!
    @client.event
    async def info(ctx):


    Может, всё-таки @bot.command?
    Ответ написан
  • Как изменить код чтобы список выводил слово нормально ,а не с абзаца каждую букву?

    Vindicar
    @Vindicar
    RTFM!
    А зачем так делать?
    Не проще будет prods_listbox.insert(END, message_entry.get())
    Ответ написан
    Комментировать
  • Как создать многопользовательского бота в Telegram на Python?

    Vindicar
    @Vindicar
    RTFM!
    Логика очень простая. При поступлении события от пользователя (например, команды) нужно загрузить состояние этого пользователя из БД, а потом на основании этого состояния уже решать, как обработать событие. Например, вызывая разные функции обработки.

    Например, если бот должен поприветствовать пользователя, а потом узнать у него имя и возраст, то будет 4 возможных состояния:
    1. пользователь нам неизвестен, ждём начала работы
    2. приветствие отправлено, ожидаем ввод имени
    3. введено имя, ожидаем ввод возраста
    4. введено имя и возраст
    Тогда у нас будет 4 возможных реакции, в зависимости от текущего состояния пользователя. И мы должны будем обновлять состояние пользователя при успешном срабатывании реакции.

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

    Vindicar
    @Vindicar
    RTFM!
    Распарсить текст JSON в структуру данных (см. модуль json), дальше пройтись по ключам списков и словарей (см. основные структуры данных Python).
    Ответ написан
  • Нужно создать список чтобы элементы в нем были из ввода в message .В чем ошибка?

    Vindicar
    @Vindicar
    RTFM!
    ты пересоздаёшь Listbox() при каждом щелчке на кнопке, зачем?
    Создай его один раз, а потом уже обращайся к нему.

    a = msg.pack()
    Что это вообще такое?
    Ответ написан
    Комментировать
  • Почему не показывается картинки в окне tkinter?

    Vindicar
    @Vindicar
    RTFM!
    image = ImageTk.PhotoImage(Image.open("tk0.jpg"))
    Потому что ты ничего не делаешь с полученным объектом image?
    Без отступов понять невозможно где у тебя что, оформи код.
    Ответ написан
  • Есть ли какой-то способ прохода по заданным в переменной состояниям в AIOgramm Python?

    Vindicar
    @Vindicar
    RTFM!
    photo1 = State() #3 загрузка фото1 и.т.д
    photo2 = State()
    photo3 = State()

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

    Vindicar
    @Vindicar
    RTFM!
    Погуглить пробовал?
    Найдешь pyautogui или pywinauto.
    Ответ написан
    Комментировать
  • Как сгенерировать словарь в цикле?

    Vindicar
    @Vindicar
    RTFM!
    Что-то такое?
    result = dict(
        itertools.chain.from_iterable(
            get_groups_assets_in_campaign_data(str(customer_id), campaign_ids).items() 
            for customer_id, campaign_ids in campaigns_per_customer_id.items()
        )
    )

    Но прямо скажу, это говнострочник. Цикл for понятнее будет.
    Ответ написан
    1 комментарий
  • Как завершить функцию в модуле Telebot на Python?

    Vindicar
    @Vindicar
    RTFM!
    city()
    Зачем вообще этот вызов? Ты же прописал city() как обработчик события.
    Ответ написан
  • Как сделать так чтобы фраза не повторялась?

    Vindicar
    @Vindicar
    RTFM!
    MrHaska531, тебе нужно понять, что такое время жизни переменной/объекта, и представлять себе процесс выполнения программы.
    get_rept() выполняется с самого начала каждый раз, когда ты вводишь команду /get, и выполняется до конца.
    a - локальная переменная, а потому она создаётся в начале вызова get_rept() и удаляется по завершению выполнения.
    Как следствие, твои условия не имеют смысла, они все будут отрабатывать одно за другим во время обработки одного (!) сообщения /get.
    Если ты хочешь сохранить состояние программы между вызовами get_rept(), тебе придётся созранять данные где-то снаружи get_rept().

    Очень упрощённый пример:
    a = 0  # эта переменная будет создана при запускек бота, и будет жить, пока он работает
    @bot.message_handler(commands=['get'])
    def get_rept(message):
        global a  # мы будем ссылаться на a снаружи функции, в т.ч. перезаписывать её.
        if a == 0:  # пользователь вводит команду первый раз
            ...  # делаем что нужно
            a = 1  # запоминаем
        elif a == 1:  # обрати внимание, мы делаем если-иначе!
            # в противном случае если строка a = 1 отработает, то и это условие тоже отработает
            ...  # пользователь вводит команду второй раз, делаем что нужно
        # ну и так далее


    Проблема этого кода в том, что переменная a - одна на всего бота. А потому бот не будет различать, который пользователь уже ввёл команду, а который ещё нет. После первого же ввода /get команда всегда бдует считать, что она уже была введена (до перезапуска бота).

    Можно модифицировать это так:
    users = {}  # словарь пользователей, вводивших команду
    @bot.message_handler(commands=['get'])
    def get_rept(message):
        global users
        # получаем предыдущее состояние для того пользователя, который ввёл команду
        state = users.get(message.chat.id, 0)  # если пользователь ещё не вводил её, получим 0.
        if state == 0:  # команда введена в первый раз
            ...  # делаем что хотим
            users[message.chat.id] = 1  # обновляем состояние данного пользователя
        # ну и так далее

    Этот подход уже лучше, но он имеет недостаток: наше состояние хранится в оперативной памяти. Бот забудет значение переменной state при перезапуске.
    Значит, нам нужно как-то сохранять state. Мы могли бы:
    а) сохранять state, скажем, в json файл при каждом изменении (и загружать её из файла при запуске бота). Колхозное решение, хотя и простое.
    б) более правильно, освоить работу с простой СУБД, например модуль sqlite3, и сохранять состояние в таблице в базе данных.

    aiogram также имеет механизм register_next_step_handler(). Он позволяет вызывать разные функции в ответ на одно и то же событие (например, сообщение), приходящее несколько раз. Но при этом состояние (т.е. какую функцию вызывать дальше) не сохраняется при перезапуске бота. Т.е. это в чём-то напоминает вариант со словарём.
    Ответ написан
    1 комментарий
  • Как узнать сколько часов осталось до завтра на Python?

    Vindicar
    @Vindicar
    RTFM!
    Модуль datetime в помощь.
    Используешь метод datetime.datetime.now() чтобы узнать текущее время.
    Зануляешь часы, минуты и секунды, потом добавляешь к этому времени 1 день (см. класс datetime.timedelta). Это будет полночь следующего дня.
    Вычитаешь из полученного времени то, что ты получил из now() в начале, получаешь объект timedelta, содержащий временной интервал до завтра. У него есть метод totalseconds(), который вернёт количество секунд в этом интервале. Делишь результат на 3600, получаешь количество часов (дробное). Округлишь, если надо.
    Ответ написан
    Комментировать
  • Flask Загрузка фото в базу данных и вывод?

    Vindicar
    @Vindicar
    RTFM!
    А) Файл переименовать уникальным именем (хэш?), поместить в предназначенный для этих целей каталог. Оригинальное имя файла и его имя для хранения поместить в базу.
    Б) Использовать поле типа BLOB (в терминах sqlalchemy - Binary).
    Ответ написан
  • Как узнать координаты второго отрезка вектора зная его длинну и начальные координаты?

    Vindicar
    @Vindicar
    RTFM!
    В такой постановке задача не имеет единственного решения.
    Любая точка на окружности с центром A и радиусом, равным искомому расстоянию, будет удовлетворять твоему условию.
    Тебе нужно либо хранить угол между осью X и вектором AB (полярные координаты), либо хранить отдельно вектор B - A (отдельно x и y).
    Ответ написан
    Комментировать
  • Как через python узнать кто подключался к твоему wifi?

    Vindicar
    @Vindicar
    RTFM!
    Что значит "кто подключался"? Универсального ответа тут нет.
    Максимум можно получить MAC-адреса клиентов, но следует помнить, что одни устройства (например, смартфоны) генерируют случайный MAC перед подключением, а на других его обычно можно сменить.
    Если вайфай-точка ведёт логи, эту информацию может быть можно там найти. Но это зависит от того, что за точка - то ли это роутер, то ли это хотспот, поднятый телефоном, то ли ещё что. Если логов нет, то и ловить нечего.
    Если действовать, пока клиент подключён, можно выловить чуть-чуть больше информации в области того, какие сайты посещаются. Но тут немного, так как сайты сейчас шифруются как могут. И то если сбор этой информации настроен.
    Ответ написан
    Комментировать
  • Как исправить ошибку в присвоении переменной?

    Vindicar
    @Vindicar
    RTFM!
    for code in store:
    Для словаря цикл for перебирает ключи, т.е. '12345', '23456'...
    А ты как будто что-то другое перебираешь, типа
    for item in store[code]:
        print(item['price'], 'x', item['quantity'])
    Ответ написан
    1 комментарий
  • Как заменить цвет пикселей cv2?

    Vindicar
    @Vindicar
    RTFM!
    В cv2 изображения - это массивы numpy, так что все трюки с индексацией из numpy работают. Очень советую их изучить.
    find = 1,2,3 # какие значения заменять
    replace = 4,5,6 # на какие значения заменять
    mask = (bgr == find)[..., 0]
    bgr[mask] = replace
    Ответ написан
    8 комментариев
  • Как узнать онлайн на сервере в CS:GO с помощью Python?

    Vindicar
    @Vindicar
    RTFM!
    Гуглить пробовал?
    Вот кроме шуток, первый же запрос по "CS:GO query online python" меня отправил в доки к пакету python-valve.
    И там даже есть пример кода, которому нужно указать вместо ... адрес и порт, как я понимаю.
    import valve.source.a2s
    
    SERVER_ADDRESS = (..., ...)
    
    with valve.source.a2s.ServerQuerier(SERVER_ADDRESS) as server:
        info = server.info()
        players = server.players()
    
    print("{player_count}/{max_players} {server_name}".format(**info))
    for player in sorted(players["players"],
                         key=lambda p: p["score"], reverse=True):
        print("{score} {name}".format(**player))
    Ответ написан
    1 комментарий