• Как округлить число в этом коде?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    В двух местах Вы пытаетесь вызвать float как функцию, передавая туда аргумент:
    VIGOD(str)
    NEVIGOD(str)

    Просто не делайте так.
    Ответ написан
    Комментировать
  • Как установить python 3.8 на другой диск?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Может быть как-то так:
    • Установить на флешку;
    • Проверить и, при необходимости, изменить пути в реестре Windows, чтобы python и pip искались на диске H.


    UPDATE
    Кажется Вадим Шаталов прав, в Windows 10 путь редактируется в переменных среды. Тут же нагуглил инструкцию про пути к Python в Windows 10: https://datatofish.com/add-python-to-windows-path/
    Ответ написан
    5 комментариев
  • Ошибка Class builtinsdict is not mapped, в чем проблема?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    • На Тостере, исходный код рекомендуется добавлять в вопрос текстом;
    • У Вас там только модель Films с полями id и Name;
    • Чтобы сохранять что-то через SQLAlchemy (а равно, и через Django ORM, и через Peewee, и через PonyORM), Вы должны описать модель данных (обычно соответствует таблице в базе данных);
    • Модели вроде Cources у Вас в коде нет.

    Так что да, можно сказать, что проблема в "конфигурации таблицы", так как ничего похожего на курс валют вообще не описано. SQLAlchemy не понимает, что за кортежи, куда и как надо сохранять.
    • Опишите нужную модель или модели данных, в которых будут нужные Вам поля соответствующих типов (которые поддерживает СУБД);
    • Сделайте миграцию с помощью Alembic (если сложно, руками подправьте БД или просто пересоздайте БД);
    • После этого, пробуйте делать с данными то, что Вам нужно, вызывая методы сессии с указанием модели или объекта модели в качестве аргумента.

    В общем, Вам в документацию SQLAlchemy.
    Ответ написан
    Комментировать
  • Как организовать мониторинг web приложения?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Берёте систему мониторинга Zabbix (или аналоги) и используете её функционал. Если чего-то не хватает, системы мониторинга обычно расширяемы.

    Ну или пишите свой велосипед.

    Собственно, что нужно настроить или реализовать:
    • Периодический ping сервера с приложением;
    • Периодические HTTP запросы в приложение с ожиданием HTTP кода 200;
    • Для проверки websocket использовать websocket клиент;
    • Логирование процессов приложения;
    • Мониторинг логов приложений на предмет ошибок;
    • Уведомления (EMail, Telegam, SMS), если что-то пошло не так.

    Если написаны простейшие тесты и настроено логирование, то мониторинг на половину готов.
    Ответ написан
    Комментировать
  • Как набить руку на Python разработку и сисадминистрирование за 2 месяца?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Веб-разработка и администрирование сетевых ресурсов более востребованы, поэтому я бы рекомендовал изучить следующее:
    • основы и стандартная библиотека Python -- навык лучше прокачивается написанием скриптов и программ для решения неучебных задач. И если основной навык миддла -- это гуглить (полу)готовые решения, то основной навык джуна -- уметь писать свои "велосипеды". Разработчик, который по-максимуму использует и полагается на готовое -- столь же неэффективен, как и предпочитающий использовать готовое по-минимуму;
    • веб-фреймворк Django -- пилите небольшой проект, получаете общие представления о веб-разработке и практику ООП, но о Python этот веб-фреймворк расскажет мало, делает слишком много работы за программиста, а в его исходном коде можно заплутать, так и не поняв как он работает;
    • система контроля версий Git -- обязательно для разработчика и желательно для сисадмина;
    • wsgi-сервер uWSGI (или Gunicorn) -- см. ниже;
    • http-сервер Nginx -- см. ниже;
    • GNU/Linux -- пробуете развернуть проект с использованием предыдущих двух пунктов;
    • веб-фреймворк Flask -- просто пощупайте или сделайте ещё один небольшой веб-проект, по исходникам этого веб-фреймворка проще понять как работают другие веб-фреймворки и как писать поддерживаемый код, к тому же на Flask часто пилят всякие API / бэкенды;

    Настольные приложения и мобильная разработка на Python кажется менее развита и менее востребована, но когда-нибудь можете пощупать:
    • Python GTK+ 3 (или PySide2) -- Python обёртки над GUI инструментариями для разработки настольных приложений;
    • Kivy -- фреймворк преимущественно для мобильной разработки.

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

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Варианты решения:
    1. Через цикл. Объявляете новый пустой список, итерируетесь по старому списку со строками через цикл for, в теле цикла переводите строки в числа с помощью встроенного класса int и добавляете в новый список, ну и присваиваете a новый список. Всего четыре строчки.
    2. Через генератор списков (англ. list comprehensions). Аналогично, но без объявления нового списка. Всё в одну строчку.
    Ответ написан
    1 комментарий
  • Как проверить, есть ли уже такая запись в БД?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Для ответа на оба вопроса, см. в документации Django следующие разделы:

    По первой ссылке можно найти как проверять наличие записи в БД. Но это думаю Вам сейчас не нужно.

    По второй ссылке можно найти как сделать кастомное представление (view) для авторизации пользователя и проверять авторизован ли пользователь в других представлениях.

    Google Translate и/или Яндекс.Переводчик в помощь.
    Ответ написан
    2 комментария
  • Как установить pygame_sdl2 для python3, если в системе несколько версий python?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Для начала, попробуйте следовать официальной документации:
    Ubuntu:
    sudo apt-get install build-essential python-dev libsdl2-dev \
        libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev \
        libjpeg-dev libpng12-dev virtualenvwrapper

    Open a new shell to ensure virtualenvwrapper is running, then run:
    mkvirtualenv pygame_sdl2
    pip install cython

    Change into a clone of this project, and run the following command to modify the virtualenv so pygame_sdl2 header files can be installed in it:
    python fix_virtualenv.py
    Finally, build and install pygame_sdl2 by running:
    python setup.py install

    Если библиотека не будет доступна для импорта в Python3, попробуйте заменить в выше процитированной инструкции вызовы python на python3 и pip на pip3. И попробуйте ещё раз.

    Так же есть подозрение, что в инструкции не хватает:
    git clone https://github.com/renpy/pygame_sdl2
    Ответ написан
  • Как в цикле выводить сообщение один раз?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    def recv():
        last_id = 0
        while True:
            file = vk.messages.getHistory(user_id=93084902, rev=0, count=1)
            for i in file['items']:
                if i['id'] > last_id:
                    last_date = i['id']
                    print(i['text'])
    
    
    variable = Thread(target=recv, args=())
    variable.start()


    Update. Заменил i['date'] на i['id']. Если сообщения пишут очень часто, так правильнее и надёжнее. Мне показалось, что id сообщений имеют случайный характер, но edward_freedom ткнул меня носом в мою невнимательность))
    Ответ написан
    3 комментария
  • Почему не устанавливается vk_api (Python 3.4.0)?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Желательно приводить в вопросе полный трэйсбэк ошибки.

    Скорее всего, проблема в версии пакета vk_api или в версиях его зависимостей (beautifulsoup4, requests, websocket-client, six), чьи разработчики могли отказаться от поддержки Python 3.4.

    Попробуйте скачать vk_api архивом с GitHub, распаковать, явно указать совместимые с Python 3.4 версии зависимостей в requirements.txt и установить пакет вручную python setup.py install.

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

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Лучше использовать регулярные выражения, см. модуль re стандартной библиотеки.

    Но если сложно, можете использовать такую функцию:
    def check_password_for_chars(password, chars):
        for char in chars:
            if char in password:
                return True
        return False

    Ну и для каждой проверки вызываете её 4 раза, указывая в качестве chars свои наборы символов.

    Если потребуется проверять, что в пароле больше 1 символа из chars. Убираете return True из тела цикла. Добавляете в функцию третий аргумент, скажем min_count (минимальный счёт), и перед циклом добавляете локальную переменную, скажем count (счёт), со значением 0. Тогда в теле цикла, при каждом обнаружении искомого символа в пароле, Вы увеличиваете count на 1. И в конце проверяете, что count больше или равно min_count, чтобы вернуть True или False.

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

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Это не извращение. Батарейки с WYSIWYG редакторами для того же Django так и работают (django-ckeditor, django-tinymce, django-summernote и пр.).

    Аналогичные расширения для Flask должны работать примерно так же (см. flask-ckeditor). Разница в том, что Flask гибкий и его могут готовить с разными ORM и СУБД, а потому разработчики расширений часто это учитывают.

    Но в общем виде, вывод HTML из СУБД в шаблон так и выглядит:
    • во вьюхе запрашиваешь из СУБД портянку с HTML,
    • добавляешь её в словарь контекста с каким-нибудь ключом,
    • выводишь переменную в шаблоне с фильтром | safe.
    Ответ написан
    1 комментарий
  • На чем писать gui-программы для debian?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Python часто называют "лучшим вторым языком для большинства задач". Написание графических приложений -- не исключение. Особенно, если нет задачи защитить исходный код приложения от изучения посторонними.

    Библиотек для создания графических приложений много.

    Из того, что более-менее на слуху:
    • GTK+ 3
      • Python GTK+ 3 (зависит от PyGObject) -- рекомендую. Во-первых, тулкит Gtk проще в освоении, чем монструозный Qt. Во-вторых, есть приличная по объёму официальная документация для Python (хотя и не полная). Приложений с большим количеством окон и виджетов пока не писал.

    • Qt5
      • PyQt5 -- несколько лет назад пробовал PyQt4 и PyQt5. Для написания чего-то сложнее "Hello world!" надо курить много документации к оригинальному Qt, а изложено там всё в контексте языка C++. Например, пару дней пытался разобраться как обойтись без Qt-шных классов для работы с СУБД (чтобы не извращаться с голым SQL) и подружить Qt-шные виджеты для таблиц с SQLAlchemy -- в итоге понял, что Qt не для меня.
      • PySide2 -- не пробовал. Лучше PyQt5 по части лицензий (есть под LGPL, что позволяет бесплатное использование и в проприентарных проектах) и, если не ошибаюсь, PySide2 лучше дружит с питоновскими типами. В остальном, тот же Qt5.

    • wxWidgets
      • wxPython -- не пробовал. Говорят проще PySide2 / PyQt5. Однако, тулкит не дотягивает по популярности до GTK+ 3, так что вероятно и инфы по нему меньше. Как я понял, стабильной версии под Python3 до сих пор нет, находится в разработке под названием Phoenix.

    • Tk
      • Tkinter -- пробовал. Собственно исходный тулкит Tk кажется морально устаревшим. Добиться более-менее приличного оформления приложений затруднительно. Для реализации сложных вещей надо писать заметно больше кода, чем в вышеупомянутых тулкитах.

    • Kivy -- фреймворк больше ориентирован на разработку мобильных приложений под Android и iOS, но можно писать приложения и под Linux системы.

    Так же, в некоторых случаях, есть смысл смотреть в сторону веб-фреймворков (Django, Flask и др.). Веб-приложение может и локально запускаться на конкретной машине, взаимодействуя с операционной системой и другими веб-приложениями в сети организации.
    Ответ написан
    7 комментариев
  • Создание форума?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    По вопросу приватной альтернативы соцсетям корпораций, поищите в поиске по ключевым словам "федеративные социальные сети", "децентрализованные социальные сети", "distributed social network" и "fediverse".

    По вопросу анонимности пользователя в сети Интернет, поищите по ключевым словам "анонимные сети" и "оверлейные сети".

    Википедия, Хабр и другие ресурсы Вам в помощь.
    Ответ написан
    Комментировать
  • Какие модули Python лучше всего использовать для получения системной информации об устройстве и ОС?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Вопрос легко гуглиться.

    Для ОЗУ, ЦПУ и пр. железа упоминают библиотеку psutil:
    https://pypi.org/project/psutil/

    Для остального, см. модули os и sys стандартной библиотеки.
    Ответ написан
    2 комментария
  • Списковые включения, как использовать elif?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Ни в списках, ни в генераторах списков нельзя использовать elif.
    Ответ написан
    1 комментарий
  • Почему False аналогично 0?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Особенность реализации, булев тип (bool) наследуется от целочисленного (int).

    Если требуется отличать False от 0 и True от 1 -- используйте оператор is вместо !=.

    Операторы == и != проверяют равенство значений двух объектов. Но из-за особенностей реализации, у False и 0 -- одно и тоже значение, а у True и 1 -- одно и тоже другое значение.

    Оператор is проверяет равенство id двух объектов. Булевы объекты True и False -- это синглтоны, т.е. существуют в программе не более, чем в 1 экземпляре. Поэтому, у всех True -- один и тот же id, а у всех Fasle -- один и тот же другой id.
    Ответ написан
    3 комментария