Задать вопрос
Ответы пользователя по тегу Python
  • Конвертировать str to dict?

    Vindicar
    @Vindicar
    RTFM!
    Если используешь requests, то получфаешь данные по HTTP. А значит там не питоновский словарь, там JSON. Они похожи, но не одно и то же!
    Используй модуль json.
    Ответ написан
    Комментировать
  • Вывод всех введённых чисел, кроме 0, но ввод можно продолжить и после 0. Не понимаю: как решить?

    Vindicar
    @Vindicar
    RTFM!
    Вместо input() читай из sys.stdin как из текстового файла?
    import sys
    for line in sys.stdin:
      ... #обрабатываешь введённую строку

    В винде можно в консоли нажать ctrl-z, Enter, это будет сигнал "конец стандартного ввода". Это будет как-бы конец файла, и цикл for прервётся.

    Соответственно, просто делаешь логический флаг "был введён 0" (по умолчанию сброшен), и пока он сброшен - повторяешь введённые числа. Когда он выставлен - не повторяешь. Если пользователь ввёл 0 - выставляешь этот флаг.
    Ответ написан
    Комментировать
  • Как отправить изображение используя socket?

    Vindicar
    @Vindicar
    RTFM!
    Ну для начала, выучи разницу между TCP (SOCK_STREAM) и UDP (SOCK_DGRAM).
    В последнем случае у тебя НЕ ГАРАНТИРУЕТСЯ ни факт доставки сообщений, ни их правильный порядок, да и на размер сообщения есть ограничения. Также сервер без понятия, когда клиент закончил отправку сообщений.

    Так что лучше разберись, как установить (и корректно закрыть!) TCP соединение и перепиши скрипт на него.
    Ответ написан
  • Можно ли проконтролировать наступление времени?

    Vindicar
    @Vindicar
    RTFM!
    Правильным решением было бы использование планировщика ОС (cron в Linux, планировщих задач в Windows).
    Но если очень надо решение на чистом Питоне, пакет schedule в помощь. Только он требует вечный цикл для работы, так что твой скрипт будет висеть в памяти и жрать проц понемногу. Вот почему советую обойтись средствами ОС.
    Ответ написан
    Комментировать
  • Как экранировать элемент в командной строке (модуль argpars)?

    Vindicar
    @Vindicar
    RTFM!
    Может, проще будет так?
    example.py -genres Romantic -genres Drama

    argparse такое умеет.
    Ответ написан
    Комментировать
  • Можете мне словесно объяснить строку кода python?

    Vindicar
    @Vindicar
    RTFM!
    x = [
        "".join( #6
            [
                "".join( #3
                    [
                        "01"[(i + j) % 2] * k #1
                        for i in range(n) #2
                    ]
                ) + "\n" #4
            ] * k #5
        ) 
        for j in range(n) #7
    ]

    1. Если i + j четное, то генерируем строку из k нулей, иначе из k единиц
    2. Генерируем список из n таких строк, с индексом i
    3. Склеиваем полученные строки без разделителя
    4. В конец приклеиваем перевод строки.
    5. Делаем список из k повторов строки, сгенерированной в ходе 4.
    6. Склеиваем эти повторы без разделителя
    7. Генерируем строки по пп. 1-6 n раз с индексом j и формируем из них список.
    Ответ написан
    Комментировать
  • Как правильно обучить модель нейронной сети?

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

    Для случайных чисел можно разве что попытаться определить распределение для каждой позиции.
    Для временных серий можно попробовать LSTM.
    Ответ написан
    Комментировать
  • Проблема с прокси в python, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    ses.proxies = prx
    Множественное число - "proxies"... Может, ему нужен список прокси, и он будет искать первый рабочий?

    EDIT: нет, ему нужен словарь прокси для разных протоколов.
    Ответ написан
    3 комментария
  • Что в коде не так?

    Vindicar
    @Vindicar
    RTFM!
    k = list(input())
    input() вернёт строку.
    конструирование list() на базе строки разобьёт её на одиночные символы.
    Ты что пытаешься сделать? .split()?
    Ответ написан
    1 комментарий
  • Может ли телеграм бот читать exel файл который я ему отправил?

    Vindicar
    @Vindicar
    RTFM!
    Да, можно, если речь идет о Excel (а не exel).
    Зависит от формата файла. Новый .xlsx читается довольно легко, есть библиотеки для этого,но можно и средствами стандартной библиотеки Python - это просто zip-архив с пачкой xml-файлов внутри. Выковырять данные будет не очень трудно.

    А вот старый .xls - это бинарный, плохо документированный формат. С ним будут проблемы.
    Ответ написан
    Комментировать
  • Как написать функцию чистки пользователей, которые заблокировали бота в Телеграм?

    Vindicar
    @Vindicar
    RTFM!
    Перенеси try-except внутрь цикла for, чтобы внутри try-except был только вызов bot.send_message(), и все дела.
    И зачем ты еще раз коннектишься к базе данных внутри except, у тебя ведь уже есть подключение?
    Ответ написан
    Комментировать
  • Во время произношения ассистент говорит "текст"None, как можно исправить?

    Vindicar
    @Vindicar
    RTFM!
    Что за ерунда у тебя в коде творится? Поучи азы Питона сначала, потом уже бросайся помощников писать...

    say_message("Здравствуйте, хозяин!" and "Рад снова вас видеть!")
    Как по твоему, что вот этот and должен значить? На самом деле, у тебя ВСЕГДА будет произноситься только второе выражение. and - это логический оператор в первую очередь. Его поведение для не-логических значений весьма специфическое.

    say_message("Как пожелаете"+str(right_mouse_control()))
    Оставляя за кадром вопрос "зачем", что возвращает функция right_mouse_control()? Она должна возвращать какой-то текст для произношения? Если должна, она явно этого не делает. Если не должна, то зачем ты засовываешь её возвращаемое значение в строку? Почему просто её не вызвать, вне рамок say_message()?
    То же самое для остальных вариантов ниже.

    Ну и простыня elif как вишенка на торте, да.

    EDIT: покажу, как можно это улучшить. Код сложный, но зато легко расширяется.
    Сделаем класс, который будет рулить списком известных команд и сопоставленными им фразами.
    Чтобы не пришлось повторяться, сделаем так, чтобы для добавления новой команды достаточно было
    написать функцию и задекорировать её. Пример будет ниже.
    class VoiceCommandList: #класс управляет списком голосовых команд
      def __init__(self):
        self.actions = list() #список известных классу команд
      
      def on(self, condition): #декоратор, подписывает функцию на голосовую команду
        if isinstance(condition, str):
          condition = condition.lower()
          predicate = lambda text: condition in text #если условие - строка, она должна входить в текст
        elif callable(condition):
          predicate = condition #если условие - функция, она должна вернуть истину для текста
        else: #ни то ни другое - ошибка
          raise TypeError('Condition must be either string or function!')
        #эта функция - декоратор, она будет помечать функции-команды.
        #она описана именно внутри метода on()!
        def decorator(command_func):
          self.actions.append( (predicate, command_func) )
          return command_func
        return decorator
      
      def run_command(self, text): #функция получает строку, определяет и вызывает соотв. её команду
        text = text.lower()
        for predicate, command in self.actions:
          if predicate(text): #текст соответствует известной команде
            try:
              response = command(text) #пытаемся выполнить команду
              if response is None: #если команда не сообщила нам, что ответить
                response = "Команда выполнена" 
            except Exception as err: #не получилось
              response = "Ошибка при выполнении команды"
              print(err)
            if response: #если есть какой-то ответ
              say_message(response) #то произносим его
            break #выполняем не более одной команды за раз
        else: #этот else относится к for, не к if! Если не нашли ни одной похожей команды
          say_message("Неизвестная команда")

    А теперь примеры использования класса. Мы можем добавлять команды, описав функции. Нет нужды править длинную простыню if-elif-else
    vcl = VoiceCommandList() #экземпляр списка команд
    
    #опишем реакцию на простую строку типа "привет".
    @vcl.on('привет') #если передаём в декоратор строку - это означает, что строка должна содержаться в тексте
    def hello(text): #функция-команда принимает аргумент - сказанный пользователем текст
      return "Доброе время суток" #она должна вернуть текст, который скажет бот
    
    @vcl.on('открой оперу')
    def start_opera(text):
      operaopen() #выполняем действие
      return "Браузер запущен" #возвращаем текст ответа
    
    @vcl.on('напиши')
    def write_message(text):
      print(text)
      #если ничего не вернём, будет отклик по умолчанию
    
    @vcl.on(lambda text: ('влево' in text) and ('вправо' in text)) #можно делать сложные условия!
    def what(text):
      return "Так влево или вправо?"

    Ну а чтобы скормить боту распознанную строку:
    vcl.run_command('привет') #сюда можно подставить выхлоп распознавателя речи
    Ответ написан
    8 комментариев
  • Как реализовать запись данных пользователя в телеграм-боте на Python?

    Vindicar
    @Vindicar
    RTFM!
    Если тебе нужно реализовать сценарий, в рамках которого пользователь отправляет несколько сообщений, разбирайся с register_next_step_handler()
    Ответ написан
    Комментировать
  • Где учится созданию ботов на python?

    Vindicar
    @Vindicar
    RTFM!
    Чтобы писать ботов, в большинстве случаев достаточно знать
    1. основы языка
    2. как ставить пакеты через pip
    Также необязательно, но весьма вероятно:
    3. что такое асинхронные программы и как они работают (для ботов, которые выполняют длительные операции)
    4. основы работы с БД (для ботов, которым требуется персистентное хранилище)
    5. что такое конечный автомат и как он работает (для ботов, которые реализуют сценарий из нескоьких шагов)

    А дальше ищешь библиотеки под нужный тебе месенджер, ищешь их документацию, смотришь Quickstart, выбираешь ту, которая выглядит удобнее. Затем постепенно наращиваешь функциональность от своего quickstart-примера - определяешь нужные события/действия, ищешь как на них подписаться или какие методы им соответствуют.
    Ответ написан
    Комментировать
  • Работа с telebot. Как исправить?

    Vindicar
    @Vindicar
    RTFM!
    > color_user = message.text.lower()
    message к чему относится, по твоему?
    Оно относится к сообщению, в котором пришла команда.
    Если тебе нужно реализовать сценарий, в рамках которого пользователь отправляет несколько сообщений, разбирайся с register_next_step_handler()
    Ответ написан
    1 комментарий
  • Какой подход для фильтрации таблиц лучше?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты для каждого фильма проходишь всю таблицу рейтингов да ещё и парсишь числа каждый раз. Ещё бы оно не тормозило.
    Не проще ли для каждого фильма хранить сумму рейтингов и их количество, а потом один раз пройти таблицу рейтингов и заполнить эти хранилища?
    from collections import defaultdict
    total = defaultdict(float)
    count = defaultdict(int)
    for line in data_rating:
        total[line[1]] += float(line[2])
        count[line[1]] += 1
    
    averages = { id: total[id]/count[id] for id in count } #средние рейтинги
    #и сортируем список фильмов по убыванию рейтинга
    data_movies.sort(key=lambda item: averages.get(item[1], 0), reverse=True)
    Ответ написан
  • Почему вызов функции вызывает ошибку?

    Vindicar
    @Vindicar
    RTFM!
    > on_press = BoxOneP()
    Ты присваиваешь параметр on_press результат вызова функции BoxOneP. Которая возвращает None.

    Может, всё-таки имелось ввиду просто "on_press=BoxOneP"?

    И да, что значит "ломает приложение"? Текст ошибки со стектрейсом с студию.
    Ответ написан
    2 комментария
  • Telegram bot, не работает постоянно и выключается после запуска со словами:"process finished with exit code 0", как пофиксить?

    Vindicar
    @Vindicar
    RTFM!
    Я что-то не пойму. Документация и примеры по aiogram говорят, что бота надо выполнять вызовом executor.start_polling(), а у тебя что?
    Ответ написан
    Комментировать
  • Как записать в sql информацию через метод WHERE?

    Vindicar
    @Vindicar
    RTFM!
    INSERT не предполагает WHERE, так как создаёт новую запись в таблице.
    Если тебе нужно обновить существующую запись, используй UPDATE.
    Ответ написан
    Комментировать
  • Можно ли сделать бесконечно работающего бота телеграм?

    Vindicar
    @Vindicar
    RTFM!
    1. Как именно не работает? Приводи минимальный проблемный пример кода и полный текст ошибки (+ traceback).
    2, 3. Зависит от используемой библиотеки для общения с телеграммом. Не зная, какую ты используешь, подсказать трудно - но наверняка можно нагуглить документацию и/или примеры использования.
    Ответ написан