Задать вопрос
Ответы пользователя по тегу Python
  • Могу ли я сделать блокировщик сайтов без использования файла "Hosts" и его изменения?

    Vindicar
    @Vindicar
    RTFM!
    Поднять свой как-бы DNS сервер на машине, прописать этот DNS сервер как основной и единственный для данной машины, предыдущие прописанные сервера сохранить. Админские права на этом этапе понадобятся.
    При поступлении запроса проверять запрашиваемое имя. Если не в чёрном списке - перенаправлять запрос на сохранённый DNS, полученный ответ отдать самому.
    Грубо и не всегда надёжно (есть DNS over HTTPS, например, который так не перехватишь), но в базовом варианте сработает.
    Ответ написан
    Комментировать
  • Как записать for, if-else в одну строку?

    Vindicar
    @Vindicar
    RTFM!
    Если я верно понял, что требуется...
    [(even, uneven)[arg % 2].append(arg) for arg in args]
    Ответ написан
    3 комментария
  • Не понимаю суть ошибки, можете объяснить?

    Vindicar
    @Vindicar
    RTFM!
    from sqlite import db_start, create_profile, edit_profile
    from main import balance


    main импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который импортирует sqlite, который импортирует main, который ...
    Ну ты понял.

    Быстрого волшебного решения тут нет. Разбирайся с областями видимости, избавляйся от глобальных переменных.
    Например, почему у тебя при создании нового профиля используется balance? Т.е. новый пользователь получает столько денег, сколько было у последнего активного?
    Почему вообще у тебя вещи, специфичные для одного пользователя, лежат то в глобальных переменных, то в данных машины состояний (state)? Бери их из БД , когда они потребуются.
    Ответ написан
    6 комментариев
  • Как решить ошибку RuntimeWarning: Enable tracemalloc to get the object allocation traceback?

    Vindicar
    @Vindicar
    RTFM!
    Выше же RuntimeWarning: coroutine XXXXX was never awaited.
    await позабывал. Читай документацию на методы, которыми пользуешься, чтобы знать, как их запускать.
    Ответ написан
    Комментировать
  • Как можно реализовать обработку текста?

    Vindicar
    @Vindicar
    RTFM!
    Читай про finite state machine (FSM) в aiogram.
    Если коротко, надо отслеживать и хранить, в каком меню находится каждый пользователь.
    Ответ написан
    Комментировать
  • Как проверить ячейку бд на наличие конкретных данных Sql?

    Vindicar
    @Vindicar
    RTFM!
    Не стоит полагаться на возвращаемое значение cursor.execute().
    Выхлоп твоего запроса нужно получать через fetchone()/fetchall(), даже если запрос вернул одно значение.
    У тебя тогда в выдаче будет одна строка с одним столбцом. Выбираешь строку через fetchone(), у полученного значения берёшь нулевой столбец.
    Ответ написан
    Комментировать
  • Почему Python выдает ""(" was not closed"? хотя все нормально?

    Vindicar
    @Vindicar
    RTFM!
    У тебя в строке одинаковые одинарные кавычки - как вокруг всей строки, так и вокруг значения href. Так что https://www.google.com/ оказалось вне строковой константы. Будь внимательнее. И вообще, в HTML кавычки должны быть двойные.
    Ответ написан
    Комментировать
  • Почему дублируется слэш и не работают сырые строки?

    Vindicar
    @Vindicar
    RTFM!
    Обрати внимание, как ты выводишь значение.
    В питоне есть два строковых представления: str и repr.
    str - человекочитаемое представление. Его можно увидеть, сделав просто print(path). Сразу станет видно, что ничего не удваивается.
    repr, же, по идее, представляет объект так, что если его записать прямо в коде, как показано - получим обратно этот объект. Если это вообще возможно.
    В случае с числами разницы нет.
    В случае со строками - она будет. У тебя на скриншоте именно repr-представление строки - в кавычках, и с экранированием спецсимволов. При этом, записав такую константу, получишь ту же самую строку, что логично.
    Ведь 'a\\b' - это то же самое, что и r'a\b'.

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

    Vindicar
    @Vindicar
    RTFM!
    for i in range(word_count, 0, -1):
    На первой итерации цикла i примет значение word_count.
    Символы в строке word имеют индексы от 0 до word_count-1.
    Так что индекс, равный word_count, не существует. Ты поймаешь исключение IndexError.

    И можно ли его написать более компактно? Если да, то как?

    Освоить срезы (slice). part = word[a:b:c] будет (условно) эквивалентно
    part = ''
    i = a
    while i < b:
        part = part + word[i]
        i = i + c

    для положительного c. А для отрицательного будет while i > b:.
    Если a опущено, по умолчанию это начало последовательности (для c > 0) или конец (для c < 0).
    Если b опущено, по умолчанию это конец последовательности (для c > 0) или начало (для c < 0).
    Если c опущено, по умолчанию это 1.

    Так что для обращения строки нам нужно пройтись по всей строке с шагом -1. Получим вот что:
    word_reversed = word[::-1]
    # это эквивалентно
    word_reversed = word[len(word)-1:-1:-1]
    Ответ написан
    1 комментарий
  • Как соединить 2 python файла в один код?

    Vindicar
    @Vindicar
    RTFM!
    У тебя будет проблема в том, что во второй файл надо будет передать объект bot, которого, скорее всего, не будет на момент импорта этого файла.
    Есть не слишком изящный, но простой способ.
    # imported_file.py
    import telebot
    from telebot import types
    
    def setup(bot):  # setup() принимает бота и прочее как параметры.
        # да, прописываем обработчики прямо внутри setup()
        # но вот глобальные переменные здесь прописывать не стоит
        @bot.message_handler(content_types=['text'])
        def get_text_messages(message):
            ...
    
    # main_file.py
    import telebot
    from telebot import types
    import time
    
    import imported_file
    
    bot = telebot.TeleBot("ТОКЕН")
    # убедись, что setup() вызывается строго один раз для каждого дополнительного файла!
    imported_file.setup(bot)  
    ...  # дальше работаем как обычно


    Этот вариант позволяет загрузить файл уже в ходе работы бота, но не предусматривает возможности выгрузить файл на ходу. Впрочем, не все библиотеки позволяют отвязать обработчик от события, так что это не только проблема этого подхода.
    Ответ написан
    1 комментарий
  • Почему не создается БД при старте телеграм бота?

    Vindicar
    @Vindicar
    RTFM!
    просто в папке не создается таблица бд и на этом все.

    создает товар и сохраняет в бд без ошибок.

    Дай угадаю, коннект к базе делаешь командой вида sqlite3.connect('somefile.db')?
    Если так, то ты налетел на проблему относительных путей. Основы информатики, начальная школа.
    Путь somefile.db будет рассчитываться относительно текущего рабочего каталога, который может меняться в зависимости от способа запуска скрипта, да и просто в ходе его работы. А может не меняться. Т.е. нет гарантий, что текущий рабочий каталог будет совпадать с каталогом, где лежит скрипт.
    Лучше определить абсолютный путь к файлу самостоятельно.

    from pathlib import Path
    import sys
    
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()  # каталог, где лежит выполняемый скрипт
    DB_PATH = SCRIPT_DIR / 'somefile.db'  # путь к файлу БД в этом каталоге
    
    conn = sqlite3.connect(DB_PATH)
    Ответ написан
    Комментировать
  • Ошибка: sqlite3.OperationalError: no such column: telegram_id: Как исправить?

    Vindicar
    @Vindicar
    RTFM!
    CREATE TABLE IF NOT EXISTS не сработает, если таблица уже существует - но и только. Если она имеет неправильную структуру, данный вызов её не пересоздаст, а оставит как есть. Проверь структуру таблицы, либо через обращение к таблице схемы (хранит структуру всех таблиц к БД), либо подцепившись клиентом к твоей БД.
    Ответ написан
    Комментировать
  • Почему не изменяется значение переменной в python?

    Vindicar
    @Vindicar
    RTFM!
    class Enemy:
        ...
        def mobReturn(self): 
            self.x_mob = self.rect.x
    
    class Bullet(pygame.sprite.Sprite):
        def update(self):
            if x_mob>=100:

    В первом случае ты изменяешь атрибут экземпляра класса Enemy.
    Во втором случае ты читаешь локальную переменную метода update() класса Bullet.
    Это совершенно разные области видимости, они друг о друге ничего не знают.

    Если ты пытаешься решить задачу обнаружения коллизий (т.е. пересечений двух объектов), тебе как-то придётся их "познакомить".
    Или сделай метод у противника, в который передаёшь пулю, и спрашиваешь "вот это в тебя попало?".
    Или сделай метод у пули, в который передаёшь противника, и спрашиваешь "ты вот в это попала?"
    Или вообще сделай отдельную функцию, куда передаёшь врага и пулю, если не хочешь нагружать их этой обязанностью.

    Во всех случаях проверку коллизии нужно будет делать каждый кадр. Так что в главном цикле игры надо будет перебирать активных врагов и активные пули, и проверять их. В простейшем случае - всех со всеми.
    Ответ написан
  • Вылет Python при возврате c_char_p из dll ctypes. Что не так?

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

    Если обратиться к функции из под C++, она сработает?
    # include <fstream>
    # include <string>
    using namespace std;
    
    const char* readfile(char* filename) {
      ifstream file;
      string lines, line;
      
      file.open(filename);
      if (file.is_open()) {
        while (file >> line) {
          lines += line;
        }
        file.close();
        return lines.c_str();
      } else {
        char* trashVar = "Bad open";
        return trashVar;
      }
    }
    
    int main()
    {
        cout << readfile("filename.txt");
        return 0;
    }
    Ответ написан
    4 комментария
  • У меня в программе ошибка не считает последную функцию не тот ответ как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Впридачу ко всему остальному выше:
    return clas 
    return name

    Отработает только первый return.
    Ответ написан
    Комментировать
  • JSON io.UnsupportedOperation: not readable почему выводиться данная ошибка JSON?

    Vindicar
    @Vindicar
    RTFM!
    with open('values.json') as json_file:
    Для чего открываешь файл? Чтение? Запись? Надо указывать.
    Ответ написан
  • Как можно оптимизировать код для склейки видео по запросу пользователя?

    Vindicar
    @Vindicar
    RTFM!
    a = VideoFileClip("./Video/a.mp4")
    b = VideoFileClip("./Video/b.mp4")

    1. Если ты ловишь себя на создании переменных такого вида, тебе нужна коллекция. Открой для себя словари (dict).

    2. Что мешает подставить введённую строку в имя файла?
    Ответ написан
    1 комментарий
  • Возможно ли добавить функцию в бота aiogram, которая будет удалять/изменять текст сообщения?

    Vindicar
    @Vindicar
    RTFM!
    Нужно хранить в БД ID всех сообщений бота консультантам, которые описывают данную заявку. При обработке заявки пройтись по списку ID для данной заявки и удалить сообщение (ну или отредактировать).
    Простейшая таблица вида "ID сообщения - ID заявки" тут справится.
    Ответ написан
    2 комментария
  • Aiogram как отправлять заранее заготовленное сообщение каждый день?

    Vindicar
    @Vindicar
    RTFM!
    1. Записать в переменной ID получателя.
    2. Разобраться, как отправить сообщение по заранее известному ID.
    3. Разобраться, как пользоваться aioschedule.
    Ответ написан
    Комментировать
  • Как сделать так, что бы обновлялось всё время?

    Vindicar
    @Vindicar
    RTFM!
    Я написал такой код:

    Не верю. (с)

    Если бы ты сам его написал, ты бы знал, что у тебя там сначала вечный цикл while True, который прерывается только если нажата клавиша (cv2.waitKey()) с кодом 27, т.е. Esc. Но этот цикл только читает кадр и показывает его в окне. А всё распознавание идёт уже после этого цикла. И там же вывод одного кадра и ожидание любой клавиши.

    Если нужно, чтобы операция выполнялась для каждого кадра - она должна быть внутри цикла по кадрам. Логично?
    Ответ написан