Задать вопрос
  • Как сделать автозамену при выводе?

    Vindicar
    @Vindicar
    RTFM!
    replacements = { 10: "лошадь", 20:  "куница", 30:  "рыба", 40: "заяц" }
    barn = [1, 2, 3, 4, 10, 20, 30, 40]
    for b in barn:
        # если ключ в словаре - взять значение словаря, иначе оставить ключ как есть
        print(replacements.get(b, b))


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

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как сопоставить два изображения чтобы убрать сдвиг?

    Vindicar
    @Vindicar
    RTFM!
    cv2.goodFeaturesToTrack() чтобы найти "узнаваемые точки" на каждом изображении.
    cv2.calcOpticalFlowPyrLK() чтобы понять, насколько они сдвинулись. Далее выбираешь точки вокруг интересующего объекта, вычитаешь из их позиций их предыдущие позиции, усредняешь, получаешь вектор среднего смещения за кадр. На основании этого вектора уже что-то делаешь с изображением.
    Например, если тебе нужно сглаживать резкие рывки, может иметь смысл отслеживать значение среднего смещения от кадра к кадру. Если смещение в каком-то кадре резко изменилось (заметно отличается от среднего за предыдущие N кадров), значит, кадр нужно сдвинуть.
    Ответ написан
  • Как динамично создавать кнопки?

    Vindicar
    @Vindicar
    RTFM!
    Кнопка добавляется вызовом определённого метода. Параметры метода могут быть не константами, а переменными. В Питоне есть циклы.

    Вот и всё. Выбираешь список показываемых продуктов, делаешь цикл по результатам, для каждого генерируешь кнопку, подставив сведения о продукте вместо текста кнопки.

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

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

    Vindicar
    @Vindicar
    RTFM!
    1. Один клиент обслуживает один токен, так что нужно сделать несколько экземпляров клиента
    2. Один клиент занимает поток управления для работы, так что несколько клиентов в одном потоке не уместятся. Их придётся запускать в разных потоках.
    3. Очередное "средство массовой рассылки" ваяешь?
    Ответ написан
    Комментировать
  • Как хранить информацию в БД о поставщиках когда они могут являться разынми сущностями?

    Vindicar
    @Vindicar
    RTFM!
    Это, по сути, наследование. Абстрактный класс-предок (поставщик) и конкретные классы-потомки (физлицо, ИП, организация). Наследование обычно выражается в структуре БД так: создаётся таблица "Поставщик", содержащая общие для всех классов поля и имеющая свой ключ.
    Затем под каждый класс-потомок создаётся отдельная таблица, содержащая сведения, уникальные для этого класса. В этой таблице первичный ключ одновременно является внешним ключом, ссылающимся на таблицу "Поставщик". Иными словами, в таблице-потомке могут быть только записи с ключами, которые есть в таблице "Поставщик", а для каждой записи в "Поставщик" будет не более одной записи в таблице-потомке.

    В таблице "Поставщик" также может быть поле, указывающее на конкретный тип поставщика (физлицо, ИП, организация), т.е. в какой таблице искать остальные данные. Наличие или отсутствие этого поля - вопрос вкуса. В принципе, если нам нужны сведения о конкретном типе поставщика, мы можем попытаться сделать INNER JOIN с нужной конкретной таблицей. Это отсеет все записи других типов.
    Такой подход (без поля типа) позволяет избежать противоречий, когда запись находится в одной таблице-потомке, а поле указывает на другую. Но с другой стороны, если мы не знаем, какой конкретный тип у данного поставщика, нам придётся либо перебирать таблицы-потомки в рамках нескольких запросов к БД, либо делать LEFT JOIN со всеми таблицами-потомками, и смотреть, какие поля не будут NULL.

    Слабая сторона такой схемы в том, что связь по внешнему ключу не запрещает существование записей в нескольких таблицах-потомках, ссылающихся на одну и ту же запись в "Поставщике". Это придётся контролировать отдельно, триггерами или хранимыми процедурами.
    Ответ написан
    4 комментария
  • Как реализовать рекурсию в UML (диаграммы классов)?

    Vindicar
    @Vindicar
    RTFM!
    Особенно никак? Диаграмма классов не описывает содержимое методов, а приведённый код бессмысленен даже как пример.
    Можно, конечно, сделать отношение зависимости от Foo к нему же, но будет затруднительно пояснить его природу.
    Ответ написан
    Комментировать
  • Как вызвать скрипт python для работы с GPIO Raspberry Pi 3 из php файла?

    Vindicar
    @Vindicar
    RTFM!
    Подозреваю, что дело в правах - скрипт на питоне выполняется от имени пользователя веб-сервера, у которого может не быть прав на доступ к GPIO.
    Ответ написан
    Комментировать
  • Как сделать так, что бы бот работал то время, пока у меня запущена программа на пк?

    Vindicar
    @Vindicar
    RTFM!
    register_next_step_handler() нужен для сценариев из нескольких шагов, где каждый шаг выполняется один раз.
    В твоем случае достаточно простого обработчика текстовых сообщений.
    Ответ написан
    Комментировать
  • Как достать текст сообщения пользователя и вписать в description embed сообщения?

    Vindicar
    @Vindicar
    RTFM!
    await message.delete()
    embed = discord.Embed(
        description=f"{message.content}",
        color=discord.Colour.blurple(),
    )

    Ты сначала удаляешь сообщение, а потом пытаешься к нему (уже удалённому) обратиться.
    Неужели это не кажется странным?
    Ответ написан
    Комментировать
  • Как перевести декартовые координаты в полярные и найти полярный угол?

    Vindicar
    @Vindicar
    RTFM!
    Тригонометрию в школе проходили?
    Есть прямоугольный треугольник. Одна точка - начало координат О, вторая - искомая точка в декартовых координатах A, третья - её проекция на ось X (назовем точка B).
    Тогда гипотенуза - это отрезок ОA, а катеты - OB и AB. Тебе нужно найти угол AOB.
    Вспоминаем определения:
    sin AOB = |AB| / |OA| =>
    cos AOB = |OB| / |OA|
    tg AOB = |AB| / |OB|

    Как найти длину гипотенузы OA ты уже знаешь.
    Длина AB будет координатой y, а длина OB - координатой x.
    Используй любое из указанный выражений для нахождения AOB, только не забывай про коррекцию знаков (так, cos AOB не изменится, если сменить знак координаты y, а вот знак угла при этом должен измениться).
    Ответ написан
    Комментировать
  • Почему сразу закрывается окно в PYQT?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, наверняка программа выводит сообщение об ошибке в консоль. Запусти её из терминала или IDE, чтобы этто сообщение увидеть.

    Во-вторых, я готов спорить что ты создаёшь QtWidgets.QApplication(sys.argv) не только в рамках create_reg_window(), но и в теле программы. А если я верно помню, в Qt приложении должен быть один и только один объект QApplication. Скорее всего, ошибка в этом. Так что гугли, как правильно делать приложение с несколькими окнами в Qt.
    Ответ написан
    1 комментарий
  • Как двигать обьект по вектору?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, тебе стоит помнить, что у тебя ДВЕ координатных системы.
    1. Координаты окна. Они используются при рисовании шарика в окне и при получении позиции мыши.
    2. Координаты мира. Они определяют позицию объектов в мире и используются при определении коллизий шарика с другими шариками и "едой".
    Ты можешь принять решение, что эти координатные системы совпадают, и я подозреваю что ты так и сделал. Но это будет иметь последствия.

    С положительной стороны, тебе не надо преобразовывать координаты из одной системы в другую, и в частности не надо реализовывать скроллинг мира. Но тогда положение мыши относительно шарика меняется, даже если пользователь ничего не делает. Потому что шарик будет "догонять" мышь, вместо того чтобы скроллить мир в этом направлении.

    А шарик перестанет двигаться, достигнув позиции мыши - потому что у него уже не будет направления на мышь, так как их позиции совпадают. Если точнее, шарик будет легонько колебаться вокруг позиции мыши.

    Так что либо смирись с тем, что шарик может "догнать" мышь, либо реализуй полноценное преобразование координат. Тогда отрисовываться у тебя будет не весь мир, а только "окно", центрированное на позиции игрока.
    Ответ написан
    Комментировать
  • Ошибка TypeError: 'tuple' object is not callable?

    Vindicar
    @Vindicar
    RTFM!
    result = cursor.execute("SELECT id, name, price, colvo FROM tovars").fetchone()
    return result

    fetchone() возвращает либо None, либо кортеж (tuple). Значит, get_item() возвращает None (если такой строки нет) или tuple (если она есть).

    result = get_item()
    tgitem = result()

    Ты пытаешься вызвать (call) кортеж (tuple), как будто это функция. Так нельзя, и питон тебе так и говорит:
    TypeError: 'tuple' object is not callable

    Читай учебник, что такое кортежи.
    Ответ написан
    9 комментариев
  • У мне выдаёт ошибку, что надо сделать?

    Vindicar
    @Vindicar
    RTFM!
    А вот открыть документацию и почитать не пробовал?
    Открой, почитай, и ответь на три вопроса:
    1. Как называется параметр send(), принимающий эмбед?
    2. Как ты называешь этот параметр при вызове send()?
    3. Совпадает ли имя из пункта 2 с именем из пункта 1?
    Ответ написан
    1 комментарий
  • Как улучшить цикл for?

    Vindicar
    @Vindicar
    RTFM!
    Я вижу одну проблему: i может содержать спецсимволы регулярных выражений, а ты это не учитываешь. re.escape() в помощь.
    Также, если в списке st не так много строк (<100), может иметь смысл сделать одно регулярное выражение.
    # если список st меняется не для каждой строки, 
    # имеет смысл его подготовить один раз, заранее
    parts = '|'.join(list(map(re.escape, st)))
    regexp = re.compile(f'\\b(?:{parts})\\b', re.IGNORECASE)
    # при обработке строки md
    if match := regexp.search(md):
        print(x.group(0))
    Ответ написан
    Комментировать
  • Как измерить температуру процессора в си шарп?

    Vindicar
    @Vindicar
    RTFM!
    Что значит "рандом был хорошим"? Ты можешь сформулировать это в виде "генерю 100500 случайных чисел стандартным алгоритмом, в распределении видны такие-то и такие-то аномалии"?
    Если тебе для целей криптографии, то используй WinAPI функцию CryptGenRandom() или обёртки над ней. Хотя она устарела, так что можешь посмотреть в сторону BCryptGenRandom(). Ну или как выше посоветовали, пусть пользователь мышкой пошевелит.
    Для всех остальных целей тебе и дефолтный генератор сойдёт. В качестве сида возьми метку текущего времени unix, опционально смешай её с ID твоего процесса. Если тебе не требуется инициализировать десяток генераторов случайных чисел за раз, этого хватит.
    Ответ написан
    Комментировать
  • Нужно, чтобы бот из хостинга картинок отправлял рандомную. Как сделать?

    Vindicar
    @Vindicar
    RTFM!
    1. Завести список рандомных картинок.
    2. Использовать на этом списке random.choice().
    3. Отправить то, что она вернёт.
    Ответ написан
    Комментировать
  • Пишу бота в тг, выдается ошибка 'main', как решить?

    Vindicar
    @Vindicar
    RTFM!
    pprint(data)
    data = r.json()

    Тебя порядок не смущает?
    Ответ написан
    3 комментария