• Можно ли выучить python с помощью приложения учим python с практикой?

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

    @fireSparrow
    Я использую Anki - это программа, которая изначально была создана для запоминания слов иностранных языков.
    Очень удобно - в метро каждое утро трачу 10 минут на повторение.
    Anki хороша тем, что в ней реализован принцип интервального повторения. То есть, в первые дни каждую заучиваемую единицу программа показывает каждый день, а потом, если она хорошо усвоилась - всё реже и реже.
    Таким образом можно выучить и поддерживать в активной памяти большой массив информации, затрачивая совсем немного времени.

    Всё подряд заучивать смысла нет, но существует широкий пласт методов, функций и классов, которые с одной стороны достаточно универсальны, чтобы оказаться полезными в очень разных задачах, но при этом в повседневной работе мало используются.
    Ответ написан
    2 комментария
  • Как работает позднее связывание в Python?

    @fireSparrow
    Чтобы такого не происходило можно сделать так:

    def multipliers():
      return [lambda x, i=i: i * x for i in range(4)]
        
    print([m(2) for m in multipliers()]) # [0, 2, 4, 6]


    или так

    def multipliers():
      return (lambda x: i * x for i in range(4))
        
    print([m(2) for m in multipliers()]) # [0, 2, 4, 6]


    Второй вариант в данном случае мне нравится больше.
    Но первый - универсальное решение для всех подобных проблем с лямбдой.
    Ответ написан
    Комментировать
  • Какой есть быстрый курс Python для программиста?

    @fireSparrow
    pythonworld.ru - совсем основы
    programming086.blogspot.ru/2015/12/python-2015.html - хороший курс лекций для тех, кто уже программировал на других языках
    https://habrahabr.ru/post/205944/ - большая подборка хороших статей
    Ответ написан
    Комментировать
  • Почему filter работает не так как ожидается?

    @fireSparrow
    Написал ответ и только потом заметил, что вы немного изменили вопрос. Но решил ответ не менять.

    В третьей строчке (где фильтруется source), я обернул фильтр в list().
    Вот так:

    source = list(filter(lambda x: x in caps, source))

    И у меня всё заработало.

    Не уверен, но сильно подозреваю, что дело вот в чём:

    filter() сам по себе возвращает не список, а объект типа "фильтр". То есть там пока ещё не сама отфильтрованная последовательность, а только инструкции о том, что и как фильтровать.
    И после этого вы меняете caps, который участвует в фильтрации. Соответственно, фильтрация будет происходить уже по-другому.

    Я немножко погонял фильтр на похожих примерах - похоже, моя догадка верна.
    Если в фильтре в лямбде мы проверяем присутствие переменной в списке, а потом меняем список, то фильтр будет работать уже по-другому.
    Ответ написан
    1 комментарий
  • Как построить цикл при множественном переборе элементов?

    @fireSparrow
    Перечитал вопрос у удалил свой предыдущий коммент.

    Режем исходную строку на два списка.
    В первом - первое слово строки. Во втором - все остальные слова.

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

    @fireSparrow
    Имхо, универсального доказательства здесь не может быть.
    Только для каких-то конкретных категорий задач, для каждой - своим способом.
    Ответ написан
    Комментировать
  • Какая разница между строковыми методами в Python с двойным подчеркиванием и без?

    @fireSparrow
    Методы с двойным подчёркиванием не предназначены для непосредственного вызова. То есть сделать так можно, но особого смысла в этом нет.

    Эти методы (их называют "волшебными") в основном служат для переопределения стандартного поведения объектов на уровне классов.
    Более подробно можно легко загуглить по запросу "волшебные методы python".
    Ответ написан
    Комментировать
  • Как расчитать угол поворота объекта?

    @fireSparrow
    Нужно знать координаты самого объекта (если они отличны от нулевых).

    Тогда можно будет вычислить длинны всех сторон треугольника.
    А по известным трём сторонам, можно найти любой из углов.

    Формулу смотри здесь:
    planetcalc.ru/534
    Ответ написан
    Комментировать
  • Бесплатные он-лайн курсы по Python для начинающего, есть ли достойные?

    @fireSparrow
    Мне очень нравится вот этот цикл лекций:
    https://habrahabr.ru/company/spbau/blog/280426/

    А чтобы они проще укладывались в голове, можно предварительно прочитать вот это:
    pythonworld.ru/samouchitel-python
    там кратко и ёмко даны основы для совсем уж начинающих
    Ответ написан
    Комментировать
  • Почему Python оборачивает элементы списка в кортежи?

    @fireSparrow
    В первых трёх строках запятые не нужны.

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

    Т.е. писать нужно так:

    fio = {}
    age = {}
    date = {}
    diagnoz = {}

    Кстати, переменная diagnoz - это вы какую-то медицинскую систему пишите? Я просто сам в медицинском центре работаю :))
    Ответ написан
    1 комментарий
  • Как передать список в качестве аргумента функции?

    @fireSparrow
    Звёздочка в данном случае - это распаковка. Её нужно использовать в противоположной ситуации - когда нужно передать не сам список, а его элементы в качестве отдельных аргументов.

    Чтобы передать сам список, никаких дополнительных трюков не нужно. Если вы просто напишете его имя, это сам список и будет.
    Ответ написан
    2 комментария
  • Как правильно заполнять список словарей?

    @fireSparrow
    Это не баг, так и должно быть.
    Советую вам почитать про типы данных в питоне - иначе вы регулярно будете натыкаться на такие "баги".

    Суть в том, что все типы данных делятся на изменяемые и неизменяемые, и они при присваивании будут вести себя по-разному.

    Для изменяемых типов данных при присваивании вы НЕ копируете в переменную содержимое другой переменной, а просто передаёте в неё ссылку на ту же область памяти.

    То есть, если вы делаете так:

    a = {какой_то_словарь}
    b = a

    то и b, и a будут ссылаться на одну и ту же область памяти, и когда вы меняете один из этих словарей, второй будет меняться точно так же. Потому что на самом деле это один и тот же словарь, просто под двумя разными именами.

    С методом append это работает аналогично - то есть он не делает копию словаря, добавляя её в список, а просто ТОТ ЖЕ словарь зачисляет в список.

    Как уже написали выше, нужно принудительно делать копию словаря, а потом уже её вставлять в список.
    Но, имхо, надёжнее использовать не copy(), а deepcopy().
    Ответ написан
    Комментировать