Задать вопрос
  • Как сделать, чтобы с каждым нажатием кнопки бот отнимал от 100 один, то есть писал: 99 98 97 96 95...?

    Vindicar
    @Vindicar
    RTFM!
    1. Читай правила сайта. Оформление кода кнопкой </> обязательно, иначе вопрос могут удалить.
    Не говоря уже о том, что сейчас твой код нечитаем.
    2. Вместо лирики в духе "АААААА СПОСИТЕ ПАМАГИТЕ" лучше бы уточнил, какую именно задачу ты решаешь. Тебе нужно, чтобы счётчик был общий у всех пользователей бота, или чтобы у каждого пользователя был свой счётчик? Если свой, то должен ли счётчик переживать перезапуск бота?

    В первом случае читай про глобальные переменные в питоне и ключевое слово global.

    Во втором случае тебе нужно хранить значения счётчика так, чтобы можно было различать пользователей. Например, в виде словаря "id пользователя - значение счётчика". Читай про словари, а также про глобальные переменные.

    В третьем случае тебе нужно разбираться, как работать с БД, но я бы посоветовал сначала подучить питон как таковой, без ботов.
    Ответ написан
    5 комментариев
  • Допустимо ли использовать спрайт от автора, который разрешил всем брать?

    Нужно соблюдать законы об интеллектуальной собственности.
    "Разрешил всем брать" - это не лицензия.
    Ищи, на каких именно условиях автор разрешил брать.
    Ответ написан
    Комментировать
  • Как найти линейную комбинацию векторов которая будет ближе всего к заданной?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Это получается задача квадратичного программирования. Ищите специализированный метод в scipy. Может вот это сработает.

    Ваша попытка использовать обобщенный оптимизатор похоже не работает, потому что у вас функция не дифферинцируема в нулях x из-за abs.
    Ответ написан
    Комментировать
  • Как пофикисить ошибку запуска телеграм бота на VDS на постоянной основе?

    Vindicar
    @Vindicar
    RTFM!
    Ну у тебя явно два разных окружения.
    Просто python3 bot.py, без activate и прочего, использует системное окружение.
    А в приведённом тобой systemd-модуле явно видно виртуальное окружение.
    Так куда ты поставил openai - в системное или в виртуальное?
    Для установки в виртуальное используй pip из этого окружения.
    Ответ написан
    1 комментарий
  • Как мне решить проблему когда сервер вместо json отдает html?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Прежде всего надо понять, что защиту от парсинга пишут не дураки. И так же то, что все защиты разные. Как только в интернете появляется гарантировано работающий рецепт обхода какой-то за защиты, ей сразу меняют. Поэтому в каждом отдельном случае приходится искать способ обхода защиты самостоятельно и быть умнее её разработчиков. В каких-то случаях, вы боретесь с подростком-фралансером, пишущим код для маленького бизнеса со скромным бюджетом, тогда вам придётся столкнуться с чем-то типа проверки заголовков, csrf и тому подобными простыми штуками. В каком-то, вы боретесь с корпорацией, в которой целый отдел отличных опытных разработчиков пишет поведенческий фильтр и валидацию на клиентской стороне. В последнем случае вам придётся применять Selenium, ежемесячно платить за прокси и так же ежемесячно править довольно сложный алгоритм, притворяющий группой людей.
    Ответ написан
    Комментировать
  • Когда вписывать технологию в свой стек?

    @Everything_is_bad
    Допустим я считаю, когда собрал на ее основе какой-либо проект и можешь в принципе свободно без документации получать на ее основе исходный продукт/приложение и т.д .
    ну так и пиши что именно ты сделал на этой технологии, а про "без документации" - так не бывает, даже если очень хорошо зная что-то, я всегда обращаюсь к документации, нет смысла ее вызубривать.
    Ответ написан
    Комментировать
  • Как лучше организовать структуры программы по поиску значения в таблице на Python?

    @dmshar
    Если действительно ОЧЕНЬ большие - то храните в базе данных. В принципе если задача состоит в поиске допуска по диаметру то этого хватит с головой. Задача не сложная, но очень кропотливая.

    Если данные или часть закачаны в ОП, и требуют дальнейшей сложной обработки, то в Рython есть вполне работоспособная структура DataFrame из Pandas, куда такие данные такого типа нормально раскладываются. Экспорт-импорт из DataFrame в SQL реализован там-же.
    Даже непонятно, о чем тут можно еще рассуждать.
    А вот про то, как вы будете из pdf данные вытягивать перед тем, как их погружать в БД - про про это я бы подумал особо, потому как засад на этом пути достаточно много.
    Ответ написан
    Комментировать
  • Можно ли рассторгнуть договор самозанятого?

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

    2. Ты просто заключил какой-то договор. В любом договоре должны быть условия для его расторжения, в том числе досрочного, если у договора есть срок.
    Если условий нет - используются общие основания: ГК РФ ст 450

    ГК РФ Статья 450. Основания изменения и расторжения договора
    В каких случаях можно изменить предмет или иное существенное условие договора

    1. Изменение и расторжение договора возможны по соглашению сторон, если иное не предусмотрено настоящим Кодексом, другими законами или договором.

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

    (абзац введен Федеральным законом от 08.03.2015 N 42-ФЗ)

    2. По требованию одной из сторон договор может быть изменен или расторгнут по решению суда только:

    1) при существенном нарушении договора другой стороной;

    2) в иных случаях, предусмотренных настоящим Кодексом, другими законами или договором.
    Существенным признается нарушение договора одной из сторон, которое влечет для другой стороны такой ущерб, что она в значительной степени лишается того, на что была вправе рассчитывать при заключении договора.

    3. ...

    4. Сторона, которой настоящим Кодексом, другими законами или договором предоставлено право на одностороннее изменение договора, должна при осуществлении этого права действовать добросовестно и разумно в пределах, предусмотренных настоящим Кодексом, другими законами или договором.

    (п. 4 введен Федеральным законом от 08.03.2015 N 42-ФЗ)


    Если это был договор на оказание услуг, то ты, как исполнитель, можешь в одностороннем порядке отказаться от оказания услуги, но ты обязан будешь вернуть все деньги, которые тебе выплатили авансом.
    Например:
    У тебя был договор на оказание услуг на 100к рублей, в рамках которого ты должен был оказать две услуги.
    При этом вы с заказчиком договорились, что плата будет вноситься частями: 50% аванс и 50% по факту выполнения.
    Первую услугу ты оказал, за что тебе оплатили положенные 50к и аванс 25к за следующую.
    Но вот ты отказываешься от своих обязательств - тебе нужно будет вернуть эти 25к аванса.
    (А то и ущерб, если в процессе ты ещё какой-то ущерб нанёс.)


    нужно искать новую работу, потому что на эти деньги тупо не прожить

    А вот это уже пахнет нарушением закона, тк у ваших отношений с заказчиком есть признак трудовой деятельности. (Как между работником и работодателем)
    Ответ написан
    Комментировать
  • Как разделить текст на предложения в Python при этом же не учитывать точки после сокращений и инициалов?

    Vindicar
    @Vindicar
    RTFM!
    каким-то регулярным выражением

    Читаем, просвещаемся.

    А вообще без примера текста не очень-то порешаешь. Вот, скажем: "Он родился в 1986 г." - точка после сокращения, но она значима. Или, скажем, "Джон Ф. Кеннеди" - после точки идёт длинное слово с заглавной буквы, но точка не значима.
    В принципе, если первый приведённый случай не считается, то можно сказать, что за разделители предложений принимаются только точки, перед которыми идёт более двух букв, а также многоточия, знаки вопроса и восклицания, после которых идёт пробел. Для начала сойдёт, дальше можно уточнять.
    Ответ написан
    2 комментария
  • Как youtube детектирует использование нейросети при создании видеоконтента?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Ответ написан
    Комментировать
  • Как подсчитать кол-во строк и вывести наибольшее число повторений?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Но ничего не получилось=(

    Больше упорства! ;)

    Разбиваем не по словам, а по предложениям split('\t'), strip() нужно разбивать каждое предложение, а не все строку, ну и в итоге нужно считать уже разбитые предложения:
    # a = input('Введите данные: ').split('\t')
    a = "Interpreter is a computer program that performs instructions without previously compiling them into a machine language program\tlinker is a program that takes one or more object files generated by a compiler and combines them into a single executable file library file or another object file\tthe linker also takes care of arranging the objects in a program's address space\tthe linker also takes care of arranging the objects in a program's address space".split('\t')
    
    res = {}
    
    for i in a:
        sentence = i.strip()
        res[sentence] = res.get(sentence, 0) + 1
    print(max(res.values()))  # 2
    Ответ написан
    1 комментарий
  • Можно ли нерезиденту грузии, армении, казахстана. т.п. работать на upwork, toptal?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    В Грузии и Армении без проблем открывается ИП на нерезидентов.
    Налоги в Грузии околонулевые. Налоги в Армении 5%, но можно сделать сертификат IT и тоже будет около 0%.
    При наличии ИП можно открыть расчётный счёт в банке и работать спокойно.

    В Казахстане для открытия ИП необходимо сначала сделать РВП (аналог вида на жительство), поэтому нерезиденту практически невозможно открыть ИП. Можно открыть ТОО (аналог ООО), но это гораздо более сложная и дорогая история, для фрилансера нерентабельно.
    Но в Казахстане закон прямо говорит, что если нерезидент не оказывает услуги внутри Казахстана, то он не обязан платить налоги в Казахстане. Поэтому юридически ничто не запрещает открыть счёт физ.лица и получать деньги на него и ничего не платить в КЗ. Но если просто гонять деньги через КЗ-банки, то сами банки могут через какое-то время заблокировать счёт за использование в бизнес-деятельности. Но до $10k/месяц казахские банки как правило вообще не интересуются ничем.
    Ещё отдельный квест - найти банк в КЗ, который откроет счёт нерезиденту. Во всём СНГ счета физлицам-нерезидентам стали открывать сильно хуже чем раньше.
    Ответ написан
    3 комментария
  • Через какой алгоритм решать эту задачу?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Тут можно заметить вот что.
    1) если идем вверх, то обратный путь будет по тем же этажам:
    туда 12-23-46, обратно 46-23-12
    2) если идем вниз, то обратный путь может пойти по другим этажам:
    туда 12-6, обратно 6-11-22-43

    итого, решение простое - тебе сначала надо пройти от 12 вверх
    потом от 12 спуститься до 6 и пройти вверх
    потом от 6 спуститься до 3 и тоже пройти вверх (здесь выходим на предыдущий стартовый этаж 6, завершаем)
    от 3 к 2 и тоже вверх
    и т.д.
    т.е. каждый раз спускаться вниз на одну, после чего идти вверх, если не попали на предыдущий стартовый.

    код на js
    function floorCount(start, max) {
        let result = 0;
        let prevStart = -1;
        
        while (start > 0) {
            for (let x = start; x <= max && x !== prevStart; x = x % 2 ? 2 * x : 2 * x - 1) {
                result++;
            }
            prevStart = start;
            start = start < 2 ? 0 : start % 2 ? (start + 1) / 2 : start / 2;
        }
    
        return result;
    }


    Это совсем частный случай ранее упомянутого поиска в ширину/глубину, где не понадобилось множество ранее посещенных этажей (достаточно проверки на prevStart), а так же очереди/стека. То есть обошлись О(1) памяти.
    По скорости выходит O(ln(start) * ln(max)), и в принципе можно сократить до O(ln(start)), если не делать внутренний цикл, а сразу посчитать по формуле, но что-то на ночь глядя не могу эту формулу смекнуть...
    Ответ написан
    4 комментария
  • Какой есть софт для инвайтинга в Телеграм?

    @Everything_is_bad
    софт для инвайтинга
    это софт для спама, не нужно таким заниматься
    Ответ написан
    1 комментарий
  • Ничего не понятно, что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Всё как написано в коде:
    • Выбрать случайного персонажа
    • Выбрать случайное сообщение
    • В цикле отправить выбранному выбранное n раз.

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

    Vindicar
    @Vindicar
    RTFM!
    Вообще делать return self из __iter__() не очень хорошая идея.
    Или верни итератор по внутренней коллекции, т.е. iter(self.nums). Это имеет смысл, так как чтение коллекции циклом for по-хорошему не должно приводить к её модификации. Для этого лучше сделать явный метод.
    Или сделай из __iter__() генератор, и делай yield значения.

    В обоих случаях определять __next__() не потребуется.
    Ответ написан
    2 комментария
  • Почему код перестает работать при импорте?

    Vindicar
    @Vindicar
    RTFM!
    sqlite не поддерживает толком одновременную работу в нескольких потоках.

    1. У тебя парсер? Перепиши код на асинхронный, тебе не сдалось на самом деле использовать потоки. Они 90% времени будут спать и ждать сетевого ответа. Асинхронный код выполняется в одном потоке, так что таких проблем не будет.
    2. Создай отдельный поток, который будет заниматься только работой с базой, и общаться с остальными через какое-то api, например, кладём запрос, данные и какой-то id в очередь, потом читаем ответ из словаря. Но ты по факту будешь писать свой кривенький СУБД-сервер, так что...
    3. Вместо sqlite используй любую полноценную СУБД, которая умеет параллельные соединения. Postrge, mariadb, что угодно.
    Ответ написан
  • BaseModel.__init__() takes 1 positional argument but 2 were given как решить?

    @Everything_is_bad
    Да как вы надели с таким подходом, почему вы не пытаетесь вникнуть в текст ошибки, почему вы сначала не открываете документацию и не читаете описание параметров.
    Вот открываем доки https://docs.aiogram.dev/en/latest/api/types/keybo... и что мы там видим, правильно там именнованые аргументы, ты эту основу языка хотя бы понимаешь?
    Ответ написан
    1 комментарий
  • Как исправить ошибку чтения аргумента?

    @va_k
    Вы потеряли в функции возвращаемое значение. Надо так
    def __getattribute__(self, name):
          print(name)
          return super().__getattribute__(name)
    Ответ написан
    3 комментария
  • Не понимаю, почему программа "тяжелая"?

    Alexandroppolus
    @Alexandroppolus
    кодир
    40000000 чисел Фибоначчи - это лютая вещь со всех сторон. Даже если ты врубишь мемоизацию, как посоветовал Максим Припадчев , то там дохрена вычислений, потому что числа будут длиной в миллионы цифр.

    Мы суммируем только четные числа Фибоначчи.
    Легко заметить, что F(n) четное, только если n делится на 3, т.е. n = 3m.
    То есть тебе нужна сумма F(3*m) для всех m от 0 до floor((40000000-2) / 3) включительно, если правильно понимаю этот ваш range.

    я тут пояндексил и промыслил формулы:
    1) F(3*n) = F(n+1)^3 + F(n)^3 + F(n-1)^3 (из википедии)
    2) sum[0...N] F(i)^3 = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) отсюда

    сумму F(3*n) можно выразить через сумму F(n)^3 и потом применить формулу (2)

    в итоге получается

    sum[0...N] F(3*i) = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) - 1 + F(n)^3 + F(n+1)^3

    для этого выражения нам нужны F(n), F(n+1) и F(n-1) = F(n+1) - F(n)

    F(n) и F(n+1) вычисляем методом "fast doubling", который делает O(ln(n)) действий вместо O(n) стандартного способа. Ускорение знатное.

    Итого:
    const fib = (n, a = []) => {
        if (n < 1) {
            a[0] = 0n;
            a[1] = 1n;
        } else {
            const m = Math.floor(n/2);
            fib(m, a);
            const x = a[0] * (2n * a[1] - a[0]);
            const y = a[0] * a[0] + a[1] * a[1];
            if (n % 2) {
                a[0] = y;
                a[1] = x + y;
            } else {
                a[0] = x;
                a[1] = y;
            }
            
        }
        return a;
    }
    
    const sumFib3n = (n) => {
        if (n < 1) { return 0n; }
    
        const [fn, fnp1] = fib(n); // fn = fib(n), fnp1 = fib(n+1), 
        const fnm1 = fnp1 - fn;  // fnm1 = fib(n-1), 
        const sgn = n % 2 ? 1n : -1n;
        const sumPow3 = (fn * fnp1 * fnp1 + sgn * fnm1 + 1n) / 2n;
        
        return sumPow3 - 1n + fn * fn * fn + fnp1 * fnp1 * fnp1;
    }
    
    console.log(sumFib3n(Math.floor((40000000 - 2)/3)));
    Ответ написан
    2 комментария