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

    @kamenyuga
    Стандартный питонячий подход - обернуть вызов функции в лямбда-функцию:

    btn = ttk.Button(Button-1, lambda x=1, y=2: func(x, y))
    Ответ написан
  • Как занести данные в таблицу?

    @kamenyuga
    Тут явно проблемы в логике сравнения наборов значений. Зачем 2 цикла вместе с оператором in? Что-то явно лишнее - либо оператор, либо один из циклов. А то проверяется наличие строки в строке, а не в наборе строк.

    Вот пример исправления:
    # хотим отобрать фильмы с такими жанрами - хотя бы одним, но не обязательно всеми сразу
    genres_to_look_for = ['Drama', 'Crime']
    
    # вот набор фильмов и их жанров
    movies_and_genres = {
        1: ['Drama', 'Action', 'Crime', 'Thriller'],
        2: ['Drama'],
        3: ['Drama'],
        4: ['Comedy']}
    
    # для каждого фильма проверяем наличие у него искомых жанров (хотя бы одного)
    # если any заменить на all, то будет проверяться одновременное наличие всех искомых жанров
    movies_filtered = {
        movie: any((genre in genres) for genre in genres_to_look_for)
        for movie, genres in movies_and_genres.items()
        }
    
    print(movies_filtered)


    Получаем {1: True, 2: True, 3: True, 4: False} - прямо то, что надо, согласно моему пониманию задачи - в первых трех есть жанр drama, последний в пролете. А если использовать all, то получится {1: True, 2: False, 3: False, 4: False}.
    Ответ написан
    5 комментариев
  • Почему не срабатывают некоторые параметры pandas.read_excel?

    @kamenyuga
    convert_float - в pandas тип одинаков для всех значений в столбце - в столбце есть значение, которое нельзя преобразовать в int. Чаще всего такое бывает, когда в столбце пропущено значение, т.к. пустое значение - это нампаевский NaN типа float.

    parse_dates - передается список номеров или названий столбцов, которые необходимо распарсить в дату - отдельные столбцы или группы столбцов, если дата распределена по нескольким.

    date_parser - дефолтный парсер нормально работает, хотя и сильно увеличивает время загрузки данных. Имеет смысл парсить даты отдельно после загрузки, если объем большой.
    Ответ написан
    5 комментариев
  • Цикл for оставляет лишь последнюю строку из массива. Почему?

    @kamenyuga
    Работает ровно так, как и должно. Ибо Пайтон - язык динамический. Чтобы разобраться в проблеме, надо понимать как именно работают функции и их аргументы. (1) обычные аргументы резолвятся во время вызова функции, (2) дефолтные аргументы резолвятся во время определения функции, (3) нелокальные переменные внутри функции резолвятся во время работы функции (ищутся во внешнем или глобальном пространствах имен). Не соображу, какое слово подобрать вместо "резолвятся". Вот третий вариант и работает в приведенном коде, а должен работать второй.

    Следовательно, надо писать не так:
    lambda c: c.data == food

    а вот так:
    lambda c, food=food: c.data == food

    Ну, и простой пример для воспроизведения такого эффекта:

    from typing import List
    
    
    def f_1(lst: List) -> None:
    
        funcs = list()
        for val in lst:
            funcs.append(lambda: val)
        # цикл закончился, val имеет значение последнего элемента из списка
    
        for func in funcs:
            print(func())
    
    
    def f_2(lst: List) -> None:
    
        funcs = list()
        for val in lst:
            funcs.append(lambda val=val: val)
    
        for func in funcs:
            print(func())
    
    
    if __name__ == '__main__':
    
        data = ['apple', 'tomato', 'potato']
    
        print("\nf_1:")
        f_1(data)
    
        print("\nf_2:")
        f_2(data)
    Ответ написан
    Комментировать
  • Как создать сайт, чтобы в нем можно было программировать на python?

    @kamenyuga
    Годный пример реализации такой идеи - https://py3.codeskulptor.org/. Проект создан на основе https://skulpt.org/.
    Ответ написан
    Комментировать
  • Есть ли Python задачник?

    @kamenyuga
    Вот, например, бесплатный русскоязычный курс по основам Пайтона с большим количеством задач на курсэре: https://www.coursera.org/learn/python-osnovy-progr...

    Задачи, в основном, - это небольшие и несложные математические головоломки на базовый синтаксис Пайтона. Решения можно проверить также бесплатно в онлайн режиме.

    Там же есть набор курсов https://www.coursera.org/specializations/computer-... по основам разработки игр, структурам данных и алгоритмам - на Пайтоне, бесплатно, полностью в браузере, на английском языке. Так как бесплатно, то каждый курс надо брать отдельно, а не все вместе. Непосредственно задач на практику меньше, но дают много ссылок на всякие интересности, можно самому себе придумать практических упражнений в неограниченном количестве.

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