• Нужно ли явно инициализировать все поля экземпляра класса в конструкторе?

    Vindicar
    @Vindicar
    RTFM!
    Тут пригодится принцип наименьшего удивления.
    Ситуация, когда набор атрибутов у объекта различается в зависимости от вызванных до
    этого методов - более удивительна, чем ситуация, когда набор атрибутов один и тот же, просто часть из них имеет значения по умолчанию.
    Ответ написан
    Комментировать
  • Почему возникает ошибка при вызове delattr?

    Vindicar
    @Vindicar
    RTFM!
    Потому в твоем коде q - это атрибут SomeClass, а не его экземпляров.
    В первом случае ты создал атрибут q у экземпляра a, а потом прочитал и удалил.
    Во втором случае ты попытался прочитать атрибут q на экземпляре, но его там нет. Поэтому язык начал искать атрибут в самом классе и нашел. А потом ты попытался удалить атрибут на экземпляре. Но его там нет.
    Ответ написан
    2 комментария
  • Как правильно итерировать?

    Vindicar
    @Vindicar
    RTFM!
    Зачем обращаться к элементу списка по индексу, если простое итерирование через for позволяет получить элемент списка непосредственно?
    mylist = ['foo', 'bar', 'baz']
    for item in mylist:
        print(item)
    Ответ написан
    3 комментария
  • Как достать отдельно каждое слово из строки?

    Vindicar
    @Vindicar
    RTFM!
    Покажи, как пытался - потому что тут именно split(). Причем буквально один вызов.

    Окей, гугл, python split example
    Ответ написан
  • Minecraft. Как писать сообщение от имени игрока в python?

    Vindicar
    @Vindicar
    RTFM!
    Вообще, по-хорошему - никак. Сервер пишет сообщения в чат, и они пишутся от имени сервера.
    Разве что сервер моддить.
    Ответ написан
    Комментировать
  • Как в jinja вывести изображения из бд, если они сохранены в бд в двоичной коде?

    Vindicar
    @Vindicar
    RTFM!
    Может, сделать отдельный роут, который отдаёт картинку из базы, и при итерации вставлять img со ссылкой на этот роут?
    Вообще хранение самих изображений в базе - спорная идея.
    Ответ написан
    1 комментарий
  • Как работает модель text-to-speech?

    Vindicar
    @Vindicar
    RTFM!
    Ну вообще правильный ответ был бы "ознакомься с источниками вроде этого", так как в рамках ответа исчерпывающее описание дать не получится. В тексте расставлены ссылки на другие статьи, есть куда покопаться.
    К слову, реализации этого подхода тоже есть.

    Но если коротко, обычно используется seq2seq model, т.е. нейронная сеть, которая обучается сопоставлять последовательности входных и выходных сигналов. Фокус в том, что входным сигналом часто является не символ, а n-грамма - последовательность из n символов. При этом синтезируется не сразу waveform, а сначала частотная диаграмма - кадр за кадром, почти как в формате mp3.

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

    После этого на базе частотной диаграммы синтезируется уже waveform, т.е. сигнал, который можно подавать на звуковую карту (примерный эквивалент формата .wav).

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

    Vindicar
    @Vindicar
    RTFM!
    Не вижу, где в приведенном коде генерируется randomInt.
    Подозреваю, что ты генерируешь его один раз в начале файла, и более не обновляешь.
    Как следствие, для разных ссылок это число оказывается одним и тем же. А значит, и имя файла будет одним и тем же.
    random_number.png

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

    Vindicar
    @Vindicar
    RTFM!
    Гугл python to exe не помог? Или не пробовал?
    Есть Pyinstaller - это утилита командной строки.
    Есть auto-py-to-exe - GUI для неё.

    Вообще нужно иметь ввиду, что питон - это НЕ компилируемый язык. Твой exeшник будет самораспаковывающимся архивом, несущим в себе интерпретатор питона и все библиотеки, которые ты подключил. Это будет как минимум громоздко.
    Ответ написан
    3 комментария
  • Проблема с кодом на Python ошибка после компиляции в Exe для windows 10?

    Vindicar
    @Vindicar
    RTFM!
    # определяем функцию, которая загружает расписание из файла
    def load_schedule():
        try:
            ...  # реальная ошибку у тебя где-то здесь!
        except FileNotFoundError:  # но при ошибке ты глотаешь исключение и молча возвращаешь None
            return None, None
    
    def check_schedule2():
        start_time, end_time = load_schedule()
        ...  # а тут не проверяем, вернула ли функция значение или None

    Выстрел в ногу удался, что тут скажешь. Сначала скрыл истинную причину ошибки за молчаливым return None, потом не стал проверять, что вернулось, а теперь столкнулся с этим None ниже по коду и пытаешься понять, что произошло.

    А еще да, сравнение строк производится лексикографически (посимвольно). Т.е. строка "2" будет больше чем "12". Конкретно в твоём случае это сработает, так как у тебя будет "02", а не "2" для двух часов, но так делать всё равно неправильно. Я бы рекомендовал почитать про класс datetime.datetime (модуль datetime), его экземпляры можно сравнивать напрямую.
    Ответ написан
    Комментировать
  • Почему не работает код?

    Vindicar
    @Vindicar
    RTFM!
    if time <= time_15:

    По логике должно быть if time > time_15:
    Ответ написан
    Комментировать
  • Как скачать видео с ВК с помощью пайтон?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри в сторону youtube-dl. Она поддерживает не только YT, но и другие сайты, в том числе ВК. Плюс её можно использовать и как отдельную утилиту, и импортировать её в свой скрипт.
    Ответ написан
  • Как получить и форматировать цену с копейками на python?

    Vindicar
    @Vindicar
    RTFM!
    Ну можно сделать регулярку. Но вообще тебе правильно подсказывают: сделай валидацию ввода! Всё равно юзеров не перехитришь, с них станется прописью ввести.
    import re
    from decimal import Decimal  # не используй float для денег!
    
    sum_regexp = re.compile(r'^((?:\D*\d+)+?)(?:\D+(\d{2}))?\D*$')
    
    def string_to_sum(s: str) -> Decimal:
        match = sum_regexp.match(s)
        if match is None:
            raise ValueError(f'Not a correct sum: {s!r}')
        integer_part = re.sub(r'\D', '', match.group(1))
        fraction = match.group(2) or '00'
        fixed_string = f'{integer_part}.{fraction}'
        return Decimal(fixed_string)
    
    
    tests = {
        '0': Decimal('0.0'),
        '1000': Decimal('1000.0'),
        '10.00': Decimal('10.0'),
        '10,00': Decimal('10.0'),
        '1 000': Decimal('1000.0'),
        '1,000,000.00': Decimal('1_000_000.00'),
        '1000 рублей 90 копеек': Decimal('1000.90'),
    }
    
    for inp, res in tests.items():
        print(inp, end=': ')
        try:
            actual_res = string_to_sum(inp)
        except ValueError as err:
            print('Exception: ', err)
        else:
            if res != actual_res:
                print('Mismatch, got', actual_res)
            else:
                print('OK')
    Ответ написан
    Комментировать
  • С какой библиотекой можно обработать в сообщение в определенном месте в телеграмме?

    Vindicar
    @Vindicar
    RTFM!
    На stackoverflow есть пример для aiogram, легко гуглится.
    import logging
    from aiogram import Bot, Dispatcher, executor, types, utils
    
    API_TOKEN = 'replace_this_with_your_api_token'
    
    # Configure logging
    logging.basicConfig(level=logging.INFO)
    
    # Initialize bot and dispatcher
    bot = Bot(token=API_TOKEN, parse_mode="html")
    dp = Dispatcher(bot)
    
    def get_keyboard():
        keyboard = types.ReplyKeyboardMarkup()
        button = types.KeyboardButton("Share Position", request_location=True)
        keyboard.add(button)
        return keyboard
    
    @dp.message_handler(content_types=['location'])
    async def handle_location(message: types.Message):
        lat = message.location.latitude
        lon = message.location.longitude
        reply = "latitude:  {}\nlongitude: {}".format(lat, lon)
        await message.answer(reply, reply_markup=types.ReplyKeyboardRemove())
    
    @dp.message_handler(commands=['locate_me'])
    async def cmd_locate_me(message: types.Message):
        reply = "Click on the the button below to share your location"
        await message.answer(reply, reply_markup=get_keyboard())
    
    if __name__ == '__main__':
        executor.start_polling(dp, skip_updates=True)
    Ответ написан
  • Как получить id bios в python?

    Vindicar
    @Vindicar
    RTFM!
    Такого значения нет. Имей ввиду, что:
    - любая привязка к железу обламывает тех, кто сделает апгрейд
    - многие железные идентификаторы поддаются изменению
    - программу на питоне тривиально отредактировать, чтобы оторвать нафиг эту проверку

    Если тебе нужна защита от копирования, посмотри в сторону pyarmor. Но имей ввиду, pyarmor тоже отрывается при желании.
    Ответ написан
  • Как отобразить работу скрипта Python запущенного через systemctl?

    Vindicar
    @Vindicar
    RTFM!
    ОП, ты хочешь странного. Осознай, что демоны (а systemd управляет как раз программами типа daemon) по определению не предназначены для взаимодействия непосредственно с пользователем, в частности через терминал. А значит, у тебя два выхода:

    1. Перестать хотеть странного, и реализовать нормальные логи и анализировать их. Тогда можно будет в любой момент посмотреть историю, выведенную в лог.
    При необходимости отслеживать файл лога в реальном времени можно использовать команду tail -f файл.log. Почитай про неё.
    Также можно натравить на лог какую-нибудь утилиту мониторинга, которая будет его читать и посылать тебе оповещения о событиях по другому каналу.
    Если лог большой, есть logrotate.
    Минус - специфические терминальные фишки в логе работать не будут. Скажем, прогрессбар там не сделаешь, и ввести текст не получится.

    2. Отказаться от запуска программы как классического демона, и запускать её через утилиту screen. Тогда ты сможешь сконнектиться к сессии screen когда угодно.
    Плюс - взаимодействие с терминалом как обычно. В том числе из разных ssh сессий.
    Минус - screen не самая удобная штука, сочетания клавиш там мозголомные. Плюс всё равно запуск screen придётся заворачивать в systemd если тебе нужен автозапуск и автоперезапуск.
    Ответ написан
    4 комментария
  • Почему не работает код?

    Vindicar
    @Vindicar
    RTFM!
    В твоём коде показано, как определить класс объекта. Смотри, как формируется prediction_text.
    А дальше просто. Храни в глобальной переменной время, когда был сохранён последний снимок объекта с желаемым классом.
    Если у тебя на текущем кадре есть объект с желаемым классом, проверь текущее время. Если прошло 30 секунд с последнего сохранения - сохрани новый снимок, и обнови время последнего сохранения на текущее.
    Ответ написан
    Комментировать
  • Как сменить директорию (Ubuntu) на хостинге beget?

    Vindicar
    @Vindicar
    RTFM!
    Ты используешь относительный путь, т.е. путь относительно текущего рабочего каталога.
    Ты уверен, что каталог существует, и существует именно там где ты ищешь?
    Например, если ты находишься в каталоге /home/root, и делаешь cd ../folder/folder2, ты будешь пытаться перейти в каталог /home/folder/folder2.
    Ответ написан
    1 комментарий
  • Как разобрать mp3 файл?

    Vindicar
    @Vindicar
    RTFM!
    mp3 вряд ли выйдет. Там слишком много частот.
    Попробуй сначала midi.
    Ответ написан
    Комментировать