Задать вопрос
  • RuntimeError: There is no current event loop in thread 'Thread-2'. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Мешать многопоточность с асинхронностью - плохая идея. Зачем тебе это потребовалось?
    Если нужно выполнить длительную синхронную задачу в отдельном потоке, используй loop.run_in_executor() - он позволяет аккуратно представить выполнение потока как обычную асинхронную задачу.
    Ответ написан
    Комментировать
  • Решил создать своего дискорд бота, выдает ошибку импортирования модуля discord, что делать?

    Vindicar
    @Vindicar
    RTFM!
    mshslv19, сколько интерпретаторов питона в системе? Используешь ли venv? Среда PyCharm любит создавать новое виртуальное окружение (отдельный интерпретатор питона со своими пакетами) под каждый проект.
    Вообще симптомы похожи на путаницу в интепретаторах, когда ставишь пакеты в общесистемный, а запускаешь скрипт в локальном.
    Ответ написан
    Комментировать
  • Что из себя представляет интернет соединение?

    Vindicar
    @Vindicar
    RTFM!
    Поток (в смысле поток байт) - это не более чем удобная абстракция.
    На уровне IP протокола данные маршрутизируются (передаются от узла к узлу) отдельными пакетами, независимо друг от друга.
    Протокол UDP оставляет это как есть - каждая датаграмма будет отдельным пакетом. Как следствие, есть ненулевая вероятность, что какие-то датаграммы могут потеряться, или дойти не в том же порядке, в каком были отправлены.
    Протокол TCP реализует абстракцию "поток байт". Грубо говоря, помимо передаваемых данных, он вставляет в каждый пакет контрольную сумму и номер. Таким образом получатель может проверить целостность пакета, и собрать пакеты в правильном порядке. Если какого-то пакета нет или он повреждён, получатель может запросить повторную отправку этого пакета. Всё это происходит "под капотом" протокола TCP, так что приложение, которое с ним работает, не обязано об этом думать. С его точки зрения, отправленные другой стороной данные приходят к нему в том же порядке, в котором они были отправлены - либо оно получает явное оповещение об ошибке передачи.
    Установка соединения требуется только для того, чтобы "договориться" о нумерации пакетов и других деталях передачи, т.е. задать начальное состояние.
    Ответ написан
    Комментировать
  • BS4 не видит полный код страницы?

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

    Значит дело не в BS, а в том как ты выводишь содержимое в консоль.
    Подскажу в чём может быть дело:
    >>> print("foo\rbar")
    bar

    Символ \n - это перевод строки, но \r - возврат каретки. Если в искомой строке есть \r, но нет \n, то все строки будут выводиться поверх друг друга.
    Ответ написан
    1 комментарий
  • Как в discord переименовать название сервера по команде?

    Vindicar
    @Vindicar
    RTFM!
    await ctx.message.guild(name)
    Ну конечно так не будет работать. Ты доки вообще читал?
    Ответ написан
    Комментировать
  • Как скачать сайт основанный на js фреймворке?

    Vindicar
    @Vindicar
    RTFM!
    Два способа.
    1. Если сайт не борется с парсерами, выясни какая цепочка ajax-запросов требуется для получения нужных данных, и делай их сам. Это утомительно поначалу, но реализация будет менее требовательна к ресурсам.

    2. Если борется, используй безголовый (или не очень безголовый) браузер, который умеет выполнять JS.
    Для питона есть selenium, для других языков есть наверняка свои аналоги.
    Ответ написан
    Комментировать
  • Не работает on_member_join, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Интент member забыл включить поди?
    import discord
    intents = discord.Intents.all()
    discord.member = True
    bot = commands.Bot(command_prefix="!", intents = intents)

    И на странице где ключ от бота получал тоже настрой интенты.
    Ответ написан
  • Как исправить ошибку TypeError: 'type' object is not subscriptable?

    Vindicar
    @Vindicar
    RTFM!
    Уффф. Тут уже речь про основы синтаксиса питона.
    Ваш первый код делает следующее.
    num = list( #построить список из последовательности
        map( #вызываем функцию map()
            int, #первый параметр
            f.read().split() #второй параметр
        )
    )

    А второй код делает (точнее пытается) вот что
    num = list( #построить список из последовательности
        map[ #обращаемся к объекту map и пытаемся получить значение по ключу
            int, #первый элемент кортежа-ключа
            f.read().split() #второй элемент кортежа-ключа
        ]
    )

    Так как map не является словарём или подобной коллекцией, то конечно это не работает, и генерирует именно такую ошибку, которую вы указали.
    Я не пойму, откуда вообще взялась идея что можно просто заменить в вызове функции круглые скобки на квадратные, если у них совершенно разная семантика.
    Ну и да, не может быть ничего кроме списка на выходе, так как результат работы map() (а это будет объект-генератор) явно преобразуется в список.
    В общем, выше правильно посоветовали - почитайте учебник, того же Марка Лутца, "Изучаем Питон", хотя бы 4е издание. По-крайней мере такие ошибки отпадут.
    Ответ написан
    Комментировать
  • Как написать логи для дискорд бота на pythone?

    Vindicar
    @Vindicar
    RTFM!
    Что значит логи в сервере? Выделить канал, где будет писать только бот?
    Ну тогда берешь ID этого канала, получаешь по нему объект канала (как - зависит от библиотеки, ты не написал которую используешь). Сохраняешь этот объект в глобальной переменной, при необходимости записать в лог - отправляешь сообщение в этот канал.
    Только это довольно непрактично - медленно, и при проблемах с соединением никакие логи не появятся.
    Ответ написан
    Комментировать
  • Как оптимизировать программу?

    Vindicar
    @Vindicar
    RTFM!
    Словесную формулировку задачи можно? Потому что тут мало что можно оптимизировать...
    Разве что попытаться вычислить количество подходящих чисел без перебора.
    Например, наименьшее число, большее или равное A, делящееся на C, будет
    AC = (A // C + (1 if A % C else 0)) * C
    Аналогично, наибольшее число, меньшее B, делящееся на C, будет
    BC = ((B-1) // C) * C
    Тогда число чисел, делящихся на C, в интервале A...B будет
    XC = (BC - AC) // C + 1

    По аналогии можно найти XD для D, после чего искомое количество чисел можно оценить как (B - A) - XC - XD.
    Но трудность в том, что некоторые числа могут делиться и на C, и на D. Если так, то указанная оценка будет больше правильной, и нужно будет вычислить XCD = (BCD - ACD) // (CD) + 1, где BCD и ACD вычисляются аналогично вышеуказанным AC и BC, только для величины CD - наименьшего общего кратного C и D. В итоге получим ответ (B - A) - XC - XD + XCD.
    Ответ написан
  • Как спарсить наклейки на предмете стим?

    Vindicar
    @Vindicar
    RTFM!
    Так же, как и всегда. Стим кучу инфы подгружает фоновым запросом.
    В инструментах разработчика в браузере смотришь XHR-запросы, которые делает страница.
    Ищешь запрос, которые содержит инфу о предметах.
    Разбираешься с его параметрами и содержимым, экспериментируешь. Скорее всего в параметрах будут какие-то ID инвентаря и указатель на то, сколько предметов пропускать (пагинация). Содержимое вроде у них JSON, который тривиально парсится одноименным модулем питона.
    А потом просто делаешь этот запрос, меняя параметры.
    Ответ написан
    1 комментарий
  • Как зделать валидацию аргумента?

    Vindicar
    @Vindicar
    RTFM!
    Zakkaru, читай документацию на используемую библиотеку. Если для discord.py, то тут тут.
    Ответ написан
    Комментировать
  • Как вписать в replace() два символа заменить одним?

    Vindicar
    @Vindicar
    RTFM!
    Используй str.maketrans() чтобы создать таблицу подстановок, и str.translate() чтобы применить её к строке.
    Плюс в том, что с помощью translate() можно также легко проворачивать замены вида "заменить X на Y, и одновременно заменить Y на X".
    Ответ написан
    1 комментарий
  • Почему в одном проекте импорты работают, а в другом нет?

    Vindicar
    @Vindicar
    RTFM!
    может потому что винда находит pip3 в PATH и использует его?
    Попробуй указать прямой путь до pip3 в конкретном venv.
    Ответ написан
  • Как нажать и держать кнопку?

    Vindicar
    @Vindicar
    RTFM!
    Кнопку мыши?
    Послать событие mouse down, подождать сколько надо держать, послать mouse up.
    Точные методы не вспомню, нужно рыться в документации на selenium.
    Ответ написан
    Комментировать
  • Как грамотно использовать progress bar в коде?

    Vindicar
    @Vindicar
    RTFM!
    Тебе нужно дать ткинтеру шанс перерисоваться, и обработать другие оконные сообщения.

    pb.config(value=format(per))
    win.update_idletasks()
    Ответ написан
  • Как сделать скриншот элемента на странице с помощью Python и необходимых для этого библиотек?

    Vindicar
    @Vindicar
    RTFM!
    Именно скриншотом, т.е. картинкой? Тогда selenium в руки.
    Ответ написан
    Комментировать
  • Как вывести все слова строки, содержащие нечетное количество букв относительно центра слова?

    Vindicar
    @Vindicar
    RTFM!
    for i in a:

    Если применить оператор for к списку, он перечисляет элементы списка, а не индексы.
    Так что не len(a[i]) а len(i)
    Ответ написан
    Комментировать
  • Как найти все URL и URI внутри HTML с помощью Python?

    Vindicar
    @Vindicar
    RTFM!
    Я бы всё же копал в сторону регулярок. Слишком уж много мест где URL могут встретиться.
    Так что я бы сказал примерно такое...
    (["'])(https?://.+?)\1
    Т.е. "в начале кавычка или апостроф, затем что-то, начинающееся с http:// или https://, потом любые символы, но как можно меньше, а потом тот же символ что и в начале".
    Написал маленький скрипт, натравил его на исходник этой страницы - по-моему, работает неплохо.
    Ответ написан
  • Как отслеживать посетителей на сайте, которые перешли из мессенджеров?

    Vindicar
    @Vindicar
    RTFM!
    document.referer - на клиентской стороне.
    На серверной стороне - HTTP-заголовок Referer.
    А вообще - нет, способа нет, так как ссылки во внешних приложениях не дают Referer.
    Есть обходные пути.
    1. Включать в ссылку какой-то referer ID, тогда можно будет отследить, кто перешел на сайте по этой конкретной ссылке.
    2. Если мессенджер использует страницу с предупреждением о переходе по ссылке (как Steam, например), то тогда переход будет с этой страницы, и его можно будет отследить. Но это зависит от мессенджера.
    Ответ написан
    Комментировать