• Как человекообразно отсортировать json в python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Стандарт JSON не гарантирует упорядоченность ключей, поэтому не стоит даже пытаться их сортировать.
    Ответ написан
    1 комментарий
  • Нужна альтернативу PyQt и желательно Веб, что посоветуете изучить или на что обратить внимание?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Необходимый минимум:
    1. Изучаешь общие принципы работы сетей в целом и протокола http в частности.
    2. Изучаешь html и css.
    3. Изучаешь язык запросов SQL, принципы работы реляционных баз данных и какую-нибудь конкретную СУБД.
    4. Изучаешь Django.


    Кроме этого желательно:
    • Освоить администрирование Linux.
    • Настройку wsgi- и web-серверов.
    • Изучить JavaScript, в идеале с фронтовым фреймворком.


    А электрон этот ваш, во-первых, к web- разработке не относится, а во-вторых, мерзкий костыль, на котором можно разработать только говно.
    Ответ написан
    4 комментария
  • Как создать свой PL?

    Vindicar
    @Vindicar
    RTFM!
    Даже для простого ЯП тебе придётся решить минимум четыре задачи:
    1. Лексический анализ. Входной текст нужно превратить в цепочку токенов, например z = x + y превратится в что-то типа
    [ (token.IDENTIFIER, 'z'), (token.OPERATOR, '=') (token.IDENTIFIER, 'x'), (token.OPERATOR, '+') (token.IDENTIFIER, 'y') ]

    2. Синтаксический анализ. Тебе нужно превратить цепочку токенов в древовидную структуру. Корень дерева - программа целиком, промежуточные узлы - элементы программы (функции, составные операторы, сложные выражения и пр.), листья - отдельные элементы сложных выражений и примитивные операции без параметров (типа pass в питоне).
    Например цикл while будет иметь два дочерних узла: выражение-условие и тело цикла.
    3. Области видимости. Тебе нужно иметь возможность сопоставить имя(идентификатор) и сущность (переменную, функцию и т.п.).
    Самый простой способ - позволить узлу дерева описывать идентификаторы, которые известны в этом узле. Тогда при раскрытии идентификатора достаточно подняться вверх по дереву, пока не найдёшь нужное имя.
    4. Выполнение. Так как ты хочешь интерпретируемый язык, то выполнение будет сводиться к обходу дерева в глубину. Некоторые операторы типа break могут вмешиваться в этот порядок. Это описывается паттерном Интерпретатор из набора Банды Четырёх.

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

    @antares4045
    string = '''lalalala
    lalalaa1
    lalalaa2
    '''
    la = string.split('\n')[0]
    la1 = string.split('\n')[1]
    la2 = string.split('\n')[2]
    
    #ну или
    
    la, la1, la2, *_ = string.split('\n')
    Ответ написан
    1 комментарий
  • Sqlite3, Python, Aiogram?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    2 комментария
  • Как в питоне задать пути к стандартным папкам?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если вам надо внутри вашего скрипта создавать, считывать и изменять файлы и папки, опираясь на привязку к «домашней» папке пользователя, можно сделать что-то такое:
    from pathlib import Path
    my_home_dir = Path.home()
    new_folder_name = 'my_new_folder'
    new_folder = Path(new_folder_name)
    new_folder_full_path = my_home_dir / new_folder
    try:
        Path.rmdir(new_folder_full_path)
    except FileNotFoundError:
        pass
    print(new_folder_full_path.is_dir())
    try:
        Path.mkdir(new_folder_full_path)
    except FileExistsError:
        pass
    print(new_folder_full_path.is_dir())


    В скобках замечу
    Следует отметить, что существуют сторонние библиотеки, которые не понимают такие пути. Для таких библиотек приходится получать строчное представление пути.
    Ответ написан
    2 комментария
  • Столкнулся с непонятным - откуда лишние 00000002?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Ответ написан
    Комментировать
  • Столкнулся с непонятным - откуда лишние 00000002?

    @danila_belyy
    Поступил в ВУЗ, хочу понять суть программирования.
    В Python тип данных float реализован по стандарту IEEE-754 как число с плавающей точкой двойной точности (64 бита) с основанием экспоненты равным 2. Реализация таких чисел заложена прямо в железо любого современного процессора. Поэтому float в Python работает как аналогичный тип данных double в таких языках программирования как С#, С++, Java и т.д. И имеет такие же ограничения и «странности». Так как float поддерживается аппаратно, быстродействие при использовании этого типа данных сравнительно велико.

    Тип данных Decimal – число с плавающей точкой с основанием экспоненты 10. Он реализован по стандарту IBM: General Decimal Arithmetic Specification, в свою очередь основанному на стандартах IEEE.

    Тип данных Decimal реализован программно, поэтому он в разы медленнее типа данных float, реализованного аппаратно. Сам тип данных Decimal написан на языке С.

    Тип данных Decimal оперирует числами с произвольной – задаваемой программистом, но конечной точностью. По умолчанию точность составляет 28 десятичных знаков.

    Если кратко: хочешь скорость - float! Если хочешь точность - decimal
    Ответ написан
    Комментировать
  • Можно ли перехватить присваивание аргументов параметрам функции?

    Vindicar
    @Vindicar
    RTFM!
    Ты хочешь странного.
    Или тебе подконтрольна функция, или вызывающий её код.
    Если тебе подконтрольна функция, пусть она сама преобразует свои аргументы как ей надо.
    Если функция неподконтрольна, но подконтролен вызывающий код, пусть он преобразует аргументы как надо функции.
    А если ни то ни то не устраивает, сделай функцию-обёртку, хоть простую, хоть декоратор, и пусть она это делает, а потом вызывает исходную функцию.
    И что такое ParamField?
    Ответ написан
    4 комментария
  • Корзина из баз данных в телеграм боте?

    Vindicar
    @Vindicar
    RTFM!
    Ну если есть актуальная таблица товаров, то корзиной будет таблица вида "ID пользователя - ID товара - Количество". Тогда при выборе товара вписываете ID пользователя, который отправил сообщение. Ну а чтобы показать корзину пользователя, просто фильтруете по ID пользователя, от которого пришел запрос.
    Ответ написан
    Комментировать
  • Как исправить ошибку при сохранении файла в json?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Прочитать документацию на функцию json.dump и проверить порядок параметров.
    Ответ написан
    Комментировать
  • Как изменить вывод в консоль на python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    [print(i) for i in ['main.py', 'dist.py']]
    Ответ написан
    5 комментариев
  • Поможете создать текстовый квест на python?

    Vindicar
    @Vindicar
    RTFM!
    Так.
    Но когда дело дошло до переделывания структуры программы - > начались проблемы с не знанием символов, операторов, логических уровней python

    Во-первых, нужно освоить азы языка. Порешайте простые упражения, освойте ветвления, циклы, функции, азы классов. Этого хватит.
    текстовый квест

    Во-вторых, стоит освоить идею конечного автомата (state machine). Это реально очень просто.
    Как освоишь, поймешь, что твой квест - это кучка параллельно работающих конечных автоматов. Один описывает локации мира, другие - состояния отдельных квестов (не начат, находится на том или ином этапе, готов к сдаче, сдан, провален).
    Важный вывод: тебе потребуется как-то хранить эти автоматы так, чтобы к любому из них можно было удобно обратиться из любого места!
    В третьих, осваиваешь State Pattern. Он может пригодиться для реализации мира. По сути, у тебя разные локации будут разными состояниями, и каждая из них может быть представлена как отдельный объект, реагирующий на действия пользователя. Реакция заключается в дергании других автоматов (например, не пускать, пока не пройден квест, или инициировать квест по входу в локацию) и в выводе текста.
    Ты можешь описывать разные локации как разные классы или как разные объекты одного класса.
    Первый подход проще с точки зрения кода, но гораздо более громоздкий, так как на каждую локацию придётся отдельный класс.
    Второй подход сложнее с точки зрения кода, но классов будет меньше, а локации будут представлены данными.
    Я бы начал с первого подхода, чтобы освоиться.
    В-четвёртых, тебе потребуется хранить состояние игрока (и возможно других мобов). Это простые классы, или даже просто словари (dict). Я бы всё же сделал классы.

    Тогда у тебя в программе будет три основных блока.
    1. Интерфейс - кусок кода, который показывает пользователю текующее состояние игры и принимает его ввод, а потом отдаёт этот ввод текущему состоянию игры.
    2. Хранилище автоматов. В первую очередь это автомат навигации по миру, но также и автоматы квестов. Можешь сделать его просто словарём с ключами-строками - так бдует проще.
    3. Данные игрока. Лучше хранить в отдельном классе, но автоматы должны иметь к нему доступ, так или иначе.
    Ответ написан
    2 комментария
  • Пишет два сообщения вместо одного. Что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Запись вида:

    if xxx == ('a' or 'b' or 'c'):

    свидетельствует о полном незнании языка Python. Соответственно, не зная языка, ничего хорошего написать не получится. Великое счастье, что этот код хотя бы не управляет ядерными боеголовками. Начинать надо с азов.
    Ответ написан
    2 комментария
  • Как интерпретировать JavaScript при запросе requests?

    Vindicar
    @Vindicar
    RTFM!
    Никак. requests не для этого предназначен. Тебе нужен полноценный браузер, и код для управления им.
    Т.е. пакет selenium.

    EDIT: AlexBoss ниже правильно заметил - если сайт не слишком старается отсеивать ботов, то можно попробовать идентифицировать запросы, через которые выполняется подгрузка интересующих частей страницы, и выполнить их самому. Это позволит обойтись силами только requests, но это не всегда легко сделать.
    Ответ написан
    Комментировать
  • Как сделать подключение python программы к серверу?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Примерно сотней разных способов можно.
    Ответ написан
    Комментировать
  • Как сделать неопределённое наследование в python?

    Vindicar
    @Vindicar
    RTFM!
    Вообще сама необходимость в таком коде уже признак серьёзных проблем.
    Но если очень надо... В питоне классы - это объекты первой категории. С ними можно делать всё то же, что и с другими объектами, например, возвращать их из функций. Так что незачем возиться с class_name.
    Ответ написан
    3 комментария
  • Как создать отдельную сессию для каждого аккаунта?

    Классы, вот ваше решение. А ещё лучше почитать учебник, переменные и функции!
    Ответ написан
    2 комментария
  • Как запустить python скрипт на ubuntu чтобы он не отключался?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Systemd конечно оч. хорошо, но и Supervisor прекрасно справляется с такими задачами.

    Я, например, и многие мои собратья по Проксе-Пепсика (на Python3) запускаем её, как раз через Supervisor, что весьма удобно.

    Всё просто.
    Сначала устанавливаете его:
    sudo apt install supervisor

    Теперь - ОБЯЗАТЕЛЬНО! - создаём конфигурационный файл:
    sudo sh -c 'echo_supervisord_conf > /etc/supervisor/supervisord.conf'

    Если этого не сделать, то в папке /etc/supervisor будет лежать очень урезанный и бедный на настройки supervisord.conf файл и многие параметры придётся дописывать руками!

    Судите сами:
    - это урезанный файл после установки Supervisor
    Урезанный supervisord.conf
    ; supervisor config file
    
    [unix_http_server]
    file=/var/run/supervisor.sock   ; (the path to the socket file)
    chmod=0700                       ; sockef file mode (default 0700)
    
    [supervisord]
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
    
    ; the below section must remain in the config file for RPC
    ; (supervisorctl/web interface) to work, additional interfaces may be
    ; added by defining them in separate rpcinterface: sections
    [rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    
    [supervisorctl]
    serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
    
    ; The [include] section can just contain the "files" setting.  This
    ; setting can list multiple files (separated by whitespace or
    ; newlines).  It can also contain wildcards.  The filenames are
    ; interpreted as relative to this file.  Included files *cannot*
    ; include files themselves.
    
    [include]
    files = /etc/supervisor/conf.d/*.conf
    Ответ написан
    8 комментариев
  • Как с помощью schedule запланировать расписание?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    нормас

    сделать можно с пониманием что делаешь
    Ответ написан
    1 комментарий