Ответы пользователя по тегу Python
  • Сделал бота чтобы он работал в беседе. Но он отвечает на абсолютно на любое сообщение. Что делать?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Составить правильное условие.

    if event.object.text.lower() == "привет бот" or "Привет бот" or "эй бот" or "Эй бот":
    читается как «если сообщение равно "привет бот" или всегда».

    Оператор or перечисляет не варианты значения, с которыми производится сравнение, а варианты условий (которыми, в данном случае, должны быть сравнения результата event.object.text.lower() с разными строками.

    Также, поскольку lower() приводит текст к нижнему регистру, не имеет смысла сравнивать со строками, содержащими большие буквы.
    Ответ написан
    1 комментарий
  • Определение адреса клиента в soketserver?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    Предположу, что self.client_address в обработчике запросов.

    RequestHandler.handle()
    This function must do all the work required to service a request. The default implementation does nothing. Several instance attributes are available to it; the request is available as self.request; the client address as self.client_address; and the server instance as self.server, in case it needs access to per-server information.
    https://docs.python.org/3.4/library/socketserver.h...
    Ответ написан
    Комментировать
  • Как сделать, чтобы сообщение показывалось над lineedit?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    А так?
    QtWidgets.QToolTip.showText(self.ui.lineEdit.mapToGlobal(QPoint(), …)

    Возможно, …(QPoint(0, self.ui.lineEdit.height))….
    В доках написано, что координаты указываются для "точки интереса", и что текст показывается "со смещением относительно точки интереса, специфичным для платформы".
    Ответ написан
  • Как добавлять/удалять новые данные в базе данных?

    KodyWiremane
    @KodyWiremane
    Пони, Debian, LEMP, LAN, любитель
    На мой непрофессиональный взгляд, можно хранить в дополнительном словаре соответствие st номеру row в myresults, потом пройтись по множеству удалённых строк, по словарю определить для каждой номер row в myresults и построить запрос на удаление, используя значения из row. Это решает проблему удаления.

    Вариация — добавить в БД автоинкрементируемый столбец id, в словаре сохранять именно этот id (st→id), тогда запрос на удаление получается гораздо проще.

    Для добавления, мне кажется, только парсить строку регуляркой.

    import re;
    
    line = '25.06.2019 272\xd0\xb0 4 13:20 - 14:50 \xd0\xbb\xd0\xb5\xd0\xba. \xd0\xad\xd0\xba\xd0\xbe\xd0\xbd\xd0\xbe\xd0\xbc\xd0\xb8\xd0\xba\xd0\xb0 \xd0\xbe\xd1\x80\xd0\xb3\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb7\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 \xd0\x9a\xd0\xb0\xd0\xbb\xd1\x83\xd0\xb3\xd0\xb8\xd0\xbd\xd0\xb0 \xd0\x9d.\xd0\x90. 314 \xd0\x9d ';
    expr = re.compile('^([0-9.]+) ([0-9\xd0\xb0-\xd1\x8f]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ \xd0\x9d) $');
    match = expr.match(line);
    
    for val in match.groups() :
    	print(val);


    Либо более читаемо,
    # -*- coding: utf-8 -*-
    # комментарий выше должен быть первой или второй строкой в файле исходника, содержащего юникод (здесь, русские буквы)
    
    import re;
    
    line = '25.06.2019 272а 4 13:20 - 14:50 лек. Экономика организации Калугина Н.А. 314 Н ';
    expr = re.compile('^([0-9.]+) ([0-9а-я]+) (\d+) (\d+:\d+) - (\d+:\d+) (.*) (\d+ Н) $');
    match = expr.match(line);
    
    for val in match.groups() :
    	print(val);
    Ответ написан
    4 комментария