Задать вопрос
Ответы пользователя по тегу Python
  • Как прочитать определенный столбец из csv файла в определенном диапазоне?

    @o5a
    Видимо в файле значения разделены не запятой, она считается разделителем по умолчанию. Для указания своего разделителя нужно его указать в параметре
    csv.DictReader(csvFile, delimiter=';')

    А в numpy есть свой загрузчик данных
    import numpy as np
    
    data = np.genfromtxt('myfile', delimiter=';', skip_header=1)
    Ответ написан
  • Почему обновляется только первое значение таблицы?

    @o5a
    Не могу сказать наверняка, не зная, откуда берется переменная y, но в самом update получается следующее.
    Первым в списке полей, возвращаемом table_info очевидно идет поле ID. Первой же операцией update это поле сбрасывается в 0, т.к получается конструкция
    UPDATE userResource SET ID = 0 WHERE ID = твой_ID
    Из-за этого последующие апдейты других полей не срабатывают, т.к. записи с ID = твой_ID уже нет, ты ее затёр нулем.
    Можно добавить проверку по имени поля, чтобы такого не случалось, наподобие

    if i[1] != 'ID':
        cursor.execute('UPDATE ...


    И выборку из pragma лучше все же сделать как и обычную, через fetchall
    for i in cursor.execute(f"PRAGMA table_info(userResource)").fetchall():
    Ответ написан
  • Как испровить can't multiply sequence by non-int of type 'str'?

    @o5a
    input() возвращает строку, нужно конвертировать в числа, аналогично сделанному для k
    Ответ написан
    Комментировать
  • Почему ctx.guild.id возвращает None в запросе?

    @o5a
    Отсутствует fetchall(). Сам по себе cursor.execute возвращает None.
    for row in cursor.execute(...).fetchall():
    И как уже тут заметили, не надо использовать форматирование строк для подстановки параметров SQL запроса, используйте нормальный синтаксис (через %s и передачу данных), в предыдущем вопросе ведь уже приводили пример.
    Ответ написан
  • Как сделать запись значений в базу данных PostgreSQL?

    @o5a
    Синтаксис там похожий, переменные тоже можно передавать, только для подстановки используется '%s'
    cursor.execute("INSERT INTO users VALUES (%s, %s, %s, %s, %s)", (member, member.id, 0, 0, 1))
    Ответ написан
  • Проблема в архитектуре бд sqlite, что не так?

    @o5a
    Ошибку выдает потому, что запрос на вставку gender ('insert or ignore') пытается использовать ключи, а в таблице они не заданы.
    Например, так

    CREATE TABLE IF NOT EXISTS gender(gender text primary key)


    В остальном по структуре. Если все же делаете реляционную модель, то в таблице студентов должны храниться id из этих справочных таблиц (groupp, teacher и т.д.), а не сами значения. Тогда это позволит поддерживать уникальность значений, позволять использовать выбор значений из справочников (которыми и будут эти таблицы gender, teacher и т.д.).

    Пример, для учителя не просто таблица с teacher text, а таблица с ключевым полем, которое и используется для связки с таблицей студентов и остальными редактируемыми полями.

    CREATE TABLE IF NOT EXISTS teacher(
                teacher integer primary key,
                teacher_name text)


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

    Если же полноценная реляционная модель не нужна, то нет и смысла делать отдельную таблицу под каждую сущность (они по факту не будут использоваться), можно все хранить напрямую в таблице студентов.
    Ответ написан
    1 комментарий
  • Как поставить отступы между строками заданные пользователем?

    @o5a
    Если под "отступы между строками" имеется в виду выравнивание колонок, то можно так:
    a = 1
    b = 2
    w = 10
    print(f'{a:>{w}}{b:>{w}}')
    Ответ написан
    1 комментарий
  • Как загнать в переменную две колонки чисел?

    @o5a
    input = '''624740 472564
    302351 352046
    140377 467924
    543374 702809
    32247 639373
    471765 936039
    858222 888486
    572519 290559
    272907 485905
    264087 638421
    611105 673663
    84899 176786'''
    
    # разбиваем на строки, и в каждой строке суммируем числа, которые получаем разделением по пробелу через split()
    sums = [sum(map(int, line.split())) for line in input.splitlines()]
    print(sums)
    Ответ написан
    Комментировать
  • КАК Расставить значения регулярок?

    @o5a
    Зависит от структуры текста. Принцип примерно такой
    import re
    
    s = '''время:30 тема:какая-то тема содержимое:а здесь наше содержимое
    время:50 тема:другая тема содержимое:совсем другое содержимое'''
    
    patt = re.compile(r'время:(.+?) *тема:(.+?) *содержимое:(.+)')
    
    for m in patt.findall(s):
        print('[{}] {}\n{}'.format(*m))


    выдаст
    [30] какая-то тема
    а здесь наше содержимое
    [50] другая тема
    совсем другое содержимое
    Ответ написан
    Комментировать
  • Как поставить И в цикл while Python?

    @o5a
    rate_number > 5 and rate_number < 1
    по-русски
    rate_number > 5 И rate_number < 1
    Не находите разногласия? В логике для подобного используется ИЛИ
    Ответ написан
    Комментировать
  • Как сравнить данные из таблицы с нулем?

    @o5a
    Вместо
    for i in cursor.execute("SELECT Wreason FROM users WHERE id = {}".format(member.id)).fetchone():
          if i == 0:
            print('4')
            cursor.execute("UPDATE users SET warns = warns + {1} WHERE id = {}".format(member.id))
            cursor.execute("UPDATE users SET Wreason = Wreason + {} WHERE id = {}".format(arg, member.id))


    Использовать напрямую синтаксис SQL
    cursor.execute("UPDATE users SET warns = warns + 1, Wreason = {} WHERE id = {} AND Wreason = 0".format(arg, member.id))

    Обновит таблицу users по данному пользователю (увеличит счетчик предупреждений на 1, проставит новую причину предупреждения), если до этого Wreason = 0.
    Ответ написан
    1 комментарий
  • Как циклом транспонировать матрицу?

    @o5a
    Когда матрица создается таким образом
    result = [[0] * m] * n
    ее колонки (вложенные списки) представляют собой копии, по факту все они ссылаются на один и тот же список.

    Т.е. result[0] == result[1] == result[2] и т.д.

    Поэтому при изменении значений в одном из списков автоматически "меняются" значения во всех списках.

    При установке result[0][1] = 3 можно увидеть, что resul[1][1], result[2][1] тоже равны 3 (по факту это тот же самый список).

    Чтобы избежать подобного, можно формировать матрицу так
    result = [[0] * m for _ in range(n)]
    Ответ написан
    Комментировать
  • Где ошибка в алгоритме пермутаций?

    @o5a
    Алгоритм должен быть такой: с конца ищем первый символ, такой, что a[i] < a[i+1], так мы определяем наименьший разряд, который сделает число больше предыдущего. Затем нам нужно минимизировать "хвост", чтобы получилось число, ближайшее к исходному (чем меньше хвост, тем оно ближе к исходному). Для этого мы хвост сортируем по возрастанию и переставляем наше число наименьшего разряда с первым числом из хвоста, большим его.

    В примере с 1234567890.

    1. Ищем цифру наименьшего разряда, когда a[i] < a[i+1]. Это 8, хвост [9, 0].
    2. Сортируем хвост [0, 9] и идем по нему в поисках первой цифры, большей нашей 8. Это 9.
    3. Переставляем их и возвращаем результат
    1234567809 => 1234567908
    Ответ написан
    3 комментария
  • Python как вывести переменную из одной функции в другую?

    @o5a
    Чтобы глобальная работала, нужно объявить эту file1 за пределами обеих функций, хотя бы просто file1 = None
    Ответ написан
    Комментировать
  • Как "заставить" функции выполнятся после условий, если сначала их нужно написать?

    @o5a
    Рисуется сразу потому что в словаре содержатся вызовы (т.е. результаты вызова функции) вместо самих функций.
    Нужно изменить словарь и соответственно добавить параметр в вызов функции (как значение из словаря). Также выкинул figures_numbers т.к. смысла в нем тут нет.

    point = sd.get_point(300, 300)
    figures = {1: triangle, 2: square, 3: pentangle, 4: sixangle}
    user_input = input('Введите, пожалуйста, номер фигуры с 1 - 4: ')
    number_figure = int(user_input)
    # number_figure = 2
    if number_figure in figures:
        figures[number_figure](point)
    else:
        print('Вы ввели неправильный номер фигуры, введите значение от 1 до 4')
    
    sd.pause()
    Ответ написан
    Комментировать
  • Как вывести слово с большим количеством символов?

    @o5a
    Можно напрямую использовать max, передав ей в качестве сравнивающей функции len (которая возвращает длину строки). Таким образом она найдет строку с максимальной длиной.

    a = ['qwe', 'q', 'arqw', 'bbbwewe']
    print(max(a, key=len))
    # bbbwewe
    Ответ написан
    Комментировать
  • Парсинг ссылок на людей в постах вк?

    @o5a
    Можно напрямую использовать re.sub с передачей функции замены (можно использовать lambda). Пример:
    import re
    
    txt = "первый юзер: [12344554788|John Doe] второй юзер: [09876654|Jane Doe] и остальные"
    
    rc = re.compile("\[(.*?)\|(.*?)\]")
    
    result = rc.sub(lambda x: "<a href='https://vk.com/"+x.group(1)+"'>"+x.group(2)+"</a>", txt)
    print(result)

    Выдаст:
    первый юзер: <a href='https://vk.com/12344554788'>John Doe</a> второй юзер: <a href='https://vk.com/09876654'>Jane Doe</a> и остальные
    Ответ написан
    Комментировать
  • При выборе данных в sqlite3 и при fetchone выходит None хотя в db браузере всё хорошо?

    @o5a
    Проблема здесь
    if sql.fetchone() is not None:
        pref = sql.fetchone()

    вызов fetchone() полностью выбирает данные из курсора, в результате последующий вызов fetchone() возвращает null

    Нужно сделать fetch в переменную, которую уже потом использовать:
    pref = sql.fetchone()
    if pref is not None:
        # использовать уже pref напрямую, а не sql.fetchone()


    P.S. хотя я наверное не совсем понял проблему, похоже изначально данные даже не выбираются, так что проблема еще в чем-то. Но даже после этого, указанное выше надо исправить, иначе тоже данные не выдаст (но уже по указанной причине).
    Ответ написан
    2 комментария
  • Как отсортировать эффективно по второму аргументу?

    @o5a
    Чтобы сортировать сразу по нескольким колонкам, можно использовать соответствующие наборы элементов в кортеже/списке, т.е. изменить:
    data.sort(key=lambda item: (-item[1], item[0]) )
    Ответ написан
  • Как написать чат из игры SUPERHOT?

    @o5a
    Будет зависеть от ОС. Под Windows можно, например, так сделать
    import msvcrt
    import sys
    
    text = "This is just a long text"
    for c in text:
        while True:
            if msvcrt.kbhit():
                msvcrt.getch()
                print(c, end='', flush=True)
                break
    
    sys.stdout.flush()
    Ответ написан
    1 комментарий