• Как сделать так чтобы стейт отвечающий за регистрацию не зацикливался?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Во-первых, у вас второй обработчик состояния имеет то же имя, что и первый:
    @bot.on.message(state=SuperStates.CONFIDENT_STATE)  # StateRule(SuperStates.AWKWARD_STATE)
    async def awkward_handler(message: Message):

    Во-вторых, у вас код останавливается на этом состсоянии. Сделайте еще одно и переходите в него, там можете реагировать и на другие команды.
    Ответ написан
    Комментировать
  • Уникальный id запуска Django?

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Берёте любое API с курсами и получаете инфу, в чем проблема конкретно у вас?
    curl https://www.cbr-xml-daily.ru/daily_json.js | jq ".Valute.EUR.Name,.Valute.EUR.Value"
    Ответ написан
    Комментировать
  • Почему метод get не работает в цикле?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы предлагаете нам гадать тут на кофейной гуще?
    Никаких входных данных, по которым можно было бы судить о причине неработоспособности вашего кода вы не предоставили.
    Я могу перечислять возможные причины вечно!
    - может быть в index.html мало или нет данных
    - возможно вы неправильно ищете элементы в html
    - некорректно сформирована ссылка с пагинацией (кстати. почему не пользуетесь параметрами, а лепите в урл?)
    - сайт имеет защиту от скачивания тпым перебором чисел, может быть ему нужен еще какой-то формальный параметр
    - вы не находите куда сохраняется результирующие файлы из-за непонимания что такое текущий каталог
    - вы не дожидаетесь ваших 10 секундных таймаутов
    - вы не в тот каталог смотрите в поисках результатов
    - как-то не так запускаете и не видите ошибок, например с доступом.

    С учетом того, что вы даже сюда скопировали код как-то косо и косо подменили куски строк в коде на плейсхолдеры, может быть что угодно из перечисленного
    Ответ написан
    Комментировать
  • Как сохранить объект с кирилицей в файл формата JSON на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Спорим у вас винда?
    Прочитайте спецификацию функции open. В частности про параметр encoding.
    Когда записываете текст в виде байтов (а в файлах он именно так хранится), то нужно понимать какой кодировкой вы кодируете не ascii-символы.
    Вы явно не указываете кодировку, поэтому выбирается кодировка по умолчанию. Посмотреть что у вас там по умолчанию можно вот этой фунцией sys.getdefaultencoding()
    Именно в такой кодировке нужно открывать ваш файл на чтение, чтобы увидеть там русские буквы.
    В винде у вас скорее всего одна из двух кодировок там может быть. И она разная в зависимости от того в консоли вы запустили свою прогу, или в IDE. А ещё подстава - в винде по умолчанию однобайтовые кодировки, поэтому не все символы можно в них представить!
    С этим в линуксе гораpдо лучше. По умолчани везде utf-8.

    Вот, кстати, можете проверить что получится для понятности:
    > 'íåæèëîãî'.encode('latin1').decode('cp1251')
    'нежилого'
    Ответ написан
    1 комментарий
  • Почему не работает код?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нет. не должен. Читайте что делает ваш код:
    if message.text == "А":  
            # сюда вы попадаете когда приходит сообщение. в тексте которого только "A"
            # Вы отправляете пользователю два текстовых сообщения:
            bot.send_message(message.chat.id, "Вы выбрали Зеленый")
            bot.send_message(message.chat.id, "Введите ставку в таком формате /stavka 123")
            # и тут же берёте строку, пришедшую в сообщении (а это буква "A", если вы забыли)
            # и пытаетесь заменить в этом однобуквенном тексте подстроку, которой там нет и не было:
            stavka = message.text.replace('/stavka', '').strip()
            # потом подвешиваете инерпретатор на 5 секунд:
            time.sleep(5)
            # и выводите букву "А" в терминал:
            print(stavka)

    Всё работает как написано.
    Ответ написан
  • Как поменять global на return в коде? Как сделать, чтобы все сообщения от пользователя из разных функций передавались в последнюю функцию?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Зачем у вас тег JIRA в этом вопросе, если вопрос никакого отношения не имеет к ней?
    Ваша проблема в том, что вы не знаете языка, на котором пытаетесь писать. Вернее даже не писать, а исправлять что-то уже написанное.

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

    Просто правильный ответ на ваш вопрос будет не понят, или придётся объяснять с самых азов, или решать за вас вашу проблему, чему противореит суть данного ресурса.
    Тут готовы помочь, что-то пояснить, ответить на конкретные вопросы, но не делать за кого-то чужую работу и не формировать индивидуальные курсы питона с нуля. С этим надо идти во фриланс.
    Ответ написан
    Комментировать
  • Не могу импортировать значение переменной from py in py?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    в этом модуле нет переменной "text", это локальная переменная внутри функции и в модуле не видна
    Ответ написан
  • В чем минусы событийно ориентированного подхода?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну да, Вы перепутали сообщение и событие. Вызов метода объекта в ООП можно интерпретировать как сообщение этому объекту из конкретного места и контекста в выполняющемся коде.
    Это не то же самое, что события. Нет никакой шины или очереди событий.
    Для событийного программирования существуют Pub\Sub механизмы, в рамках которых есть паблишеры, которые формируют событие в любом месте и контексте кодовой базы, а есть подписчики, которые реагируют на конкретные типы событий, обрабатывают и передают их дальше или терминируют.
    Этот подход иногда полезен, но часто он рубит распыляет логику по куче обработчиков. Такие системы очень сложно отлаживать, трудно тестировать, практически невозможно доказывать корректность программы для любой допустимой входной последовательности событий. Антипаттерн это потому, что после некоторого порога сложности начинает накапливаться много формальных событий и неочевидных состояний системы. Эта мешанина трудно воспринимается и анализируется человеком
    Ответ написан
    7 комментариев
  • Почему Питон скрипт не записывает вывод в .txt файл (сервер c ubuntu 20.04)?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ну и как мы должны гадать что у вас там в этом скрипте? Вы могли накосячить с правами на заись в каталог или накосячить с путями. Без исходников такое не определить.
    Ещёнужно знать какие права на каталог, куда вы пытаетесь писать файл и под каким юзером зпускается скрипт.

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

    То, что вы не видите никаких ошибок в логах, свидетельствует о том, что скрипт написан плохо. То, что владелец скрипта - рут, тоже свидетельствует об отсутствии понимания как работает система прав в линуксе.
    Ответ написан
  • Ошибка 'latin-1' кодек не может обработать символы. Что мне делать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Для более точного ответа нужно болше кода и полный стектрейс.
    Но уже здесь видно, что вы неправильно кодируете строку. Зачем-то еще и приводите байтовый литерал к строке... Мне кажется у вас там не china в случае ошибки.
    Ответ написан
    Комментировать
  • Как в Python перевести string в bytes, не меняя string?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Если вы хотите сохранить в БД бинарные данные. то у вас есть три варианта:
    1) Хранить в БД данные в поле типа binary blob. В таком поле может храниться произвольный набор байтов, он не птается преобраховаться в строку при работе.
    2) Хранить в БД экранированную строку в поле обычного строкового типа. При этом все непечатные и спец-символы должны быть экранированны специальной последовательностью, которая состоит из печатных обычных символов. Тогда нужно перед испольованием полученных из БД данных разэкранировать строку и получить байты.
    3) Можно хранить данные в БД в обычном текстовом или текстовом blob-поле, но в виде закодированно последовательности base16 или base64. В base64 каждые два байта кодируются тремя символами из 64-битного набора печатных символов. Нужно кодировать и декодировать такие строки при сохранении\загрузке.

    Вам больше всего подходит base64. Посмотрите в документации как с этим работать
    Ответ написан
    4 комментария
  • Как округлять числа после деления в Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Самым правильным будет не округлять, я преобразовывать в строку с нужной точностью.
    f'{54 / 11:.1f}'
    Обычно в вычислениях нужно работать с по возможности наиболее точными числами. но выводить в результате округленные числа без лишних знаков.
    Округление с помощью round для этих целей может сделать "сюрприз". Не все дроби можно представить конечным числом знаков в любой системе счисления. Например, в десятичной системе нельзя представить 1/3, а в троичиной легко, как и в девятиричной. В двоичной системе не получится представить 0.2, а в десятичной вот я только что это сделал. В двоичной системе счисления получится периодическая запись.
    В компе числа с плавающей токой представлены в двоичной форме, и да, некоторые десятичные числа с конечным числом знаков после запятой будут в двоичном виде запиываться не точно. потому что потребуется бесконечное число знаков для точной записи.
    В общем, round испольуем только если по алгоритму нам требуется округленное значение в промежуточных вычислениях. Для округления результата с целью показать человеку нужно использовать округление при приведении к строке.
    Ответ написан
    Комментировать
  • Как загрузить картинку в базу данных сайта с python?

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

    А если у вашего сайта уже есть API для загрузки и получения (отображения) изображений, то вам, скорее всего, вообще не придётся работать с БД, достаточно использовать API сайта через скрипт на питоне и изображение загрузится на сайт штатным способом, как это делается со стороны браущера.

    В общем мало подробностей для корректного обстоятельного ответа.
    Ответ написан
    Комментировать
  • Какой использовать GSM модем для приема и чтения SMS сообщений?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Практически любой.
    Полно в сети инструкций
    https://xakep.ru/2015/04/07/195-sms/
    https://habr.com/ru/post/133085/
    Не искали что ли ответа в гугле? ем вам не подошли те ответы. что дает гугл на первой странице?
    Ответ написан
  • Как сделать выносную кнопку включения пк из переключателя от механической клавиатуры?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вообще я механический свитч от клавиатуры в руках никогда не держал, но на всех картинках в инете они нормально-размокнутыми показаны. Вот, например: https://habr.com/ru/post/140454/
    Это значит что кнпку включения можно напрямую заменить. Почему нет?
    Но если надо именно инвертировать сигнал, то можно воспользоваться транзистором и резистором. .Можно взять полевой транзистор любой почти и притянуть ему базу к нулю через кнопку. И через резистор в несколько килоом к пдюсу постоянного питания. А цепь сток-исток включить вместо штатной кнопки (только полярность не перепутать).
    Тогда размыкание притяжки к нулю приведет к открытию транзистора и включению компа.
    Ответ написан
    Комментировать
  • Почему пустой кортеж весит больше, чем кортеж с одним числом?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    b - это не кортеж. Это просто единичка (int)
    Вот так правильно:
    a = ()
    b = (1,)
    Ответ написан
    Комментировать
  • Что дешевле: переменные или массив?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Для вашего случая нет разницы. Нужно руководстоваться не соображениями производительности, а соображенями понятности кода. Если код легко воспринимать и легко модифицировать под изменения задачи в ближайшем прогнозируемом будущем, то это правильно написанный код.
    Судя по ашему вопросу, опыта у вас не так много.
    Вопросы прихводительности в таких вещах придут позже. Сейчас сконцентрируйтесь на алгоритмах, и побльше практики. Найдите ментора и отдавайте ему код на ревью. Читайте чужой код других проектов, чтобы набраться опыта и начитанности.
    Ответ написан
    Комментировать
  • Можно ли через ffmpeg создавать простую кинетическую типографику или движущийся текст?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    FFmpeg позволит вам соединить отдельные кадры в видеоролик и свести этот ролик со звуковой дорожкой, но не более.
    Сами кадры стекстом придётся чем-то рисовать. Причем не только сам текст печатать, но и покадрово раскладывать анимацию.
    Если в приведенном вами примере была "простая уинетическая анимация", то для ее отрисовки готовых стандартных утилит скорее всего нет никаких. Придётся делать модель и рендерить ее.
    В принципе, задача не сложная. В том примере. что вы привели есть две четко выраженные фазы:
    1) добавление слова
    2) анимация масштабирования всего холста так, чтобы добавленное слово заполнило по ширине основную часть экрана.

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Воспринимайте tail и head не в глобальном контексте, а локально. Это всего лишьпеременные с таким именем. Вкаждом конкретном случае и на каждой итерации они могут означать разные места связного списка.

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

    Что конкрено не понятно?

    Вот поэкспериментируйте сами:
    class ListNode:
        def __init__(self, val, next=None):
            self.val = val
            self.next = next
    
        def __str__(self):
            tail = self.next and f', {self.next}' or ''
            return f'{self.val!r}{tail}'
    
        def __next__(self):
            if self.next:
                return self.next
            raise StopIteration
    
        def __iter__(self):
            item = self
            while item:
                yield item.val
                item = item.next
    
        def copy(self):
            return ListNode(self.val, self.next and self.next.copy())
        
        __repr__ = __str__
    
    
     ln=ListNode; l=ln(1, ln(1, ln(2, ln(3, ln(3)))))
    Ответ написан
    Комментировать