Задать вопрос
  • Вывод всех введённых чисел, кроме 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 комментария
  • В чем ошибка получения войс канала дискорд?

    Vindicar
    @Vindicar
    RTFM!
    Ну тебе же прямым текстом написано: 'TextChannel' object has no attribute 'connect'
    Айдишник указывает не на голосовой канал, а на текстовый.
    Ответ написан
    8 комментариев
  • Как сделать, чтобы бот банил пользователей, которые находятся в его БД?

    Vindicar
    @Vindicar
    RTFM!
    Можно, если у бота есть соответствующие права на сервере.

    Хорошо, раз поправил вопрос, поправлю ответ:
    1. Читаешь таблицу в БД, где хранятся пользователи, подлежащие бану. Работа с БД - это отдельная песня, почитай про модуль sqlite3 и что-нибудь по основам SQL.
    2. Читаешь список забаненных сервера, чтобы определить, кто уже забанен.
    3. Определяешь тех, кто еще не забанен, но кого нужно забанить.
    4. Банишь. Можно использовать Guild.ban() или Member.ban()
    Ответ написан
    Комментировать
  • Telegram bot, не работает постоянно и выключается после запуска со словами:"process finished with exit code 0", как пофиксить?

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

    Vindicar
    @Vindicar
    RTFM!
    Взять и сделать.

    1. Ловишь события "бот присоединился к новому серверу"/"участник зашел на сервер"/"участник вышел с сервера"
    2. По приходу события пересчитываешь участников.
    3. Выводишь в статус.

    Есть конкретные вопросы? Читай документацию, или пиши код и выкладывай сюда, обсудим.
    Ответ написан
    Комментировать