Ответы пользователя по тегу Python
  • Не создается срез в python. Ошибка TypeError?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не разбираешься в областях видимости переменных.
    У тебя описаны глобальные переменные:
    downtime_border1 = ''  # строка!
    downtime_border2 = '' # строка!

    А ты делаешь присваивание локальным переменным
    # Присваивание значения 1 границе
        downtime_border1 = string.find('дн', time_border2)-2
    # 2 границе
        downtime_border2 = string.rfind('.', downtime_border1)

    Это никак не затронет глобальные переменные с тем же именем, а только "заслонит" их внутри функции. Читай про ключевое слово global.
    А лучше - переделай код так, чтобы не использовать глобальные переменные вообще. Используй возвращаемые значения.
    А ещё лучше - перепиши код так, чтобы передавать минимум данных. Например, тебе точно нужны отдельные функции template() и losed()? Их нельзя объединить в одну?

    А совсем хорошо - освой регулярные выражения. Это здорово упростит решаемую тобой задачу.
    Ответ написан
  • Насколько реально создать музыкального дискорд бота который поддерживает воспроизведение музыки из вк,яндекса и youtube?

    Vindicar
    @Vindicar
    RTFM!
    Проблема поддержки ресурсов только в том, чтобы выцарапать с них медиа-поток. Ютуб его точно прячет (именно из-за любителей пограбить музыку/видео), остальные, полагаю, тоже.
    Если спроектируешь бота как следует, то проблем не будет. Спрячешь все ресурсы за обёртки с одинаковым программным интерфейсом, и с точки зрения остальной части бота работа с тремя ресурсами ничем не будет отличаться.
    Язык - тот, который тебе знаком, и на котором есть нужные библиотеки.
    Ответ написан
    Комментировать
  • Пытаюсь сделать подсчет количество сообщений но не выходит discord.py?

    Vindicar
    @Vindicar
    RTFM!
    1. Запрос CREATE TABLE не нужно делать при каждом сообщении. Перенеси его в код, который вполняется при запуске бота.
    2. Не используй f-строки для формирования запросов. Почитай про подстановку параметров запроса.
    3. cur.execute() не вернёт тебе None или данные. Вызови метод fetchone(), чтобы получить одну строку данных, или None если данных нет.
    4. Если ты используешь sqlite, почитай про синтаксис INSERT ON CONFLICT DO UPDATE. Позволяет выполнить операцию в духе "создай запись, а если такая уже есть - обнови её", и тем самым свернуть твой if в один запрос. В других СУБД есть аналогичная возможность.
    Ответ написан
  • Python BS4. как получить ссылку из?

    Vindicar
    @Vindicar
    RTFM!
    1. В выбранном тобой фрагменте дерева найти тег a. Как искать теги, ты уже знаешь, раз код написал.
    2. Взять атрибут href.
    Ответ написан
    Комментировать
  • Возникает проблема с фреймворком opencv python, почему?

    Vindicar
    @Vindicar
    RTFM!
    Проверяй значение ret. Если оно не истинно, то кадр получить не удалось. Что в этом случае будет в img - хороший вопрос.
    Может быть, камера занята каким-то другим процессом. Например, предыдущей копией твоей программы.
    Ответ написан
    Комментировать
  • Как обращаться к атрибутам надкласса?

    Vindicar
    @Vindicar
    RTFM!
    То, что класс A определён внутри C, ещё не значит, что будет хоть какая-то связь между экземплярами этих классов. У тебя может быть экземпляр A, который создан просто вот так a = C.A(), отдельно от класса C.
    Так что ответ такой: если ты явно передаешь ссылку на экземпляр класса C экземпляру класса A, то последний сможет пользоваться этой ссылкой, точно так же как и любой другой переданной ссылкой на объект. В том числе обращаться к атрибутам, вызывать методы и пр.
    Если ты явно ссылку не передаёшь, то ей взяться будет неоткуда.
    Ответ написан
    Комментировать
  • Как можно оптимизировать процесс?

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

    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 комментарий