Ответы пользователя по тегу Python
  • Как мне доставать данные из списка?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    data = [('10', '11', '48', '56', '34')]
    [print(i) for i in data[0]]
    Ответ написан
  • Как получить количество строк в документе, если строка одна?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Можно как-то так:
    filename = 'groups.txt'
    with open(filename, 'r') as file:
        for n, line in enumerate(file, 1):
            line = line.rstrip('\n')
            print(f'{n}\t{line}')

    Это легко гуглится, кстати.
    Ответ написан
    Комментировать
  • У меня ошибка 'Database' object has no attribute 'connection', как это решить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    def __int__
    ->
    def __init__
    сам порой на эту граблю наступаю с автоподстановкой.
    Ответ написан
    Комментировать
  • Как обратиться к объекту класса renpy, если я не знаю его имя?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Во-первых, не объекты, а экземпляры класса. Объект класса это немного другое.
    Во-вторых, то, что у вас написано, не валидный код Python.
    У вас нет там никакого создания экземпляров класса.
    Экземпляры можно класть в список, например. И потом обращаться к экземплярам в списке по индексу (в квадратных скобках).
    Вот так это может выглядеть:
    class MyClass:
        def __init__(self, i):
            self.i = i
        
        def img(self):
            return self.i + 1
        
        def pos(self):
            return self.i * 2
        
        
    circles = [1, 2, 3]
    result = []
    
    for i in circles:
        result.append(MyClass(i))
    
    print(result[0].img())
    print(result[2].pos())
    Ответ написан
  • Как убрать скобки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Попробуйте bot.send_message(message.chat.id, '@' + bd[0])
    Ответ написан
    4 комментария
  • Как при отсутствии интернета, перезапустить код(телеграмPyTelegramBot)?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    while True:
        try:
            start_my_bot()
        except НазваниеОшибки as e:
            print(e)
            try:
                stop_my_bot()
            except:
                pass
            time.sleep(10)
    Ответ написан
    2 комментария
  • Как сделать перебор по порядку в позиции строки из списка символов на Python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если решать «в лоб», то как-то так:
    def change(position, new_character):
        return  string[:position] + new_character + string[position+1:]
    
    string = 'example'
    new_characters = 'abcdef'
    for n, _ in enumerate(string):
        for new_character in new_characters:
            print(change(n, new_character))
    Ответ написан
    3 комментария
  • Вывод случайного значения из бд?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вывод случайного значения из бд?

    Нет. См.п.3.6
    Ответ написан
    1 комментарий
  • Как вывести данные из бд через строки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Предположим, что часть про SQLite у вас работает как надо и всегда возвращает в row корректный tuple.
    Код предполагает, что длина row всегда равна длине ROW_HEADS, это лучше проверять, иначе могут быть ошибки и сбои.

    Формально решить задачу можно как-то так, например:
    ROW_HEADS = ["ID:", "Имя:", "Почта:", "Добавлен:", "Зарплата:"]
    
    
    def make_string(row):
        return '\n'.join([f'{key} {value}' for key, value in zip(ROW_HEADS, row)])
    
    
    if __name__ == '__main__':
        row = (1, 2, 3, 4, 5)
        print(make_string(row))
    Ответ написан
    Комментировать
  • Почему не работает переменная которая прошла через функцию?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому что переменная не "прошла через функцию".
    Одна переменная value2 ссылается на другую переменную, объявленную в global, а другую value2вы объявляете в своем методе путем явного присвоения:
    value2 = real_name
    До объявления value2 ссылалось на объект из global, но после объявления внутри метода стало ссылаться на другой объект, и стало отдельным от глобального.
    Пример, поясняющий id объектов
    class Demo:
        def __init__(self):
            pass
    
        def check(self, value1, not_real, value2, real):
            print(f'\t{value2} тут еще не объявили {id(value2)}, ссылается на глобальную')
            if value1 == not_real:
                value2 = real
                print(f'\t{value2} тут уже объявили {id(value2)}, ссылается на real {id(real)}')
    
    
    my_var = 2
    print(f'{my_var} тут глобальная {id(my_var)}')
    my_test = Demo()
    my_test.check(1, 1, my_var, 3)
    print(f'{my_var} тут глобальная {id(my_var)}')

    У вас есть два относительно простых выхода:
    возвращать значение из метода через return
    костыль, т.к. получается, что это не метод, а просто функция
    class Demo:
        def __init__(self):
            pass
    
        def check(self, value1, not_real, real):
            if value1 == not_real:
                return real
    
    
    my_var = 2
    print(my_var)
    my_test = Demo()
    my_var = my_test.check(1, 1, 3)
    print(my_var)



    передавать в функцию список и менять элемент списка
    чудовищный костыль, так лучше не делать, т.к. класс меняет что-то вне класса, да еще изменение списка какое-то неявное, можно забыть или не уследить
    class Demo:
        def __init__(self):
            pass
    
        def check(self, value1, not_real, value2, real):
            if value1 == not_real:
                value2[0] = real
    
    
    my_var = [2]
    print(my_var[0])
    my_test = Demo()
    my_test.check(1, 1, my_var, 3)
    print(my_var[0])


    По-идее, класс должен содержать в себе экземпляры и методы для изменения этих экземпляров, а снаружи ничего менять ему не надо. Если меняет - плохо, не тем занимается. В принципе, бывают случаи, когда делают классы - "швейцарские ножи", складывая в них всякие функции, относящиеся к одной теме... но это как-то мне кажется не этот случай.
    Ответ написан
    1 комментарий
  • Можно ли как-то получит данные об изменениях в Google Sheets с помощью python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вижу два варианта:
    1. Хранить последние состояния каждой ячейки в отдельной колонке и сверять с текущим; произошло изменение - фиксируем новое состояние как текущее и отправляем его клиенту
    2. В таблице хранить отдельно колонку флага «updated», если True - значит обновилось, отдаём данные клиенту, ставим флаг False. Мониторим флаги 300 тыс раз в наносекунду.
    Ответ написан
    2 комментария
  • Как правильно построить логику приложения?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Первое, что приходит в голову: если уж классы, то и трэки - класс. Со всеми вытекающими. Но это отдельная история.

    Второе - для списков добавление элемента - метод .append()
    Можно и «плюсовать», но лучше явно, чем неявно.
    Т.е. self.data['tracks'].append({…})
    Но тут мы подходим к третьему: если у тебя класс проигрывателя, зачем внутри него делать вот этот словарь self.data?
    Пусть у класса проигрывателей будут атрибуты «self.tracks: list» и «self.queueloop_status: bool».
    Т.е.
    self.tracks.append({…})
    self.queueloop_status = True

    И, наверное, для управления всем этим классу проигрывателя надо оформить соответствующие методы (add, remove, сеттеры/геттеры и т.д.),
    Ответ написан
    Комментировать
  • Почему rpy не читает скрипт?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ошибка именно в синтаксисе и именно от незнания синтаксиса Python.
    Дело в том, что скобки в Python - не просто скобки. Это литералы. Круглые скобки - это литерал последовательности tuple, т.е. кортежа. Кортеж непременно должен содержать разделитель - запятую.
    У вас my_tuple = (rf"first element") - это невалидная запись.
    Должно быть так:
    my_tuple = (rf"first element", )
    Или так:
    my_string = rf"first element" если вы хотите получить просто строку.

    Но, поскольку вы хотели в действительности получить путь к вашей папке, я бы использовал библиотеку pathlib и сделал бы как-то так:
    from pathlib import Path
    
    def get_folders(source_path: Path):
        return [item for item in source_path.iterdir() if item.is_dir()]
        
    def get_files(source_path: Path):
        return [item for item in source_path.iterdir() if item.is_file()]
    
    
    my_home = Path.home()
    my_path = 'Library/Application Support/Steam/steamapps/workshop/content/331470/508932099/escs/'
    
    blpi_path = my_home / my_path
    
    print(f'folders:\n{get_folders(blpi_path)}\n')
    print(f'files:\n{get_files(blpi_path)}\n')
    Ответ написан
  • Какую проверку сделать на member вк, что бы не выходило ошибок?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В общем случае вам надо прочесть api, по которому работает ваш код, понять, какой тип ожидается, и сделать проверку на этот тип через isinstance.

    Есть альтернативный вариант - сделать через try/except, но тут надо прочесть раздел api, в котором описаны exceptions, выбрать правильный и применить.

    Приносите свою попытку решения, если что не сработает.
    Ответ написан
  • Добавляю в sqlite3 через python в таблицу данные и выдает ошибку почему?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Элементарно, Ватсон!
    В области видимости переменных функции passw переменная loginDb - не определена, поэтому функция ищет такую переменную в вышележащей области видимости - в глобальной. А там эта переменная определена и ссылается на класс str (кстати, зачем???)
    В то же время в области видимости переменных функции auth переменная loginDb определена, поэтому она там не имеет никакого отношения ни к одноименной переменной в глобальной области, ни к одноименной переменной в функции passw.
    На вход execute попадает значение str - а это - класс, а не строка, поэтому execute и ругается, что тип не подходящий.

    Что делать?
    • Изучить и понять области видимости переменных.
    • Передавать в явном виде необходимые переменные на вход функций, а также явно возвращать их измененные значения из функций и явно передавать в другие функции.
    Ответ написан
    Комментировать
  • Как распаковать вложенный список?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    data = ['Один',  'Два',  'Три',  ['Четыре',  'Пять',  'Шесть' ], 'Семь']
    print(str(data).replace('[', '').replace(']', '').replace("'",'').split(','))
    Ответ написан
    Комментировать
  • Как записать в переменную уравнения с неизвестными параметрами для дальнейшего их нахождения?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если у вас все остальные члены и коэффициенты уравнения будут известны или определены как функции, то надо преобразовать уравнение так, чтобы альфа осталась с одной стороны уравнения, а остальные члены - с другой. Все.
    Ответ написан
    Комментировать
  • Как обработать ошибку в условии?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    if result == InvalidArgumentException():
    попробуй заменить на
    if isinstance(result, InvalidArgumentException):
    если я правильно понял смысл кода, так правильнее.
    Ответ написан
    Комментировать
  • Ошибка в отправке фото в telegram-боте?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Эта конструкция выглядит нерабочей.
    open(random.choice(r'C:\путь к папке\images\*'), 'rb')

    open ожидает путь к файлу. А random.choice ожидает список или множество. А r'C:\путь к папке\images\*' это строка. random.choice в лучшем случае выберет элемент строки (символ) и передаст его на вход open. Open не сможет открыть файл с именем, которое есть случайный символ из строки.

    Вам надо сначала при помощи os начитать список файлов, передать его на вход random.choice и затем результат передать на вход open.
    Ответ написан
    1 комментарий
  • Найти наибольшее количество слагаемых из переменных двух массивов?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Найти наибольшее количество слагаемых из переменных двух массивов?

    Не найти.
    Ответ написан
    6 комментариев