Задать вопрос
Ответы пользователя по тегу Python
  • Как отправить запрос в LM Studio?

    Vindicar
    @Vindicar
    RTFM!
    Примеры использую утилиту curl. В них прописаны:
    1. URL запроса, например, localhost:1234/api/v0/chat/completions
    2. Заголовки, например, Content-Type: application/json
    3. Тело запроса, например,
    {
        "model": "granite-3.0-2b-instruct",
        "messages": [
          { "role": "system", "content": "Always answer in rhymes." },
          { "role": "user", "content": "Introduce yourself." }
        ],
        "temperature": 0.7,
        "max_tokens": -1,
        "stream": false
      }


    Как уже выше написали, читаешь доки на модуль requests (ну или aiohttp, если тебе лучше работать асинхронно), они позволяют всё это делать. Просто нужно выучить, как.
    Ответ написан
    Комментировать
  • Несколько запросов к API с помощью python?

    Vindicar
    @Vindicar
    RTFM!
    Используй цикл for, самое простое решение.
    Ответ написан
    Комментировать
  • Python Flet - как записать код во вкладку?

    Vindicar
    @Vindicar
    RTFM!
    Читаем документацию. Там прописано, что у контрола Tabs есть два события: on_click для щелчка по вкладке, и on_change для перехода между вкладками (потому что вкладки можно переключать не только мышкой).
    Полагаю, что нужно передать в конструктор ft.Tabs() соответствующий параметр с функцией-обработчиком события примерно такого вида:
    def on_tab_changed(e):
        current_tab = t.selected_index  # см. свойство https://flet.dev/docs/controls/tabs#selected_index
        # далее в зависимости от current_tab выполняешь тот или иной код
        # это может выглядеть как-то так:
        if current_tab == 0:
            tab_a_code()
        elif current_tab == 1:
            ...
    
    def tab_a_code():
        ...  # тут что-то делаешь при открытии первой вкладки


    А вот как засунуть целую работающую программу в функцию - это, извини, уже совсем отедльный вопрос...
    Ответ написан
    Комментировать
  • Поможете исправить ошибку в Python коде?

    Vindicar
    @Vindicar
    RTFM!
    Дробные числа во многих языках программирования представляются в формате с плавающей точкой. Как это выглядит - можешь погуглить, а сейчас важно знать, что точность этих чисел ограничена, а многие числа (даже сравнительно "несложные" с нашей точки зрения) вообще точно не представимы. Собственно, вышеприведённый сайт (https://0.30000000000000004.com/) подробно это объясняет.
    Для многих задач эта погрешность настолько мала, что абсолютно незначительна, поэтому числа с плавающей точкой по прежнему используются. Но эта погрешность медленно, но верно накапливается с каждой операцией, и это нужно иметь ввиду. Так, математически эквивалентные операции могут давать разные результаты:
    print(f'{(10 + 20) / 100:.40f}')  # 0.2999999999999999888977697537484345957637
    print(f'{0.1 + 0.2:.40f}')  # 0.3000000000000000444089209850062616169453
    print(30 / 100 == 0.1 + 0.2)  # False - результаты отличаются!

    Решение зависит от того, что, собственно, является проблемой. Если тебе просто нужен красивый вывод, то ты можешь отформатировать число при выводе, например, так:
    # вывести значения переменных rub и kop2 
    # как числа с плавающей точкой (f), 
    # округлив их до 0 знаков после запятой.
    print(f'{rub:.0f} {kop2:.0f}')

    Этот способ хорош тем, что само значение в переменной не округляется, так что дальнейшие расчёты будут идти без округления.
    Альтернативно, ты можешь использовать представление с фиксированной точкой. В твоём случае можно просто вести все расчёты в копейках, а под конец разделять сумму в копейках на рубли и остаток:
    total_sum = 1234  # тыт ты рассчитываешь сумму в копейках, я написал число для простоты
    rub = total_sum // 100  # оператор // выполняет деление нацело, отбрасывая остаток
    kop = total_sum % 100  # оператор % выполняет нахождение остатка от деления
    print(rub, kop)  # и rub и kop - целые числа, поэтому погрешности от плавающей точки нет

    Как я понял, это ты и пытался сделать, просто не осилил нагуглить оператор деления с остатком.

    Третий вариант - развитие второго, только более автоматизированный. Тип данных Decimal как раз и даёт представление числа с фиксированной точкой, хотя работает медленнее. Его часто советуют использовать для финансовых расчётов.
    from decimal import Decimal
    x = Decimal(30)
    print(x, x / 100)  # 30 0.3
    print(Decimal('30') / 100 == Decimal('0.1') + Decimal('0.2'))  # True - результат один и тот же!


    Думаю, в твоём случае лучше подойдёт вариант 2.
    Ответ написан
    2 комментария
  • Можно ли на Python написать простой сайт без фреймворков?

    Vindicar
    @Vindicar
    RTFM!
    То есть, по аналогии с PHP создаём условный index.py, в нём роутинг на несколько url и включаемые файлы.

    Роутинг реализуется фреймворками. Ты или пишешь HTTP-сервер с нуля (ну или сам реализуешь CGI/WSGI), прежде чем добраться до собственно логики сайта, или поручаешь это фреймворку.
    Ответ написан
    Комментировать
  • Почему антивирус ругается на exe Python?

    Vindicar
    @Vindicar
    RTFM!
    Это постоянно так. Используй более старую версию упаковщика, она уже должна быть в белых списках. Но проблемы всё равно могут быть.
    Ответ написан
  • Долгая обработка SQL запроса?

    Vindicar
    @Vindicar
    RTFM!
    Какое лютое извращение.
    user_parsing_ok = cur.fetchall()
        korteg = ()
        for k in user_parsing_ok:
            korteg += k
            step += 1

    Во-первых, вы вытаскиваете 3 миллиона записей в память как питоновские объекты. Это не очень хорошая идея.
    Во-вторых, вместо того, чтобы по-человечески сделать
    korteg = tuple(item[0] for item in user_parsing_ok)
    вы делаете конкатенацию кортежей по одному. Напомню, что при конкатенации создаётся новый кортеж - так что при добавлении трёхмиллионного элемента у вас в памяти будет один кортеж с 2999999 элементами и один кортеж с 3000000 элементами. Это дело будет люто, бешено, неиллюзорно жрать память, а значит, свопиться на диск. Что не прибавит скорости.
    Как написали выше, просто используйте подзапрос. Вам совершенно незачем таскать эти айдишники из БД в питон, а потом из питона в БД. Пусть они обрабатываются только в рамках БД.
    Ответ написан
    Комментировать
  • Мультиязычность на python как стоит оптимизировать?

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

    Vindicar
    @Vindicar
    RTFM!
    проверяет условие 42 <= r1 and r2 <= 88

    if 42 <= r1 <= 88 and 42 <= r2 <= 88:

    Это разные условия. Какое из двух тебе нужно?
    И если на то пошло, какой именно неправильный ответ выдаёт код? Не находит решение, когда оно должно быть? Или находит решение, когда его не должно быть? Или находит неправильное решение?
    Ответ написан
    2 комментария
  • Как убрать лишнюю информацию из json ответа?

    Vindicar
    @Vindicar
    RTFM!
    Как написали выше, это журнал работы. Скорее всего основан на встроенной либе logging.
    Получаешь объект журнала через logging.getLogger('тут имя журнала которое ты замазал'), а затем на нём делаешь .setLevel(logging.ERROR), чтобы выводились только ошибки.
    Ответ написан
    Комментировать
  • Process finished with exit code 0 Telebot Python в чем ошибка?

    Vindicar
    @Vindicar
    RTFM!
    Отступы в питоне важны!
    У тебя всё, начиная с @client.event async def on_ready(): попало внутрь обработчика события.
    Как следствие, бот не стартует, пока не выполнится обработчик, а обработчик не выполнится, так как бот не стартовал. Программа доходит до конца, решает "ну, что сказали сделать - я сделала" и завершается нормально, т.е. с кодом 0.
    Сдвинь соответствующий участок кода (начиная с указанного) влево.
    Ответ написан
  • Почему input() не сохраняет значения в списке?

    Vindicar
    @Vindicar
    RTFM!
    input() не сохраняет значения в списке

    Всё оно сохраняет, просто вот эта строка - полная чушь.
    res_int = ''.join(i if i.isdigit() else ' ' for i in s).split()

    У тебя s - список строк. Ты заменяешь на пробелы все строки в списке, которые содержат что-то кроме цифр (а это все строки в твоём списке!), затем соединяешь строки в одну и делишь их по пробелу. Конечно, у тебя получится пустой список в итоге.
    У меня такое чувство, что этот код вообще предполагал, что в s будет одиночная строка, а не список - но даже тогда он не сделает что тебе надо.

    Нужно каждую строку в s разделить по символу "," и все элементы полученного списка, кроме нулевого, превратить в числа. Дальше уже будет просто.
    Ответ написан
  • Почему json файл не создается через python в docker?

    Vindicar
    @Vindicar
    RTFM!
    А где ты файл-то создаёшь? На подмонтированном volume? Или где попало?
    Вообще изменения в файловой системе контейнера не сохраняются при остановке. Тебе нужен volume (или иной похожий механизм), чтобы сохранить данные между перезапусками контейнера.
    Читай про docker persistence.
    Ответ написан
  • Как протестировать код как Я.Контест?

    Vindicar
    @Vindicar
    RTFM!
    Втупую - subprocess для запуска дочернего процесса с перехватом стандартного ввода вывода. А дальше какая-то база, содержащая набор пар "ввод - ожидаемый вывод" для скрипта.
    Веселье начнётся, когда ты поймёшь, что в запускаемом скрипте может быть всё, что угодно, и его надо выполнять в песочнице, где можно контролировать какие модули он импортирует.
    Ответ написан
  • Как реализовать отложенное сообщение?

    Vindicar
    @Vindicar
    RTFM!
    используй асинхронную библиотеку для бота. Асинхронные функции могут приостановить своё выполнение и отдать процессорное время другим, которые готовы выполняться. Тогда, как написали выше, всё решается вызовом asyncio.sleep(). Но это предполагает, что ты можешь бота переписать на асинхронный подход.

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

    Vindicar
    @Vindicar
    RTFM!
    Ошибки две. Первая, вместо двух отдельных if тебе нужна цепочка if-elif-else, а лучше - одна пара if-else с правильно написанным условием победы. Второе, ввод догадки пользователя должен быть ПЕРЕД проверкой, а не после и не внутри неё.
    Ну и пока что нет изменения баланса, но это ты уже допишешь.
    Ответ написан
    Комментировать
  • Есть ли аналог метода Range.AutoFill для работы с файлом в скрытом режиме?

    Vindicar
    @Vindicar
    RTFM!
    Нету такого метода, и вряд ли где-то будет, помимо другого табличного процессора. Там же очень замороченная логика - нужно догадаться, что за данные выделены, какая в них закономерность, как эту закономерность продолжить, в каком направлении её продолжить, и так далее.
    Если у тебя частный случай (например, нужна последовательность дат или последовательность чисел), и предсказуемое направление заполнения, то можно написать логику самому.
    Ответ написан
  • Почему в параметр функции идёт только последний индекс?

    Vindicar
    @Vindicar
    RTFM!
    Поздравляю, ты попался на лямбду.
    Лямбды сохраняют ссылки на переменные, а не их значения.
    lambda _: set_default_microphone(index) сохранит ссылку на index, а потому все лямбды будут видеть одно и то же значение index, которое было установлено последним.
    Это можно обойти, сохранив ссылку при объявлении лямбды. Самый простой способ - засунуть сохраняемое значение в значение по умолчанию для неиспользуемого параметра. Значения по умолчанию для параметров вычисляются один раз при объявлении функции, в т.ч. лямбды.
    Например, так:
    lambda _, *, ind=index: set_default_microphone(ind)

    Ну или даже так:
    lambda _, *, index=index: set_default_microphone(index)
    Ответ написан
    2 комментария
  • Как мне проигнорировать этот Подкаталог "old" и прочитать данные только из списка?

    Vindicar
    @Vindicar
    RTFM!
    from pathlib  import Path # входит в поставку питона, не сторонняя
    
    base_path = Path("data")  # путь до каталога с данными
    for item in base_path.glob('*'):
      if item.is_dir() and item.stem != 'old':
        # тут что-то делаем с путём item. Например:
        for kml_file in item.glob('*.kml'):
          print(kml_file.resolve())  # выводим полный путь к файлу
    Ответ написан
  • TypeError: Parameters to generic types must be types. Got Ellipsis.?

    Vindicar
    @Vindicar
    RTFM!
    Какая у тебя версия питона? Как минимум в 3.12 конструкция List[Dict[str, ...]] поддерживается. Может, и в более ранних тоже.
    Ответ написан