Задать вопрос
  • Ничего не понятно, что делать?

    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 комментария
  • Постоянно вылазит ошибка NoneType:None в чём дело?

    Vindicar
    @Vindicar
    RTFM!
    А что, по твоему, ты пытаешься сделать?
    Эта функция выводит информацию о текущем обрабатываемом исключении. А у тебя в коде исключения не выбрасываются.
    По факту, эту функцию имеет смысл использовать только когда обрабатываешь исключение, т.е. внутри блока except.
    Ответ написан
    Комментировать
  • Как распарсить этот XML?

    @Mark0vka
    Чтобы прочитать поля Name, Surname, Email и Birthday из XML с использованием библиотеки xml, вам нужно указать полные пути к этим элементам с учетом пространства имен. Вот как это можно сделать:

    import xml.etree.ElementTree as ET
    
    data = """
    <ns2:Request xmlns:ns2="urn://www.example.com">
        <ns2:User>
            <ns2:Name>John</ns2:Name>
            <ns2:Surname>Snow</ns2:Surname>
            <ns2:Email>joihn.show@gmail.com</ns2:Email>
            <ns2:Birthday>2005-10-23T04:00:00+03:00</ns2:Birthday>
        </ns2:User>
    </ns2:Request>
    """
    
    namespaces = {"ns2": "urn://www.example.com"}
    
    xml = ET.fromstring(data)
    
    name = xml.find(".//ns2:Name", namespaces).text
    surname = xml.find(".//ns2:Surname", namespaces).text
    email = xml.find(".//ns2:Email", namespaces).text
    birthday = xml.find(".//ns2:Birthday", namespaces).text
    
    print("Name:", name)
    print("Surname:", surname)
    print("Email:", email)
    print("Birthday:", birthday)

    Этот код найдет и выведет значения полей Name, Surname, Email и Birthday из XML.
    Ответ написан
    Комментировать
  • Как преоброзовать фото в видео (moviepy)?

    Vindicar
    @Vindicar
    RTFM!
    ImageClip чтобы интерпретировать изображение как статичное видео.
    VideoFileClip чтобы загрузить видео.
    CompositeVideoClips чтобы наложить два или более клипов. Потом метод write_videofile(), чтобы сохранить результат.

    Научись работать с одним клипом и изображением. Потом оформи этот код в функцию вида
    def process_one(image_path, input_video_path, output_video_path) -> None:

    чтобы она брала указанную картинку и видео, и сохраняла результат в указанный файл.

    Дальше уже будет просто вопрос вызова этой функции с правильными именами файлов. Тут пригодится, скажем, стандартный модуль pathlib, в частности метод Path.glob().

    Десять минут работы с документацией, и всё можно найти.
    Ответ написан
    Комментировать
  • Инвайтинг в telegram, способы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Через ссылки вида t.me/...
    Ссылки можно размещать, где угодно, на сайте или в чате, на своё усмотрение, да хоть на билборде.
    Ответ написан
    Комментировать
  • Как создать бота ChatGPT с обучением только на своих данных?

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

    P.S. Словосочетания "проверенные источники" и "китайская медицина" можно в одном предложении использовать, только если вы пишете стендап на научнопопулярную тему.
    Ответ написан
    6 комментариев
  • Почему 3 секунд не хватает для выполнения кода?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    У вас решениe за O(n^3), ибо у вас там 2 вложенных цикла до n, а внутри еще и постоянно вызываются min/max, которые проходятся по всему массиву.

    Ограничения же в задаче n<10^5. С такими ограничениями максимум O(n log n) решение уложится в 3 секунды.

    Подумайте, как его можно изменить, чтобы работало сильно быстрее? Подсказка: сначала вы берете 1 минимальный элемент, потом 2 самых маленьких, потом 3, и т.д. На второй итерации вам уже как бы не надо искать минимум- вы его уже знаете. Вас интересуют только оставшиеся числа. На третьей итерации у вас уже 2 числа раньше найдены. Надо как-то переиспользовать предыдущие вычисления.

    Что можно сделать с входным массивом, чтобы можно было получать несколько самых маленьких элементов быстро? Помните, что вам надо уложиться в O(n log n).
    Ответ написан
    Комментировать
  • Можно ли развить логику программиста?

    hint000
    @hint000
    у админа три руки
    Как решать задачи по программированию математическим путем, а не «в тупую»?
    задачи даже самые примитивные, не поддаются от слова совершенно

    Решать задачи учат в школе на уроках математики, начиная с первого класса и до окончания школы. Эти навыки нужны и для решения задач алгоритмическими методами.
    Вообще принцип простой. Чтобы написать программу, нужно представлять в голове алгоритм решения задачи. Чтобы представлять алгоритм, нужно две вещи:
    (1) уметь решать задачу такого типа без компьютера (речь не идёт о том, что вручную это долго или не долго; только о том, что вы в принципе знаете что делать, хотя бы даже интуитивно - именно этому учат в школе начиная с первого класса);
    (2) уметь формализовать в алгоритм своё умение решать задачу (это универсальное умение, практически не зависящее от типа задачи).
    Ответ написан
  • Возможно ли сделать нейросеть, предсказывающую рост и падение криптовалюты?

    @rPman
    В общем случае нет!
    В каких то частных случаях, в ограниченном промежутке времени - реально, и даже без может быть без нейронных сетей. К сожалению, заранее знать это не получится.

    spoiler
    Но с помощью нейросетей можно попытаться предсказывать в короткую какие то другие параметры, например волатильность, ликвидность или что то экзотическое отношение объема к волатильности и т.п. Дело в том что возможно локальные алгоритмы, которые для конкретных рынков на текущий момент могут принести доход но при условии предсказания этих параметров.

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


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

    Участники выигрывают на этом рынке за счет тех кто проиграл. Представь человека или группу, у которых получилось разработать алгоритм и успешно зарабатывать и делают они это давно, вот приходишь ты и начинаешь отбирать их доход, их алгоритм должен быть адаптивным к таким приходящим, значит через какое то время рынок за их счет изменит свою динамику и ты снова станешь проигравшим. Новичку создать успешный адаптивный алгоритм нереально сложно, - ни опыта, ни денежного запаса, ни самое главное - информации.

    Так как ты назвал вполне определенный рынок - криптовалютный, у него по сравнению с регулируемыми рынками есть главная особенность - он не регулируемый. На этом рынке крупные участники - это сами биржи и их очень мало, они фактически владеют рынком. Что это значит - они обладают всей полнотой информации о своих клиентах, какие у них суммы, когда поступают (и эти поступления можно придержать на время, чтобы что-нибудь изменить), какие паттерны поведения у каждого персонально ит.п. и вся эта информация не просто позволяет делать какие то прогнозы, но и манипулировать ценой, играя против клиентов. Самые простые места, где этим занимаются - маржинальная торговля. Легче обмануть, легче манипулировать.
    Как и почему это происходит? потому что нет регулятора который может за инсайд наказать, вот и торгует сама биржа против своих клиентов, используя приватную информацию о них (и я уверен что на больших регулируемых рынках происходит похожее просто с более сложными схемами).

    Ну и бонусом - криптовалютный рынок самый дорогой по комиссионным сборам.
    spoiler
    Когда то были bitshares - почти неподконтрольная, с самыми низкими комиссиями (правда и ликвидность не на высоте), на этом рынке можно было делать очень хороший доход простыми алгоритмами, но потом как это обычно бывает с не PoW консенсусом, самый главный, чтобы не потерять свои миллионы угробил проект.

    Все другие проекты после либо с нулевой ликвидностью либо с неадекватно высокими комиссиями и не функциональным рынком, читай нет спотового рынка с buy/sel отложенными ордерами, точно помню за успешную попытку возродить такой же, SEC наказала буквально разработчика за это, а он еще публично благодарил что не в ж... а только штрафом обошелся. Все последующие проекты были говно на основе рынков ликвидности, где ты не можешь сделать нормальную отложенную сделку по своей цене, только по цене алгоритма с огромной комиссией, ну или торгуй по маркету
    Ответ написан
    4 комментария
  • Как корректно использовать селектор при парсинге сайта?

    Vindicar
    @Vindicar
    RTFM!
    Ну если не ограничивать себя видеоуроками, а узнать, как именно работает Web, то можно догадаться до первого шага по отладке такой ситуации:
    Сохрани ответ сайта в файл и посмотри, что тебе пришло на самом деле.

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

    Во-вторых, современные сайты - это не статические странички аля 1991й год. Они зачастую битком набиты JS-скриптами, которые исполняются в среде браузера. Поэтому нередко сайт отдаёт страницу-заглушку, на которую средствами скрипта уже подгружается контент. BeautifulSoup не исполняет JS, это не его задача, а потому ты увидишь только заглушку, и больше ничего.
    Ответ написан
    3 комментария
  • Где учить нейросети python?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Где учить нейросети python?

    Может, кто-нибудь подскажет как изучить это с полного нуля до уровня специалиста?

    Бесплатная книга Deep Learning от Йошуа Бенджио, Иэна Гудфеллоу и Аарона Курвилля.
    Ответ написан
    2 комментария
  • Возможен ли доступ в интернет без провайдера?

    hint000
    @hint000
    у админа три руки
    spoiler
    Как можно иметь доступ в интернет без провайдер? По идее для этого нужно стать провайдеров?
    Провайдером становятся не для того, чтобы иметь доступ в Интернет без других провайдеров, а чтобы вложить N миллиардов долларов, и через 10 лет вернуть вложения, а через 20 лет заработать в Y раз больше вложенного.

    Откуда берут интернет провайдеры?
    Чтобы быть провайдером, прежде всего вам нужна кабельная инфраструктура. Если вы охватили своими кабелями один город, то подключаетесь к сети всё равно через магистрального провайдера, у которого кабели проходят по крайней мере через всю страну.
    https://habr.com/ru/companies/rootwelt/articles/305634/
    Если вы стали магистральным провайдером (ваши кабели по крайней мере заходят в соседние страны, вам это разрешили сделать, вы встречаетесь по крайней мере с министрами своей страны и соседних стран), то у вас прямой обмен трафиком с другими магистральными провайдерами. Ну а чтобы не зависеть ни от одного магистрального провайдера, вам нужно охватить своими собственными кабелями всю планету. Ну или попробовать обойтись без кабелей - запустить на орбиту тысячи спутников, как это делает Илон Маск. Тогда у вас будет своя собственная всемирная сеть, но в ней никого не будет. Ведь все остальные подключаются через каких-то провайдеров, а вы не хотите иметь контактов ни с кем из провайдеров, т.е. ваша собственная сеть будет изолирована от всех.
    Ответ написан
    Комментировать
  • В каких IT профессиях джуну можно работать на удалёнке или фрилансе?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    В каких IT профессиях джуну


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

    Vindicar
    @Vindicar
    RTFM!
    Значит, ты в какой-то момент делаешь в глобальной области видимости присваивание вида execute = tkinter.Button(...)
    Ответ написан
    1 комментарий
  • Какая space complexity у данного алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Не спрашивайте у чатжпт ничего, в чем не являетесь полным экспертом. Он почти в половине случаев выдает очень правдоподобный бред.

    У этого алгоритма действительно пространственная сложность O(N) (если N - размер входного массива). Однако, можно натянуть сову на глобус, если отдельно считать входные и выходные данные (которых O(N)). Тогда можно сказать, что алгоритм использует O(1) дополнительно пространства. Входные и выходные данные все равно понадобятся, поэтому иногда их не считают.

    У меня нет доступа к этому видео. Если они там говорят "additional space is O(1)", то это именно так, как я описал выше.
    Ответ написан
    1 комментарий