• Выполнить другую функцию если первая выполняется дольше 15 секунд?

    Vindicar
    @Vindicar
    RTFM!
    Тривиально. Что-то вроде
    async def notify_long_task():
        'Выполняет оповещение о длинной операции.'
        await asyncio.sleep(15.0)  # ждём таймаут
        await send_notification('Извините, я что-то туплю.')  # оповещаем
    
    async def actual_long_task():
        notification = asyncio.create_task(notify_long_task())  # планируем оповестить
        await perform_long_task()  # потенциально долгая операция
        notification.cancel()  # отменяем оповещение, если оно ещё не сработало.
    Ответ написан
    Комментировать
  • Задача с перестановкой спичек?

    Vindicar
    @Vindicar
    RTFM!
    Шаг 1. Опиши каждую цифру числа как бинарную строку, где каждому биту соответствует спичка в цифре. 1 - спичка есть, 0 - нет. Тебе понадобится 7 бит на цифру, можно округлить до 8 и считать 8й бит всегда 0. Это, по сути, семисегментный индикатор.
    Шаг 2. Научись преобразовывать число из нескольких цифр в длинную бинарную строку. Если гарантируется, что число 4значное или меньше, то эта строка будет выражена как 4 байтовое беззнаковое целое.
    Шаг 3. Если сделать XOR между двумя такими строками, то значение 1 примут только биты, соответствующие пропавшим/появившимся спичкам. Посчитать число единичных бит нетрудно.
    Шаг 4. Перебирай числа по возрастанию, для очередного числа построй битовую строку. Если число единичных бит в строках равно (для их "записи" используется равное число спичек), а число единичных бит в XOR равно четырём (две спички переложили = две спички пропали + две появились), число подходит.

    За скорость, правда, не ручаюсь. Но есть возможности по оптимизации подсчёта единичных бит, и по оптимизации перебора (перебирать не все числа, а только те, которые можно выразить тем же числом спичек).
    Ответ написан
  • Как присвоить переменной значение локальной переменной?

    Vindicar
    @Vindicar
    RTFM!
    Ты написал глупость. Вот этот код
    conn = sqlite3.connect('shop.db')
    cursor = conn.cursor()
    nazvanie_tovara = nazvanie
    cost_tovara = cost
    data = [nazvanie_tovara, cost_tovara]
    cursor.execute("INSERT INTO tovary VALUES(?, ?);", data)
    conn.commit()

    выполнится один раз, перед запуском бота, до срабатывания обработчиков.
    Что-то мне подсказывает, что ты не этого хотел.

    Внеси это внутрь обработчика команды, тогда и глобальная переменная не понадобится.
    Ответ написан
  • Не получается запустить юниттест, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Что-то я не пойму. Ты вызываешь free_space_algorithm() как метод экземпляра класса FurnitureArrangement.
    А в определении выше это не метод, это свободно стоящая функция.
    Или сделай её методом (добавь обязательный параметр self), или пометь её декоратором @staticmethod, или вынеси её из класса FurnitureArrangement и вызывай её как просто функцию.
    Ответ написан
    3 комментария
  • Как сделать Embed?

    Vindicar
    @Vindicar
    RTFM!
    Окей, гугл, disnake Embed.
    Получаешь ссылку с подробным туториалом, читаешь, осознаёшь.
    А ещё - учишься сначала гуглить, а только потом задавать вопросы.
    Ответ написан
  • Как сделать авто-перезагрузку кода Python?

    Vindicar
    @Vindicar
    RTFM!
    Быстрое и грязное решение
    while True:
        try:
            ... # твой код
        except Exception as err:
            print(err)
    Ответ написан
    2 комментария
  • Как установить библиотеку с github?

    Vindicar
    @Vindicar
    RTFM!
    Зависимости не установлены. Вообще обрати внимание, что в папке dist/python лежит файл .whl - этот wheel можно установить через менеджер пакетов pip, просто как pip install filename.whl. Тогда pip должен сам подтянуть нужные зависимости.
    Ответ написан
    2 комментария
  • Как отправить в телеграм бот определенные данные из полученных запросом?

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

    Это знание цикла for, ветвления и базовых операций со списками и словарями, тащем-то. Такие азы стоит выучить до того как заниматься ботошлёпством.
    Ответ написан
    3 комментария
  • Как хранить общие для всех пользователей переменные в aiogram?

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

    Vindicar
    @Vindicar
    RTFM!
    Вообще проблема в задании: фраза "какое количество символов из S входит в J" не содержит пояснения, могут ли быть повторы в строках S и J, и должны ли они учитываться. Я предполагаю, что повторы в J учитываться не должны, а повторы в S - должны.

    В твоём коде, если в строке J есть повторяющиеся символы, код даст неправильный ответ. Пример:
    a = 'AAB'
    b = 'AcdefBfedc'

    Твой код даст ответ 3, а не 2.

    Попробуй проще - пройди по символам строки b, для каждого символа проверь, входит ли он в строку a.
    Ответ написан
    Комментировать
  • Можно ли получить видео с вебкамеры?

    Vindicar
    @Vindicar
    RTFM!
    Если ты имеешь ввиду отправку видеопотока, то тут очень много "но".
    Ты просишь ссылку? Это подразумевает, что на целевой машине должен быть развёрнут сервер для потокового вещания, и он должен быть доступен извне, из интернета. Это условие будет выполняться?
    Или же у тебя должен быть развёрнут какой-то промежуточный сервер в интернете, на который скрипт будет коннектиться, и которому будет передавать видео для ретрансляции.

    Вообще это реализуется и без питона, например с помощью всё того же ffmpeg. Но в использование ffmpeg тоже нужно въезжать.
    Ответ написан
    Комментировать
  • Какую библиотеку использовать?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужно именно на питоне?

    Потому что имхо, это можно решить, если оформить приложение как службу Windows с помощью NSSM. Оно позволяет настроить автоперезапуск, в том числе.
    Ну а под никсами есть systemd или что-то подобное.

    Если нужен именно свой скрипт, то psutil.
    Ответ написан
    2 комментария
  • Как сделать удаление юзера после его выхода из бота, Telegram?

    Vindicar
    @Vindicar
    RTFM!
    1. Форматируй код как положено правилами сайта, кнопкой </>. Нечитаемо же.
    2. Что значит "не работает"? Просто ничего не делает? Останавливается с сообщением об uncaught exception? Компьютер спрыгивает со стола и начинает искать Сару Коннор? Программа может не работать многими способами, приводи описание симптомов и сообщения об ошибках. Сообщения об ошибках тоже стоит обернуть кнопкой </>.
    3. Я подозреваю, что дело именно в uncaught exception. В этом случае рекомендую почитать учебник по Питону, раздел о работе с исключениями. Хотя бы вот этот. Оберни отправку сообщения в блок try-except, при возникновении ошибки можно либо просто игнорировать её, либо добавлять в список "неудавшихся".
    Дальше с этим списком уже можно будет работать, например, попытаться убрать все "неудачные" user ID из joineduser, и записать очищенный список обратно в /home/example.txt.
    Ответ написан
    2 комментария
  • Как поправить код python?

    Vindicar
    @Vindicar
    RTFM!
    Что такое wr() и зачем оно нужно вообще?
    Просто почитай как работать с файлами в питоне, там никакие функции-обёртки не нужны.
    Ответ написан
  • Как исправить ошибку can't multiply sequence by non-int of type 'float'?

    Vindicar
    @Vindicar
    RTFM!
    Код феерический.
    #?!??!?!
        for i in array:
            for j in i:
                if array.index(i)==i.index(j):
                    ans+=[j]

    не будет работать, если в строке матрицы одно и то же число встречается дважды.
    Ну и зачем перебирать столбцы, если тебе уже известен индекс столбца - он равен индексу строки? Функцию range() ты вроде уже знаешь, освой метод append() списка, заодно.
    diagonal = []
    for i in range(len(array)):  # цикл по номерам строк матрицы
        diagonal.append(array[i, i])  # берём элементы, у которых номер строки и столбца одинаков


    ans[i]*m[i:]
    Ты умножаешь элемент массива ans[i] на список строк чего-то по имени m. Что такое m, оно же не определено в функции?
    X = []
    for i in range(len(array)):  # перебираем номера строк массива array
        x_item = 0  # скалярное произведение будет тут
        for j in range(len(diagonal)):  # перебираем номера элементов диагонали
            x_item += diagonal[j] * array[i, j]  # добавляем очередную часть произведения
        X.append(x_item)

    То же самое можно записать короче, например, так:
    X = []
    for row in array:
        X.append(sum( d*r for d, r in zip(diagonal, row) ))

    Но это сложнее для понимания новичку.
    Ответ написан
  • Корректно ли в C++ называть стек статической памятью?

    Vindicar
    @Vindicar
    RTFM!
    Кирилл Гусарев, по вашему определению статическая память - это секция инициализированных данных exeшника.
    ЕМНИП, C++ в эту секцию кладёт инициализирвоанные глобальные переменные. Насчёт статических локальных не уверен.

    Вообще программа имеет доступ к четырём видам памяти:
    - секция инициализированных данных выделяется загрузчиком, её содержимое загружается из EXE файла, где оно хранится как образ.
    - секция неинициализированных данных выделяется загрузчиком, её содержимое забивается нулями. В EXE файле хранится только её размер.
    - Насчёт стека не уверен. Вроде со стеком главного потока исполнения то же самое, его размер прописан в экзешнике. Но кто его выделяет - загрузчик или рантайм языка... я подозреваю, что загрузчик. Стеки дополнительных потоков выделяются по запросу программы.
    - куча выделяется по ходу работы программы. Менджер кучи Windows создаёт одну кучу для процесса, дальнейшее управление кучами - дело самого процесса.

    Всё это - только для виндовых EXE. Про линукс я не в курсе.

    Стек статический в том смысле, что его размер в норме не меняется - блок памяти выделяется один раз, и просто используется большая или меньшая его часть.
    Ответ написан
    Комментировать
  • Почему выводится ошибка и как ее исправить Sqlite3 Disnake?

    Vindicar
    @Vindicar
    RTFM!
    Запомни простую вещь: никогда, никогда не формируй SQL-запросы форматированием строк. Ни f-строками, ни методом format(), ни %-форматированием. Ты сейчас на своей шкуре почувствовал, почему этого не стоит делать.
    И читай документаци, там написано как правильно. Более того, есть отдельный раздел как раз об этом. RTFM!
    Ответ написан
    Комментировать
  • Почему не получаю обратной связи от бота?

    Vindicar
    @Vindicar
    RTFM!
    Может, всё-таки ContentType.AUDIO, а не VOICE?
    Ответ написан
  • Как / возможно ли вытащить аргуметы из класса?

    Vindicar
    @Vindicar
    RTFM!
    Функция dir() покажет, какие поля и методы есть в классе. Пробуй.
    Ответ написан
    Комментировать
  • Как проверить с помощью Python открыт ли определенный сайт на ПК или нет?

    Vindicar
    @Vindicar
    RTFM!
    1. Получить список IP адресов, ассоциированных с целевым сайтом. В простейшем случае - через DNS запрос, но в некоторых случаях это может быть сложнее (например, сайт использует CDN).
    2. Получить список активных TCP соединений, у которых удалённый порт 443 (опционально, 80). Определить удалённые адреса.
    3. Проверить, пересекаются ли два множества адресов.
    Этот подход обломается, если браузер использует прокси, или если на машине поднят VPN.

    Альтернативно, установить системный прокси сервер, который будет отслеживать открываемые сайты. Но браузер не обязан его использовать, так что это тоже ненадёжно.
    Ответ написан
    2 комментария