Задать вопрос
  • Почему не удаётся найти путь?

    Vindicar
    @Vindicar
    RTFM!
    AudioSegment.converter = f"{os.getcwd()}\\ffmpeg.exe"

    Ты уверен, что файл лежит в текущем каталоге? Это не то же самое, что каталог программы.
    Если тебе нужен каталог программы, лучше его и взять:
    from pathlib import Path
    import sys 
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()
    FFMPEG = SCRIPT_DIR / 'ffmpeg.exe'  # чтобы не париться с разделителем каталогов (/ или \)
    Ответ написан
    Комментировать
  • Сколько всего паролей будет?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если пароли считаются уникальные, как строки, то ответ - 2^n: любую строку из "a" и "b" можно как-то составить.

    Если пароли считаются уникальные, как последовательность "aa", "a", "b" и "bb" (так, для трех букв отдельно подсчитаются a+aa, aa+a и a+a+a), то ответ можно найти по рекуррентной формуле F(N) = 2(F(N-1)+F(N-2)), F(1) = 2, F(2) = 6.

    Формла выводится так: В конце может быть один символ. Тут 2 варианта - это "a" или "b", тогда получается F(N-1) последовательностей длины N-1. Если же в конце идет "aa" или "bb", то таких последовательностей ровно F(N-2). Просуммировав все получится 2(F(N-1)+F(N-2))

    Это что-то вроде чисел фиббоначи. Можно еще вывести формулу:
    F(N) = (1+sqrt(3))^(N+1)-(1-sqrt(3))^(N+1) / (2sqrt(3))


    Если пишите программу, то лучше считать F() итеративно. Только учтите, там будут очень большие числа - в 64-битный тип не поместится.
    Ответ написан
    Комментировать
  • Зачем при конвертации csv в json теряется первая строка?

    Предполагается, что в первой строке CSV-файла идёт заголовок с именами колонок.
    header: int, list of int, None, default ‘infer’
    Row number(s) to use as the column names, and the start of the data. Default behavior is to infer the column names: if no names are passed the behavior is identical to header=0 and column names are inferred from the first line of the file, if column names are passed explicitly then the behavior is identical to header=None. Explicitly pass header=0 to be able to replace existing names. The header can be a list of integers that specify row locations for a multi-index on the columns e.g. [0,1,3]. Intervening rows that are not specified will be skipped (e.g. 2 in this example is skipped). Note that this parameter ignores commented lines and empty lines if skip_blank_lines=True, so header=0 denotes the first line of data rather than the first line of the file.
    https://pandas.pydata.org/docs/reference/api/panda...
    Ответ написан
    1 комментарий
  • Где лучше учиться на программиста, если тебе за 35?

    xez
    @xez
    TL Junior Roo
    Шансы от этого не зависят.
    Учиться в любом случае придётся самостоятельно.
    Ответ написан
    Комментировать
  • Как прикрепить в вопрос объёмный код?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Не прикреплять объёмный код, всё равно никто не будет вычитывать, здесь не фриланс. Вместо этого стоит прикрепить минимальный воспроизводимый пример. Часто при попытке создания такового потребность в вопросе вообще отпадает.
    Ответ написан
    Комментировать
  • Ошибка IndexError: list index out of range. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Включить голову и подумать, что же ещё.
    value = call.data.upper().split('/')
    Ты ожидаешь, что call.data будет содержать хотя бы один знак /, тогда value будет содержать два элемента - с индексом 0 и индексом 1. Раз IndexError, значит, скорее всего, value содержит только один элемент. А это слуится если call.data не содержит разделителя, в твоём случае /.
    b1 = types.InlineKeyboardButton('USD/EUR', callback_data='usdeur')

    Ну собственно, ты и задаёшь значения callback_data, не содержащие /. Вот и вся разгадка.
    Ответ написан
    Комментировать
  • Как написать симулятор посадки на Луну?

    1) Как рассчитывать движение, работу двигателя и так далее?
    2) Как зафиксировать коллизию объектов (Луны и станции)?

    Проще всего - взять уже готовую физическую библиотеку, которая и коллизии считает и импульс.

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

    Для расчёта коллизий есть разные алгоритмы - тут тебе следует погуглить. Они собственно строятся на том, что у тебя есть какая-то модель формы объекта и векторы скоростей.
    3) Как процедурно сгенерировать реалистичную поверхность Луны?

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

    https://en.wikipedia.org/wiki/Lunar_Lander_(video_...
    Ответ написан
    1 комментарий
  • Как преобразовать html страницу в картинку на стороне сервера?

    Vindicar
    @Vindicar
    RTFM!
    а браузера на сервере не будет.

    Нет ножек - нет мультиков (с)
    Ты или используешь готовый движок HTML рендеринга и исполнения скриптов (т.е. браузер), или пишешь свой.
    Сразу скажу, последнее - нереально.

    Лучше зайди с другой стороны. Ты можешь использовать matplotlib для генерации статического изображения, так как он умеет не только графики, но и TeX-разметку для формул. А уже это изображение можно закэшировать и вставлять в HTML или в PDF, по желанию юзера.
    Ответ написан
    Комментировать
  • Можете посоветовать книги или курсы по python?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно нахожусь между начинающим и средним

    Вот темы которые я знаю на достаточном уровне:
    - Основы python (циклы, условные операторы, переменные, функции, строки, списки)
    - Вложенные списки (матрицы)
    - Кортежи
    - Множества
    - Словари
    - Некоторые модули

    Это даже не джун, о каком среднем Вы говорите?

    Можете посоветовать книги или курсы по python?

    1. Гуглите "учебник python" и решаете все от А до Я.
    2. Гуглите следующий учебник, который восполнит пробелы п1.
    3. Ищите себе пет-проект и пытаетесь его реализовать (повторить несколько раз). Т.к. Python сильно разносторонне-развитый язык, то и проекты должны быть в портфолио такие, которые от Вас может ожидать работодатель/заказчик.
    4. Ищите людей, которые сделают ревью п.3.
    5. Заливаете достойные проекты на гит.
    6. Идете на собесы, попутно устраняя пробелы в знаниях и пет-проектах, которые услышите на собесах.
    Ответ написан
  • Можно ли учить Go первым языком?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Учить можно, а рассчитывать, что это облегчит вам вход - не стоит. Вакансий на Go сильно меньше, а требования к кандидатам выше.
    Ответ написан
    2 комментария
  • Как быстро изучить C#?

    @tukreb
    Быстро изучить просто.
    Придумывайте любой проект и начинаете его делать.
    И самое главное, вы должны делать это самостоятельно, без всяких тостеров.
    Книги вам помогут любые где есть просто базовые знания, а вот всякие ютуб каналы особо не помогут, может только чуть разобраться в фреймворках, но всё равно документация рулит.
    Если хотите создавать игры, то копайте движок Unity и его документацию.

    Сам процесс простой.
    1. Пишите как знаете проект, главное чтобы заработало как планируете, на сам код не обращайте особого внимания.
    2. Начинаете переписывать проект с полученным опытом из 1 пункта с использование новых знаний из прочтения книг по всяким архитектурам и паттернам.
    3. Повторяете в цикле первые 2 пункта до 11 класса каждый день тратя по 4 часа минимум.

    Весь ваш прогресс заносите через git на гитхаб, пригодится, когда будете искать работу.
    Ответ написан
  • Как устроена бибилотека aiogram внутри а именно FSM?

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

    Пример: часы-будильник. У них могут быть четыре состояния:
    - будильник выключен (только часы)
    - будильник включен (ожидание времени следующего звонка)
    - звучит звонок
    - досыпание
    И три события:
    - сменилась минута
    - пользователь нажал кнопку "вкл-выкл"
    - пользователь нажал кнопку досыпания
    Схему переходов между состояниями можешь придумать сам. В частности, событие "сменилась минута" будет обрабатываться по-разному в каждом из состояний.

    Это базовое понятие. В твоём случае автомат - это StateGroup, его отдельные состояние - это State, а сигналы - события бота, привязанные к автомату. Важно понимать, что у тебя, скорее всего, будет много копий автомата - по одной на каждого пользователя.

    Далее возникает вопрос: а что если нам нужно передавать какие-то данные из состояния в состояние? Вот тут возникает понятие контекста автомата, т.е. какого-то набора данных, которые могут читаться и изменяться при его работе. Это FSMContext.

    Наконец, сугубо практический вопрос: автомат должен "помнить", в каком он состоянии, и должен хранить свой контекст. Где он будет это делать? Вот тут на помощь приходят классы Storage. В частности, MemoryStorage хранит эти данные в памяти. Ненадёжно, не переживает перезапуск бота, но работает быстро и удобно при отладке.

    Попробуй реализовать очень простого бота с автоматом состояний, не используя State, а храня состояние для пользователя самостоятельно. Например, в словаре вида userid: (состояние, контекст). И проверяй вручную состояние и контекст при обработке событий. Тогда поймёшь, что примерно происходит внутри FSM.
    Ответ написан
    2 комментария
  • Почему возникает ошибка при работе с Python и OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    1. Не принимать предупреждения за ошибки.
    2. Работать на машине, где видяха поддерживает одну из указанных библиотек, и поставить на неё эту библиотеку.
    Ответ написан
    Комментировать
  • Что делать, когда Wolfram говорит, что будет корень, а считать не хочет - a³+b³=z³?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Этот корень - иррациональное число. Бесконечное. Его точно на компьютере не подсчитать никак. Это будет какое-то большое число с бесконечным не повторяющимся набором цифр после точки.

    Точнее всех будет считать python если использовать библиотеку Decimal:
    from decimal import *
    getcontext().prec = 400
    a = Decimal('112312312312312311231231231231231123123123123123112312312312312311231231231231231123123123123123');
    print(pow(a,Decimal(1/3.0)))


    Можете хоть тысячи знаков считать, ограничения - в основном скорость работы и требования по памяти.
    Ответ написан
    5 комментариев
  • Как сделать так чтобы в scrapy, парсились дубликаты ссылок? То есть так чтобы каждая спаршенная ссылка, должна создать уникальный файл. Как?

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

    Newto
    @Newto
    Добрый день. Я перечитал все ответы выше, а так же комментарии к ним. Решил прокомментировать, с точки зрения своего опыта(я занимаюсь разработкой уже более 15-ти лет). Для удобства чтения я буду писать по пунктам.

    1) Зубрёжка. Каждого из нас, кто ходил в школу, заставляли зубрить таблицу умножения. И, в конце-концов, это помогало в последующем обучении математики, не правда ли? В программировании есть такие же вещи, которые называются "стандарты". Вот эти стандарты и нужно, для начала, зазубрить. А позже и вникнуть, зачем они придуманы.

    2) Методика "объяснение и практика". Вы пишете, что "при таком способе мне приходится одно и тоже глазами несколько раз пробегать чтобы запомнить". Это, с моей точки зрения, в корне не верно. Ибо то, что вам объясняют, не нужно "пробегать глазами" несколько раз, что бы запомнить. Это вообще не нужно запоминать если это не те самые "стандарты"; это нужно осмыслить и понять. После того, как к вам придёт понимание как это работает, зачем и почему это надо -- вы сможете это использовать, осмысленно, в собственном коде.

    3) Платные курсы. Курсы ныне очень разные. Кто-то просто, простите, гребёт бабло на этом всём. А кто-то преподаёт с душой, хорошо и понятно рассказывая. Поэтому платный курс -- это хорошо, но только тогда, простите за тавтологию, когда это хороший курс. Читайте отзывы о курсе, советуйтесь с теми кто его уже прошёл(в идеале) и тогда уже решайте, тот ли этот курс, что даст вам необходимые знания.

    4) ВУЗ. Более 10-ти лет назад, у меня в подчинении, в вебстудии, работал PHP джун. Он доучивался в МГТУ имени Баумана. И он не знал ничего. Совсем. Мне приходилось объяснять ему простейшие вещи, типа что значит иструкция "$a += $b;". Сам же я учился в ВУЗе малоизвестном, на факультете "прикладная информатика в экономике" и наш преподаватель информатики, на первом курсе, на вопрос что значит в коде программы на языке C++ инструкция "с++" ответил, что это "так язык называется". Однако, вскоре ко мне начали ходить сокурсники, с просьбами "а напиши программку". И происходило это потому что я сам загорелся программированием, купил книжки, установил всё что нужно было установить на компьютер и начал "творить волшебство", как это мне тогда виделось, с горящими глазами. Короче говоря не нас учат ВУЗы, а мы учимся в ВУЗах или учимся без них. Тут уж как пойдёт.

    5) Ну и последний, самый важный, с моей точки зрения, пункт. Это Интерес. Если вам интересно программирование, вам нравится разбираться, что-то делать самостоятельно, а не только тогда когда кто-то поставил задачу, то у вас все получится. И как именно это всё учить у вас вопроса, в конце концов, не возникнет. Разбирайтесь, ковыряйте, вникайте и всё будет. Единственное что -- очень желательно, что бы перед вашими глазами были хорошие примеры. Потому что я, в свое время, тоже разбирался, учился и вникал, "гладили по голове", как писали выше в комментариях к одному из ответов, меня уже мои наниматели, потому что я все делал быстро и без ошибок, т.е. работало все так, как было нужно клиентам веб-студии, собеседование в которую я тогда прошел без каких-то проблем. Но вот мой код тогда был, откровенно говоря, тем, что сейчас называется "говнокодом". Потому что некому было мне показать как писать есть хорошо, а как есть плохо.

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

    bytes = 'b'.encode('utf-16le')
    print(bytes[0]) # 100
    print(bytes[1]) # 0
    Ответ написан
    Комментировать
  • Как посчитать стрит флеш без одной карты на флопе?

    1. В колоде 52 карты.
    2. При этом две карты у тебя на руках.
    3. Стрит флеш - это когда карты идут по порядку и все одной масти.
    4. Тк у нас девятки, то мы ждём, что будут такие наборы:
    - 6, 7, 8
    - 7, 8, 10
    - 8, 10, J
    - 10, J, Q
    Всего 8 благоприятных исходов

    Сколько всего возможно исходов?
    Нам нужно посчитать, сколько всего уникальных наборов по 3 карты можно получить из колоды в 50 карт.
    Операция, которая даст нам это количество название "сочетание из 50 по 3"
    И равняется оно C(50,3) = 50! / (3! * (50 -3)!)

    Делим 8 на С(50,3) и получаем примерно 0.0408%
    Ну и шанс, что последняя карта соберёт нам стрит флеш равен 4.25% (2/47)
    Ну и если самая самая последняя карта, если предыдущая не дала нам благоприятный исход - 2/46 ~ 4.3%

    Надеюсь, что нигде не ошибся.
    Ответ написан
  • Как сделать отправляемые запросы анонимными?

    Vindicar
    @Vindicar
    RTFM!
    Анонимность - штука многогранная.
    Для начала, что значит "со мной"? Кто есть "я"? Другая учётка на этом же сайте? Айпишник из российского диапазона? Учётка в соцсетях? Физлицо Вася Пупкин, паспорт-серия-номер-выдан? Ответы будут очень разные.
    1. Какие данные сайт требует для работы? Можно ли по этим данным тебя идентифицировать?
    Грубо говоря, если для реги нужен телефон, и сайт не работает с российским сегментом, то VPN не поможет, если у тебя нет зарубежного номера.
    2. Какие данные отдаёт твой клиент? Например, куки, localStorage, эксплоиты для анализа истории, инфа от логинов в соцсетях, и тому подобные вещи. requests и другие клиенты-либы ничего такого не отдают, если специально их не настроить. В случае с селениумом есть browser fingerprint, но он тоже ломается при желании.
    3. Что сайт знает о твоём IP адресе? Принципиально ли ему вообще это знание? Одно дело, если сайт требует/не допускает айпишники из определённого диапазона. Другое - если там ограничение на число запросов с одного IP. Третье - если ему вообще пофиг на IP и он пытается идентифицировать юзера иначе.

    Короче, выводы простые.
    1. без конкретики тут говорить не о чем.
    2. Однострочник import sdelaj_mne_kruto не прокатит.
    Ответ написан
    Комментировать