Ответы пользователя по тегу Python
  • Не могу пройти задание в Сheckio, что делать?

    @o5a
    Гуглится похожая ошибка: https://py.checkio.org/forum/post/14529/httpspyche...

    Судя по всему тестер ожидает, что текущее решение миссии будет как бы продолжением предыдущей. Как в их случае, функция fight должна остаться от предыдущего решения. Возможно Вы тоже избавились от этой функции или сделали какое-то похожее изменение.
    Ответ написан
    Комментировать
  • Почему у модуля telebot нету класса types?

    @o5a
    pip uninstall telebot
    pip uninstall PyTelegramBotAPI
    pip install PyTelegramBotAPI

    и библиотеку telebot не надо больше пытаться ставить, правильная PyTelegramBotAPI
    Ответ написан
    Комментировать
  • Python. Как проверить, существует ли таблица в БД?

    @o5a
    Если просто проверить наличие таблицы, то можно запросом
    select * from pg_tables where tablename = 'value_result'

    Если же нужно именно ругаться, когда таблица не создалась или когда запись не получилась, то можно использовать try .. except с отловом конкретного кода ошибки
    try:
        cursor.execute(create_table_query)
    except НужноеИсключение:
        print("таблица уже существует")

    Какие конкретно исключения используется я навскидку не знаю, можно посмотреть в документации:
    https://www.psycopg.org/docs/errors.html
    или вывести опытным путем
    except Exception as e:
        print(e)
    Ответ написан
    Комментировать
  • Как не генерировать пароль который уже был в сгенерирован?

    @o5a
    Чтобы найти "все возможные пароли длины N без повторов" из набора символов можно сразу использовать itertools.product
    from itertools import product
    
    symbols = 'abcdefghijklnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'
    result = list(product(symbols, repeat = N))

    Выдаст список кортежей наборов букв каждого пароля, к ним можно применить ''.join() для полноценной строки.
    Только учтите, что это большие объемы, т.к. кол-во возможных паролей будет определяться
    len(symbols) в степени N
    Ответ написан
    Комментировать
  • Почему не итерируется?

    @o5a
    Александр, ошибка с Nonetype означает, что у каких-то из найденных тэгов <a> отсутствует href, в результате в список записывается None, т.е.
    alllist = ['url1', 'url2', ..., None, ... ]
    Само по себе это не было бы проблемой в списке, но writerow предполагает, что каждый элемент - это список данных (список колонок для csv), а передаете просто строку, поэтому он пытается ее итерировать (т.е. строки он будет записывать побуквенно через разделитель). А None итерировать он уже не может, поэтому и ругается.
    Поправить можно так:
    for line in allurl:
        writers.writerow([line])

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

    @o5a
    Если вопрос в том, как не уходить в минус (независимо от того, что вычитаем), то можно так:
    player2['oranges'] = max(player2['oranges'] - kick, 0)
    Ответ написан
    Комментировать
  • Как обновить все записи по списку id?

    @o5a
    Если производительность не критична (список id не особо большой), то можно просто использовать executemany (он по факту запускает отдельные update, но автоматом по списку).
    cur.executemany('update mytab set status = 1 where id = ?', ((id, ) for id in idlist) )

    Для лучшей производительности правильнее будет использовать 'update ... where id in (...)', формируя запрос форматированием с передачей параметров, но там тоже свои особенности.

    P.S. не заметил тэг SQLalchemy. Если нужно именно для нее, тогда ответ не подойдет :)
    Ответ написан
    Комментировать
  • При использовании range( ), через N-ное количество циклов падает скорость?

    @o5a
    Потому что в целом подход неправильный. Вы каждый цикл создаете новый объект и просто его отрисовываете поверх других, сдвигая каждый раз на новую величину.
    Вместо этого нужно 1 раз создать свой Circle и его уже потом двигать (и двигать соответственно не на i, а на одинаковое фиксированное значение (если ожидается равномерное движение).
    И наверное в цикл стоит добавить задержку в виде time.sleep(0.01)
    obj = Circle(Point(150, 20), 15)
    obj.setWidth(1)
    obj.draw(win)
    
    def down():
        for i in range(250):
            print (i)
    
            obj.setFill("yellow")
            obj.move(0, 1)
            time.sleep(0.01)
    Ответ написан
    Комментировать
  • Не работает удаление строки из таблицы базы данных sqlite3 в python. Что делать?

    @o5a
    Алихан Мулаев, если при этом не забываете commit, значит скорее всего такого rowid в таблице нет или есть, но не у той строки, что предполагаете. Лучше не полагаться на rowid, а использовать явные критерии или конкретный первичный ключ.
    Ответ написан
    Комментировать
  • В какую строку кода надо добавить lower?

    @o5a
    if msg.text.lower().startswith('инфа'):
    Ответ написан
    Комментировать
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    @o5a
    Значит в таблице нет такого поля cash.
    По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

    Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

    Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
    Ответ написан
    1 комментарий
  • Как в pandas сделать список на основании данных нескольких столбцов?

    @o5a
    Можно вынести вычисления в функцию и применить apply.
    import pandas as pd
    df = pd.DataFrame({'movie': [9999999,  2,  3, 1, 9999999],
                      'rating': [3,  2,  9999999, 9999999, 3],
                      'name': [1,  2,  4, 5, 10]})
    
    def process(row):
        result = row['movie']
        if row['movie'] == 9999999:
            if row['rating'] == 9999999:
                result = row['name']
            else:
                result = row['rating']
        return result
    
    df['sum'] = df.apply(process, axis=1)
    Ответ написан
    Комментировать
  • Возможно ли получить параметр перед функцией?

    @o5a
    Этот "параметр" и есть то, что передается в функцию.
    lambda user: user

    аналогично функции
    def myfunction(user):
        return user

    Что вообще хотели сделать? Зачем берете lambda?
    Ответ написан
    Комментировать
  • Can only concatenate list (not "str") to list. В чём проблема?

    @o5a
    В том, что нет такой операции
    sum(list1, list2)
    Что сделать то хотели? Если к одному списку добавить данные другого, то
    list1.extend(list2)
    Ответ написан
  • Как записать текст в буфер windows с пробелом перед ним?

    @o5a
    Проблема видимо в остальном коде или способе, которым потом пытаетесь прочитать буфер обмена.
    Просто проверьте
    pyperclip.copy(" тест")
    print(pyperclip.paste())

    и увидите, что пробел в буфер заносится.
    Ответ написан
    Комментировать
  • Как нормально реализовать форму регистрации на Python + Tkinter?

    @o5a
    первое в регистрации при попытке ввести данные получает странную ошибку

    Потому что с именами путаница. Например, в reg используются элементы entryEPASS а на проверку передаются entryPASS.
    авторизации проверка логина проходит успешно, а абсолютно эдентичная проверка пароля ставит систему в тупик

    У вас там проверка вообще странная, ищете логин среди всех, затем пароль среди всех, а если совпадают так уходите в бесконечный цикл.
    И вообще, у Вас логины отвязаны от паролей, совпадение покажет даже для несовпадающих пар логин:пароль, даже если они просто есть в данных. Для нормальной проверки нужно хранить их попарно, например в виде словаря logins = {"логин1": "пароль1", ...}
    Правильнее было бы сделать проверку (используя ваши же переменные name, p) и вышеуказанный словарь
    if logins.get(name) == p:
    сразу проверит, что введенные логин и пароль совпадают.

    И саму проверку пароля лучше не привязывать к элементам интерфейса. Сделать функцию, просто принимающую готовые строки (логин, пароль) и выдающую результат проверки. А в эти функции передавать уже строки из нужных элементов интерфейса: entryPASS.get() и т.п.
    Ответ написан
    Комментировать
  • Создание теста для опроса пользователей?

    @o5a
    В котором из 300 вопросов система будет на выбор выбирать в случайном порядке 40 вопросов

    random.sample()
    question_list = random.sample(questions, 40)
    который в последующем был записан в log файл

    По-простому и записывайте через file.write, как уже заметили, текстом вопрос - ответ.
    Для хранения вопросов в текстовом файле можно структурировать
    Можно структурировать и хранить данные вопросов в виде словаря и хранить его в json файле, читать тоже будет просто: json.load()
    Примерно так:
    questions = {
    1: {"question": "Как называется программное средство, в котором осуществляются операции по таможенное оформлению?",
    "answers": ["АИСТ-М", "ВОРОБЕЙ-У", "ЧАЙКА-П", "СТРАУС-Т"],
    "correct": 0},
    2: {"question": "Имеет ли право пользователь использовать предоставленные ему ресурсы в личных целях?" ,
    "answers": ["Да", "Нет", "Иногда"],
    "correct": 1},
    ...
    }

    В таком виде у нас каждая запись содержит полные данные в виде словаря: сам вопрос, неограниченный список вариантов ответов, индекс правильного ответа. Какого-то дополнительного класса для работы не требуется, по крайней мере не для того, чтобы связывать вопрос-ответ.
    или в базу данных

    Можно. Но лучше изучите основы реляционных БД, чтобы создать правильную структуру. Примерно так будет: таблица вопросов, таблица ответов, таблица логов ответов пользователей (только привязка уже будет по идентификаторам таблиц, а не текстами).
    Ответ написан
    Комментировать
  • Как сделать вывод одной определенной строки из БД?

    @o5a
    При данной постановке оптимально было бы выбрать все значения из базы в список (один раз, без сортировок), а затем перемешать его и при каждом запросе выдавать следующее значение по списку.
    # считать все свои тексты в список
    data = [row[0] for row in cur.execute("SELECT name FROM `test`")]
    random.shuffle(data) # теперь данные в рандомном порядке, можно выбирать последовательно


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

    # считать только уникальные номера этих текстов в список
    numbers = [row[0] for row in cur.execute("SELECT number FROM `test`")]
    random.shuffle(numbers) # теперь данные в рандомном порядке, можно выбирать последовательно
    
    # при запросе пользователя берем следующий номер из нашего рандомного списка
    number = ...
    # и по нему уже достаем сам текст из базы
    text = cur.execute("SELECT name FROM `test` where number = ?", (number, )).fetchone()[0]
    Ответ написан
    Комментировать
  • Как боту вывести топ 5 пользователей из sqlite3?

    @o5a
    cur.execute("SELECT * FROM users ORDER BY money DESC LIMIT 5")
    data = cur.fetchall()
    text = '\n'.join(f'{row[1]}:   {row[5]} - монет' for row in data)
    await message.reply(text)
    Ответ написан
    Комментировать