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

    Maksim_64
    @Maksim_64
    Data Analyst
    На вот тебе вот такое решение, доводи до ума.
    text = 'Я есть Грут.Ты нет.'
    print(
        '.'.join(' '.join(reversed(item.split(' '))).capitalize() for item in text.split('.'))
    )
    Ответ написан
  • Как хранить константы в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вот большой гайд о константах, Там в принципе описаны все возможные способы создания констант, а их много. И самое главное, есть раздел Handling Your Constants in a Real-World Project, то что тебе и нужно, а не просто "знакомство". Ресурс в python среде пользуется репутацией, его даже в продвинутых книгах упоминают.
    https://realpython.com/python-constants/
    Ответ написан
    4 комментария
  • Как исправить AttributeError: 'NoneType' object has no attribute?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну у тебя метод apples не имеет инструкции return соответственно возвращает None. То есть вот в этой строчке tree.apples().total() после выполнения apples() у тебя в результате объект None. А объект None не имеет метода total. О чем и говорит ошибка. Метод total это метод экземпляра класса Tree. tree.total() Соответственно, что бы изменить атрибут экземпляра класса и затем вывести его на печать, согласно твоему объявлению класса, то вот так.
    tree = Tree()
    tree.apples()
    tree.total()
    Ответ написан
    7 комментариев
  • Как параметр в лямбде соотносится с параметром в функции?

    Maksim_64
    @Maksim_64
    Data Analyst
    lambda - это безымянные функции.
    например
    f = lambda x: x**2
    print(f(4))
    выведет 16. f - это указатель на безымянную функцию с одним параметром.
    Тоже самое и в твоем коде твоя функция myfunc, возвращает безымянную функцию, твой n подставит выражение и вернет функцию. lambda a:a*2 дальше как в пример выше ты вызываешь свою функцию с аргументом a=11 и получаешь 22.

    Эта лямбда стоит после оператора return функции myfunc, то есть myfunc возвратит то, что вычислится в результате выполнения лямбды.
    Вот здесь ошибка в твоей логике. Он вернет функцию а не вычислит ее только вместо n ,будет параметр из myfunc.
    Ответ написан
    1 комментарий
  • Ошибка NameError: name 'np' is not defined?

    Maksim_64
    @Maksim_64
    Data Analyst
    Попробуй установить если не установлен numpy и импортировать его import numpy as np
    Ответ написан
    Комментировать
  • Обучение модели машинного обучения прерывается без ошибки. Что может быть причиной и как это решить?

    Maksim_64
    @Maksim_64
    Data Analyst
    Я тоже читал эту книгу, класс книга. В colab запускал? У тебя там не заглушены сообщения об ошибках или предупреждениях? Ну а так остается только экспериментировать попробуй learning rate ему поменять. Попробуй optimizer поменять. Например увеличил вдвое batch_size, увеличь вдвое и learning rate. Скорее всего схождения не происходит, точнее происходит но слишком медленно, ну и видимо, notebook подвисает или там какая нибудь остановка предусмотрена. Одназначно увеличивай learning rate (линейно с увеличением batch), после того как в colab попробуешь, конечно.
    Ответ написан
  • Как сделать чтобы на атрибут users ссылались не отдельно, а вместе?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код ты поленился, редактировать, а ответов хочешь. Во первых используй атрибуты класса, а не экземпляра класса. Во вторых переопределять __del__ плохая идея (который ты кстати с ошибкой написал __dell__). Ты ожидаешь что del вызывает __del__ нет это не так. del понижает количество ссылок на один на объект и в случае если их стало 0 то произойдет вызов. Например
    class A:
        def __del__(self):
            print('Hello')
           
    a = b = A()
    del(a)
    del(b)
    Удалили ссылку, но есть еще одна и вызова __del__ не происходит. Только, когда ссылок 0 и сборщик мусора сделал свою работу произойдет вызов. Или второй пример.
    class A:
        def __del__(self):
            print('Hello')
    a = A()
    a = 4
    Я вообще del не вызывал, а __del__ вызвался. del не вызывает __del__. Так что заводи, счетчик, как атрибут класса и его увеличивай на один при создании экземпляра класса или понижай определи ему метод delete_user какой-нибудь.
    Ответ написан
    Комментировать
  • Как построить диаграмму в Python по массиву?

    Maksim_64
    @Maksim_64
    Data Analyst
    Какой именно график, интересует? Я не знаю что ты читал, но построить элементарно. matplotlib, seaborn, например.
    import matplotlib.pyplot as plt
    import numpy as np
    a = np.array([2, 2, 2, 1, 2, 1, 1, 2])
    unique, counts = np.unique(a, return_counts=True)
    unique_strings = [str(digit) for digit in unique]
    plt.bar(unique_strings, counts)
    plt.show();
    А так заходишь в галерею matplotlib и просто берешь кокретные примеры.
    Ответ написан
  • Как исправить данные ошибки Python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну смотри, как тебе помочь в слепую на этом коде я не знаю, у меня нету возможности дебажить. Смотри,

    1. Ты создаешь словарь summary, где ключи это элементы массива cats, а значения pandas фреймы, (Нормальный ход, так делают).

    2. Затем ты обращаешься к ключу сначала словаря, а затем выбираешь подсет фрейма и меняешь его. Подсет фрейма надо выбирать методом loc[index, column]. Посмотри в документации. Key Error может , как ключи словаря давать, так и индексы фрейма тоже key error могут давать, если их там нет.

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

    4. CountVectorizer это scikit-learn посмотри там examples, они там супер, рассмотри так же использование Pipeline, на чистом pandas весь процесс не пишут. То есть всю последовательность трансфлормаций собирают в Pipeline, ты в своем коде еще не дошел до тестового сета, но применит трансформации на тестовых данных сам при чем правильно, если все свои трансформации чейнить в Pipeline.
    Ответ написан
  • Как достать с pdf файла (с ссылки на pdf)?

    Maksim_64
    @Maksim_64
    Data Analyst
    Для таких задач тебе нужно спарсить этот pdf в pandas фрейм. Тогда твоя задача доставать из этой таблицы любые данные становится весьма тривиальной (В худшем случае несколько строк кода). Можно создать фрейм и используя твою библиотеку PyPDF2, но я предпочитаю tabula мощный парсер pdf таблиц (и он их парсит в фрейм по умолчанию), там возится особо не придется. https://tabula-py.readthedocs.io/en/latest/ там обрати внимание, нужно будет java поставить.

    Гугли pdf table to pandas dataframe. И вперед вручную перебирать таблицы не нужно. Есть подходящие инструменты, которыми ты можешь и быстро и легко осуществлять выборки любой сложности.
    Ответ написан
  • Почему не дополняются значения в return?

    Maksim_64
    @Maksim_64
    Data Analyst
    это не обычное сложение, а сложение и присваивание self._balance += amount эквивалентно. self._balance = self._balance + amount. Ты можешь потенциально использовать такую форму с := (walrus) оператором. и код будет выглядеть вот так
    return (self._balance := self._balance+ amount) скобки здесь обязательны. С обычным присваиванием так нельзя.

    Отредактировано ошибочка вышла Мы не можем использовать walrus оператор, с атрибутами экземпляра класса. Кстати, это интересно, он выдает SyntaxError: cannot use assignment expressions with attribute. Я ожидал, что это будет NameError. Вот уже удивительно, век живи век учись.
    Ответ написан
    9 комментариев
  • Как в одну строчку сосчитать сумму произведения ключей и значений?

    Maksim_64
    @Maksim_64
    Data Analyst
    sum(float(key.value)*value for key,value in self._testes.items())


    или если хочешь в Decimal ответ то убери float.
    Ответ написан
    1 комментарий
  • В чем логика решения задачи Флавия?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вот маленькая статья на хабре по твоей задаче. Там нет такого кода, как у тебя. Еще и комментарии полезные имеются.
    Ответ написан
    Комментировать
  • Как работает в данном примере декорирование?

    Maksim_64
    @Maksim_64
    Data Analyst
    Не очень понятно, а что не понятно. Передается объект класса в функцию, ты зачем назвал параметр функции func а передаешь туда объект класса. Вот здесь result = func(*args, **kwargs) ты инициализируешь экземпляр класса, затем возвращаешь его да и все, MyClass у тебя стала функцией которая возвращает экземпляр класса. Ну добавь там чего нибудь например.
    def f():
        return 100
        
    def decor(func): 
        def _wrapper(*args, **kwargs):
            result = func(*args, **kwargs)
            result.complex_calculation = f
            return result
        return _wrapper 
    
    class MyClass:
        def complex_calculation(self):
            return 42
    
    MyClass = decor(MyClass)
    
    my_obj = MyClass()
    
    print(my_obj.complex_calculation())

    Твой метод вернет, не 42, а 100. Или объяви метод какой-нибудь которого нет.
    Ответ написан
  • Python. a = b = Class() - что это?

    Maksim_64
    @Maksim_64
    Data Analyst
    В первом случае две ссылки cur и dummy указывают на один и тот же объект ListNode(0). В случае если ListNode(0) это мутабельный объект то изменения в cur приведут к изменению в dummy и наоборот. То есть создается один объект и два указателя на него.

    Во втором случает создается два объекта с идентичным значением. И к каждому по указателю. Я на пример списков сейчас продемонструю.

    l1 = l2 = [1,2,3]
    print("Это список l1:", l1)
    print("Это список l2:", l2)
    l1.append(4)
    print("В список l1 добавили 4:", l1)
    print("Это список l2 и он изменился тоже:", l2)


    а теперь второй кейс
    l1 = [1,2,3]
    l2 = [1,2,3]
    print("Это список l1:", l1)
    print("Это список l2:", l2)
    l1.append(4)
    print("В список l1 добавили 4:", l1)
    print("Это список l2 и он не изменился:", l2)
    Ответ написан
    Комментировать
  • Как список кортежей превратить в строку?

    Maksim_64
    @Maksim_64
    Data Analyst
    На случай если в кортеже может быть больше одного элемента
    from itertools import chain
    l = [('monkey',), ('dog',), ('cat',), ('fish',)]
    ', '.join(chain(*l))
    Ответ написан
    Комментировать
  • Как устранить ошибку генератора?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну что-то совершенно, не читабельное ты написал. В python генераторами принято называть функции которые возвращают итераторы используя yield. То есть любая функция которая содержит yield называется генератором.

    Твой "генератор" пытается заполнить массив значениями и к генераторам не имеет отношения от слова совсем.

    from field import field это не хорошо. Если тебе нужна переменная из другого модуля то import field затем field.field в том модуле куда импортировал.

    Это я так глазами пробежался, если вникать много чего еще выйдет.

    что касается непосредственно ошибки. То где то в коде ты вместо создания экземпляра класса создал ссылку на объект класса и затем у этого объекта пытаешься найти атрибут. Что бы было понятнее приведу пример.

    class A:
    
        def __init__(self,x):
            self.x = x
    a = A
    print(a.x)
    Выдаст точно такую ошибку. Нужно вместо a=A, написать a=A() со всеми параметрами, или на прямую ты обращаешься к объекту класса а атрибут у тебя экземпляра класса, то есть вот так.
    class A:
        def __init__(self):
            self.x = 'Hello'
    print(A.x)

    Ищи где у тебя в коде такое, а лучше начни писать весь свой код заново.
    Ответ написан
  • Почему DB browser for sqlite и питон выдают разные результаты запроса?

    Maksim_64
    @Maksim_64
    Data Analyst
    контекстный менеджер делает commit но не закрывает базу. То есть ты должен закрывать соединение самостоятельно close(). https://docs.python.org/3/library/sqlite3.html#sql...
    например
    import sqlite3
    con = sqlite3.connect("tutorial.db")
    cur = con.cursor()
    cur.execute("CREATE TABLE movie(title, year, score)")
    cur.execute("""
        INSERT INTO movie VALUES
            ('Monty Python and the Holy Grail', 1975, 8.2),
            ('And Now for Something Completely Different', 1971, 7.5)
    """)
    #con.commit()
    print(cur.execute("SELECT * FROM movie").fetchall())

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

    То есть у тебя только один commit (не явный посредством контекстного менеджера коммитит все что в теле контекстного менеджера) и два insert (второй то вне тела контекстного менеджера), соответственно последний insert не записывается в базу.

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

    Maksim_64
    @Maksim_64
    Data Analyst
    выполнять до те пор пока:
    l не равно k или l не равно km или lm не равно k или lm не равно km
    То есть если хотя бы одно из вышеперечисленных условий истинно выхода не произойдет.
    сделай print каждой переменной и посмотри, как минимум одно из твоих условий истинно, и выхода из цикла не происходит.

    если у тебя в твоих условиях или (or) и в списке хоть один True, то общее выражение будет True.
    Ответ написан
    1 комментарий
  • Как быстро распарсить много json файлов на python?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну во первых, pandas read_json и json_normalize (для вложенных json). Затем этот фрейм или подсет фрейма отправляешь в базу, методом to_sql если все делаешь правильно с точки зрения pandas (весь код будет без единого цикла) то это ускорит очень серьезно. Еще больше можно ускорить библиотекой polars она имеет схожий синтакс с pandas у ней куда меньший функционал по манипуляции данных, но она фокусируется на скорости в том числе и чтения файлов.

    Думаю скорости pandas будет достаточно, если нет то polars. Начать лучше с pandas документация очень хорошая, да и кода всего ничего будет.
    Ответ написан
    1 комментарий