• Как вывести все возможные комбинации бросков двух кубиков?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Я люблю всех однострочниками наказывать:
    py -c "n,m=int(input('n=')),int(input('m='))" "((a, b) for a in range(1,n+1) for b in range(1,m+1))"

    У вас в задании сказано, что кубики "разные". Понимаю это так, что мы их можем различить даже если число граней на них одинаково, например по цвету.
    Следовательно даже в этом случае мы сможем различить комбинации, например (3, 5) и (5, 3). Кубики-то разные.
    Ответ написан
    2 комментария
  • Не могу найти ошибку в моей простой программе на python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы итерируетесь по символам введённого логина и каждый символ сравниваете с именем пользователя:
    for i in (user_avLog):
    if i == (userName):
    print('Здравствуйте!,' , (user_avLog

    Конечно это сработает только в том случае, если имя пользователя состоит из одной буквы.
    Читайте любую книжку по питону в части циклов.
    Ответ написан
    Комментировать
  • Как отсортировать json как на JSON placeholder?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вам нужно сначала преобразовать свой файл (в котором, видимо на верхнем уровне список) в перечень вложенных в этот список json'ов:
    jq -c ".[]"
    Потом разбить на группы по N штук:
    split -l 10 -d - my_chunk_prefix_
    Получим файлы my_chunk_prefix_*, но в каждом из них не валидный json, a json-строки. Их нужно преобразовать к обычным josn'ам.
    for f in my_chunk_prefix_*; do cat $f | sed '1s/^/[/; $!s/$/,/; $s/$/]/' | jq "" > $f.json ; rm $f ; done


    Всё. На этом у вас есть пагинированный json-файл в виде статики.

    Итак, ещё раз:
    jq -c ".[]" my_big.json | split -l 10 -d - my_chunk_prefix_
    
    for f in my_chunk_prefix_*; do cat $f | sed '1s/^/[/; $!s/$/,/; $s/$/]/' | jq "" > $f.json ; rm $f ; done

    Так себе решение по читабельности, уверен, что сборку json из строк можно было сделать без sed на чистом jq, но читать мануал некогда.

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

    Вообще почитайте мануал по jq, не исключено, что там есть готовый способ сделать пагинацию за один простой шаг вместо всех этих танцев с башем.
    Наглядно поупражняться с магией jq можно тут: https://jqplay.org/.
    Ответ написан
    1 комментарий
  • Как скачать wget'от ссылки из файла и сохранять не index.html, а site.ru?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Предыдущий немногословный оратор имел в виду, что у wget есть ключ -O, который говорит под каким именем надо сохранить скачанное.
    Ссылка на мануал, как бы, намекает на правильный путь поиска подобных решений и мне такой воспитательный подход крайне импонирует.

    Однако я вам рекомендую вместо xargs использовать вот такое:
    while read -r; do wget $REPLY -O $REPLY.html; done < ru.txt
    Ответ написан
    1 комментарий
  • Как происходит работа чат-бота по API?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Конечно можно. У CRM есть API. Вы в чат-боте делаете обработчики разных команд и сообщений. Когда разузнаете у пользователя всё необходимое - дёргаете с помощью библиотеки requests API своей CRM'ки и в ответ она вам (боту в смысле) статус операции. Ответ парсите, анализируете, если всё норм, то пишете об этом человеку. Если процесс покупки многоступенчатый, то держите у бота в памяти словарь пользователей и для каждого помните состояние анкетирования. На каждом шаге делаете нужные запросы к CRM.
    Ответ написан
    6 комментариев
  • Как совместить фото с музыкой?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Предыдущий оратор имеет в виду, что есть такая утилита ffmpeg.
    Она, кстати, может сделать то, что вам требуется просто из командной строки без всякого питона. Но из питона же можно командную строку запускать, так что формально да, с помощью него тоже.
    Вот из официальной документации мануал:
    https://trac.ffmpeg.org/wiki/Slideshow#Addingaudio
    Более того, можно еще и сделать эффект панорамирования и плавного масштабирования, чтобы видео получилось не таким статичным
    Ответ написан
    2 комментария
  • Хочу сделать сайт для игры в шахматы, django на бекенд подойдет?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    django подойдёт.
    С ним в комплекте вы получите админку, регистрацию, авторизацию.
    Нетрудно найти готовые хорошие модули для джанго с чатом на веб-сокетах.
    Есть готовые джанговские модули OAuth и всякие интеграции в соцсеточки.
    Ответ написан
    Комментировать
  • Как обработать вывод ошибок в скрипте на Python в Debian?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Например так:
    ERR = 'Warning: Unable to locate configuration directory, default config not loaded.'
    try:
        output = subprocess.check_output(args)
    except subprocess.CalledProcessError as e:
        sys.stderr.write(
        'ERROR: call to mosquitto_pub failed with error code {}\n'.format(e.returncode))
    else:
        for line in output.decode('utf-8').split('\n'):
            if err not in line:
                print(line, file=sys.stderr)

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

    НО! Я, вот, только что подумал, что это проще и лучше сделать со стороны баша. В командной строке где вы запускаете своего москита можно пайпом добавить тупой фильтр строк (хоть даже грепом).
    Ответ написан
  • Как сделать replace в файле?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Да можно и питончиком из командной строки сделать:
    py -x "x.replace('WHAT', 'TOWHAT')" < inputfile.txt > outputfile.txt

    Это если файл текстовый. Если бинарный, то по-другому чуть-чуть, но в бинарном надо осторожно такое менять, может формат поплыть.
    Если нужно исключить замену тех же символов в составе других слов, то вот так:
    py -x "re.sub('(\W)What(\W)', '\\\1ToWhat\\\2', x)"" < inputfile.txt > outputfile.txt
    Ответ написан
  • Какую книгу подарить электронщику?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Подарите электронщику электронную книгу.
    Беспроигрышный вариант.
    Если формат побольше, то удобно будет мануалы и даташиты читать в PDF.
    Обычная техническая литература сейчас устаревает быстрее, чем успеваешь принести её из магазина. Разве что какие-то фундаментальные вещи, но что-то человек уже прошел в институте, что-то уже, возможно, есть... тут не угадаешь. В эпоху интернета надо дарить электронные девайсы. Даже дешевый планшет лишним не будет, если его можно закрепить над паяльной станцией и использовать чисто под оперативный просмотр даташитов как дополнительный экран.

    Ещё один вариант на грани фола - это сфотать рабочее место в мастерской, чтоб были видны мультиметры, осциллограф, паяльные пасты и прочее. Намётанный взгляд специалиста в той же области сразу увидит какие приборы и инструменты можно проапгрейдить на более свежие. Тех же мультиметров, особенно если он окажется на столе один, лишних не бывает. Даже если это довольно дешевый с алика, но на 9к отсчетов.
    Ответ написан
    2 комментария
  • Ошибка в коде python, в чём проблема?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Присвоение забыли:
    weather_parametres{
        '0': '',
        'T': ''
    }

    Вот так:
    weather_parametres = {
        '0': '',
        'T': ''
    }
    Ответ написан
  • Насколько плохая идея использовать Python для создания браузерных игр?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В качестве бэкенда - норм.
    На фронте питона нет. Разве что рассматривать какие-нибудь кустарные транспиллеры вроде такого: https://github.com/replit-archive/empythoned
    Но с ними вы намучаетесь так намучаетесь. Вернее, судя по тому какой и где вы задаёте вопрос, ничерта у вас не получится.
    Ответ написан
    Комментировать
  • Как создать несколько репозиториев-хостингов?

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

    Вообще странная у вас задача. Мне кажется вы хотите нецелевым способом использовать ресурсы гитхаба. Не удивлюсь, что он постарается вам помешать.=)
    Ответ написан
    Комментировать
  • Как это закодить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    reg_expr - это не словарь, а грамматика, описывающая некое выражение.
    По русски читается примерно как:
    Регексп - ЭТО:
    ЛИБО Атом
    ЛИБО ОператорИли(с двумя аргументами: первый - Регексп; второй - тоже Регексп)
    ЛИБО ОператорТочка(с двумя аргументами: первый - Регексп; второй - тоже Регексп)
    ЛИБО ОператорЗвёздочка(с одним аргументом, который Регексп).

    Ниже важное дополнение:
    Priority of the key is following ‘*’ > ‘.’ > ‘|’
    ‘*’ is postfix
    ‘.’ and ‘|’ are left associative

    Это значит, что у ОператораЗвёздочка самый высокий приоритет, потом идёт ОператорТочка, потом ОператорИли.
    ОператорЗвёздочка постфиксный, то есть применяется после своего единственного аргумента.
    ОператорТочка и ОператорИли - лево-ассоциативные.

    Похоже автору вопроса нужно написать регулярное выражение, которое будет матчиться со строкой, соответствующей описанной грамматике.
    Дальше может быть только решение задачи, а автор о нём не спрашивал, а лишь спросил с чего начать.
    Не буду ломать ему удовольствие и спойлерить результат=)
    Ответ написан
    Комментировать
  • Число пар одинаковых элементов в списке?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вот как выглядит код у автора вопроса:

    b = list()
    a = None
    
    while a != '':
        a = str(input())
        b.append(a)
        b = list(set(b))
            array_d = {}.fromkeys(b, 0)
            for c in b:
                array_d[c] += 1
          print(array_d)

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы закодировали бинарное несжатое изображение (где каждый байт или группа байтов в зависимости от того сколько каналов - это отдельный пиксель) jpeg-кодеком в сжатый формат с потерей качества. У этого формата есть шапка и там пиксели нее представлены в виде массива байт, там всё более сложно.
    Но сам формат -- это байтовая строка, которую вы теперь зачем-то превращаете в массив...
    Конвертируйте JHPEG обратно в битмап и будет вам такой же массив как исходный. Возмодно почти такой же, поскольку у вас есть потеря качества и некоторые пиксели могут оказаться немного перекрашенными.
    Ответ написан
    Комментировать
  • [22007] ERROR: invalid value "{dt." for "YYYY" Подробности: Value must be an integer?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Похоже, в ваш SQL попала строка шаблона в который забыли подставить значение:
    {dt.ToString("YYYY-MM-dd")}
    SQL эту строку интерпретирует как обычную строку, которую вы хотите привести к дате по формату YYYY-MM-dd. Само собой четыре символа {dt. не являются четырьмя цифрами года, которые ожидаются по шаблону. Об этом и ошибка.
    Проблема не здесь, а уровнем выше, где вы готовите SQL-запрос.
    Ответ написан
    Комментировать
  • Каков смысл скалярного произведения в Cel Shading?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Для реализации Cel Shading вычисляется скалярное произведение между нормалью поверхности(полигона) и источником света.
    какой именно луч света, падающий на поверхность(полигон), используется для вычисления угла?

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

    какая длина у вектора нормали полигона, от чего она зависит?

    Ну по определению нормаль - это прямая, перпендикулярная (в данном случае) поверхности. У прямой нет длины. А вот вектор нормали - это уже единичный вектор. Технически ничто, наверно, не мешает ВЗЯТЬ не единичный, а вектор любой произвольной длины. Наверно можно даже придумать для чего бы это кому-то могло понадобиться. Если вам для чего-то нужно -- используйте.
    Наверно интересно поиграться домножив вектора нормали на значения второй производной в соответствующих точках поверхности. Будет своеобразная мера кривизны поверхности в точке.
    Ответ написан
    Комментировать
  • Как создать копию одного раздела на другом?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Утилита dd.
    Только аккуратно выясните где какой раздел и какое у него имя. Например с помощью gdisk.
    Вот пример как склонировать:
    https://superuser.com/questions/1050894/using-dd-t...
    Ответ написан
    2 комментария
  • Как сделать чтобы игрок реагировал на платформу только прыгая на нее сверху?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Добавьте в условие проверку знака вертикальной скорости игрока. Если игрок летит вниз и находится выше платформы, то прыжок, иначе ничего не делать
    Ответ написан