Freecodecamp: Учебная программа по Python [Обсуждение]

Созданный на 25 апр. 2017  ·  56Комментарии  ·  Источник: freeCodeCamp/freeCodeCamp

Учебная программа Python

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

Для любого обсуждения интеграции REPL.it Classroom, пожалуйста, посетите https://github.com/freeCodeCamp/freeCodeCamp/issues/14736.

В настоящее время мы работаем над запуском проверяемого набора тестов Python для виджета iframe Repl.it. Как только мы получим это работать, мы начнем реализовывать изложенный учебный план, определенный в этом потоке. Если вы заинтересованы в разработке этой части учебной программы FCC по Python, напишите мне (Итану Эрровуду) в Gitter или оставьте комментарий ниже.

Обратите внимание на то, чтобы писать все задачи Python в версии 3.6.



Текущая структура учебной программы FCC Python следующая: раздел для начинающих, раздел среднего уровня и раздел по специальной теме.

Начальный раздел:

  • [] Введение в Python
  • [ ] Вывод

    • Распечатать

    • Персонажи побега

    • ввод

  • [ ] Типы данных

    • Целые числа, числа с плавающей запятой

    • Струны

    • Кортежи

    • Списки

    • Наборы

    • Словари

  • [] Операторы

    • +, -,, /,%, *

    • <,>, <=,> =, ==,! =

    • знак равно

    • Верно, Ложь и, или нет

    • в, а не в

    • это не

  • [x] Математика - @bgroveben

    • Сложить, вычесть, умножить, разделить

    • Мощность, sqrt (), abs (), round (), sum (), max (), min ()

  • [] Переменные
  • [] Условные выражения

    • если, Элиф, еще

  • [] Петли

    • в то время как для (в диапазоне), для (в списке), для (в строке)

  • [] Функции
  • [] Классы

Промежуточный раздел:

  • [] Файловый ввод-вывод
  • [] Итераторы и генераторы
  • [x] Лямбда - @robbiemu
  • [] Условные выражения
  • [] ООП
  • [] Модули, библиотеки, пакеты
  • [] Файл и обработка ошибок
  • [] Расширенные объекты и типы данных
  • [] Форматирование печати
  • [] Список понятий
  • [] Декораторы

Раздел специальной темы:

  • [ ] Машинное обучение
  • [] Разработка игр
  • [] Веб-сканирование (BeautifulSoup)
  • [] ГИС (буклет / фолиант)
  • [] Flask / Django (лучше сосредоточиться на одном, а не на обоих)
  • [] Анализ данных (Panda / Numpy)
  • [] Визуализация данных (сломано)
  • [] GUI (tkinter)
  • [] Геокодирование (геопия)
  • [] Набор средств естественного языка (NLTK)

Есть идея для секционного урока?

Прокомментируйте ниже и укажите, в какой раздел он должен быть добавлен и почему.

Хотите разработать учебный план урока?

Прокомментируйте ниже следующие детали:

  • заглавие
  • Описание / Пояснение / Урок
  • Подсказка по коду / вызов
  • Предустановленный код
  • Решение
  • Тесты

Хотите внести изменения в существующий урок?

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



Скоро

-

Как предложить вызов Python

https://github.com/freeCodeCamp/freeCodeCamp/tree/feature/python-challenges

Предлагаете задачу Python?

Самый полезный комментарий

Привет, ребята, я основатель / генеральный директор Repl.it. FCC близок и дорог нашим сердцам, поэтому мы сделаем все, что в наших силах, чтобы поддержать здесь. Каковы основные препятствия на пути внедрения учебных заведений Repl.it для этого?

Все 56 Комментарий

Вот что мы можем добавить:
Новичок

  • Условные

Средний:

  • Итераторы и генераторы
  • Лямбда
  • Условные
  • ООП
  • Модули, библиотеки, пакеты
  • Файл и обработка ошибок
  • Расширенные объекты и типы данных
  • Форматирование печати

Продвинутый:

  • Веб-сканирование (BeautifulSoup)
  • ГИС (буклет / фолиант)
  • Flask / Django (я бы больше склонялся к Django)
  • Анализ данных (Panda / Numpy)
  • Визуализация данных (разорение)
  • Графический интерфейс (tkinter)
  • Геокодирование (геопия)

@mstellaluna Спасибо за ваши рекомендации. В чем будет разница между условным разделом для начинающих и условным разделом среднего уровня?

@ Ethan-Arrowood для меня основы должны быть просто минимальными знаниями (если, иначе, для чего). Моя запись для "условного" в промежуточном будет состоять из условных операторов, основанных на вводе пользователем или тернарных операторах .. то же самое для форматирования печати ... базовым будет простой оператор печати, тогда как промежуточный мы можем ввести операторы печати с переменными,% s. . и т.д

Repl.it имеет новую область для создания пользовательских классов. Вы можете создавать задания с инструкциями.

Repl.it Классы
https://repl.it/site/classrooms

Список классов сообщества
https://repl.it/community

Я предлагаю добавить разделы базового, среднего и продвинутого алгоритмов (аналогично тому, что есть в учебной программе FCC Front End для JavaScript).

Я посмотрел на приведенный пример FCC-Python-Variable-Challenge и заметил, что задача требует некоторого знания «предварительных требований». Как будто кемпер раньше был знаком с переменными.

Описание / объяснение для запроса переменных не объясняет, что такое переменные. В отличие от задачи JavaScript

Я знаю, что это всего лишь пример - но на всякий случай - будем ли мы предполагать, что турист уже прошел курс обучения JavaScript при создании учебного плана Python?

@jamesperrin: Да, мы

@ U-Way Да, это была моя ошибка. Цель состоит в том, чтобы это был независимый учебный план, поэтому фактические объяснения будут намного более подробными (как версия JS). Спасибо, что выделили это :)

@AnikaErceg, это будут отличные практические разделы. Обязательно буду иметь это в виду. Спасибо!

@ Ethan-Arrowood Возможно, вы захотите включить набор инструментов для естественного языка.

Я добавил понимание списка в промежуточный

Как насчет декораторов под продвинутыми? Я предполагаю, что контекстные менеджеры появятся во время обработки файлов?

@ t3h2mas Я ставлю декораторы под промежуточные.

Если вы добавили for (in list) , возможно, вы также могли бы добавить for (in string) ?
Кроме того, было бы неплохо познакомиться с оператором in (я знаю, что мне стало легче, когда я обнаружил, что его не нужно использовать только с циклами for : smiley:).

@AnikaErceg хорошее предложение. Готово. Я добавил, что есть и нет.

@ginoskotheon Вы забыли добавить for (in string) под петли или не видите смысла вводить это? : смайлик:

Я разработчик, первым языком которого был Python ... Я уже помогал с местным отделением FCC, и организатор предложил мне помочь с новой учебной программой. Я не уверен на 100%, как начать вносить свой вклад, но я определенно хотел бы это сделать. Я также довольно активен в сообществе Python, как локально, так и в целом, поэтому я могу получить много знающих глаз, когда это необходимо.

Мои первые предложения:

  • [] сделайте так, чтобы все примеры следовали PEP 8
  • [] логический урок должен быть в 'типах данных' вместе с 'истинными' и 'ложными' значениями
  • [] некоторые стандартные библиотеки должны быть включены где-то ( itertools , collections )
  • [] могут быть включены некоторые базовые библиотеки ( requests , scrapy и т. д.)
  • [] Я не уверен, что означает «escape-последовательности» в «Output», но если это относится к строкам стиля %s .... оставьте это для «устаревшего материала, с которым вы можете столкнуться, но не действительно нужно побеспокоиться о разделе и просто научить новому стилю f и .format() style строкам.
  • [] в разделе цикла упоминаются range , list и 'строка', как будто они все разные, но в Python все они повторяются, поэтому вы можете перебирать их одним и тем же ключевые слова. Возможно, это можно будет затронуть в разделе «Итераторы и генераторы».

    • [] enumerate()

  • [] менеджеры контекста должны быть где-то упомянуты.
  • [] там может быть расширенный раздел для asyncio
  • [] Традиционно PEP 20 преподается где-то в начале вместе с некоторыми примерами spam и eggs .
  • [] тесты
  • [] virtualenvs
  • [] установка
  • [ ] Комментарии
    Я был бы более чем счастлив помочь с этим проектом любым возможным способом. Я долго думал, что нам нужно что-то вроде этого.

@cldershem Так много замечательных предложений, спасибо! С вашим опытом лучший вклад, который вы можете внести, - это написание самих уроков / задач. Дайте мне знать, какие из них вам было бы интересно написать 😄

@cldershem

Я не уверен на 100%, как начать вносить свой вклад, но я определенно хотел бы это сделать.

https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/Pull-Request-Contribute

Может указать вам правильное направление.

Может быть, @ Ethan-Arrowood также будет принимать материалы через комментарии Github?

@ t3h2mas Да, как я уже сказал в самом главном отправить задание на урок / задание можно прямо здесь, в этой ветке, в качестве комментариев 😄

@cldershem Другой способ, которым вы можете помочь, - это если вы знаете хороший способ создать задачу в браузере, которую действительно можно протестировать (с помощью unittest). Мы изучаем всевозможные варианты от REPL.it до codeMirror to Skulpt.

@cldershem Мне, наверное, следует написать "escape-символы". Это такие вещи, как '\ n', '\ t' и т. Д.

И я знаю, что они повторяемы, но я начинаю разбивать вещи на отдельные уроки для укуса.

Кстати, спасибо за все предложения и всю помощь. Я планирую поработать над образцом урока / задания на выходных, и, надеюсь, он может стать своего рода шаблоном для других. Если вы хотите разобраться в уроке / вызове, который функционирует аналогично тому, как работают задачи Free Code Camp, опубликуйте свой код. Я бы хотел это увидеть.

@ Итан-Эрровуд @ginoskotheon @cldershem
Я также хотел бы помочь написать уроки и задачи для курса FCC-Python.
Из предыдущих комментариев я вижу, что Repl.it Classrooms - не лучший выбор, но я могу начать работу над уроками (название, описание, тесты и т. Д., Описанные выше) там. После того, как платформа / фреймворк выбраны, я всегда могу изменить код и переместить его.
Я написал несколько примеров упражнений, которые вы можете найти здесь ; вы должны иметь возможность их видеть, но вы должны войти в систему, чтобы импортировать их, заглянуть под капот и изменить их.
Пожалуйста, не стесняйтесь комментировать, критиковать и изменять сами уроки, а также сообщите мне, когда будет выбрана более подходящая платформа / фреймворк.
А пока я могу работать над уроками для начинающих, описанными выше, начиная с математики и переходя ко всему, что еще нужно сделать.

Привет, ребята, я основатель / генеральный директор Repl.it. FCC близок и дорог нашим сердцам, поэтому мы сделаем все, что в наших силах, чтобы поддержать здесь. Каковы основные препятствия на пути внедрения учебных заведений Repl.it для этого?

@amasad привет! Рад видеть тебя здесь 😄
Основное препятствие, с которым мы сталкиваемся при внедрении Repl.it в курс FCC Python, - это взаимодействие с модульными тестами Repl.it Classroom. Нам нравится структура Repl.it Classroom, позволяющая запускать независимый файл с модульными тестами; однако мы не можем понять, как узнать, когда пользователь завершает задачу (проходит все модульные тесты). Конечно, это поведение встроено в Repl.it, но для того, чтобы сохранить ощущение текущего FreeCodeCamp, мы хотели бы иметь возможность автоматически продвигать пользователя к следующему испытанию (или предлагать ему это сделать) после того, как он завершит текущая задача (т.е. успешно пройти все модульные тесты).

Есть идеи, как это реализовать? FCC написан на JavaScript, поэтому любой модуль web api или npm будет работать очень хорошо.

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

// javascript
var dict = {
    a : 1
};

console.log(dict.a)
# python
dict = {
    "a" : 1
}

print(dict["a"])

Другой пример - цикл по словарю или массиву с помощью циклов for. Это все время сбивает меня с толку.

_Title_ Введение в лямбды

_Описание / Объяснение / Урок_
srcs:

1 http://stackoverflow.com/questions/890128/why-are-python-lambdas-useful
2 http://www.secnetix.de/olli/Python/lambda_functions.hawk
3 https://pythonconquerstheuniverse.wordpress.com/2011/08/29/lambda_tutorial/
4 http://stackoverflow.com/questions/16501/what-is-a-lambda-function
5 https://en.wikipedia.org/wiki/Anonymous_function

«Анонимная функция (функциональный литерал, лямбда-абстракция) - это определение функции, не привязанное к идентификатору». [5] Слово «лямбда происходит от лямбда-исчисления» [4]. В python лямбда - это ключевое слово для определения анонимной функции. Используя ключевое слово lambda вместо ключевого слова def , базовая лямбда выглядит следующим образом: lambda x: x**2 Их можно назначать переменным и повторно использовать во многом аналогично функциям:

>>> def f (x): return x**2
>>> print f(8)
64
>>> g = lambda x: x**2
>>> print g(8)
64

_src 2_

Наиболее распространенные варианты использования - сделать код коротким и читаемым вместо разделения определения и использования, как в этом примере:

def __init__(self, parent):
    """Constructor"""
    frame = tk.Frame(parent)
    frame.pack()

    btn22 = tk.Button(frame,
        text="22", command=self.buttonCmd22)
    btn22.pack(side=tk.LEFT)

    btn44 = tk.Button(frame,
        text="44", command=self.buttonCmd44)
    btn44.pack(side=tk.LEFT)

def buttonCmd22(self):
    self.printNum(22)

def buttonCmd44(self):
    self.printNum(44)

_src 3_

В этом графическом интерфейсе Tkinter функция должна быть передана атрибуту _command_. Функции названы числами, потому что они были созданы с помощью построителя RAD. Это нормально и функционально, но не очень разборчиво. Вы можете переименовать их, и это проясняет ситуацию, но если бы у вас было много кнопок, было бы неудобно искать нужную команду по коду, а поскольку они просто возвращают базовое значение, лучшим решением было бы определить тут же работают анонимно:

frame = tk.Frame(parent)
frame.pack()

btn22 = tk.Button(frame,
        text="22", command=lambda: self.printNum(22))
btn22.pack(side=tk.LEFT)

btn44 = tk.Button(frame,
        text="44", command=lambda: self.printNum(44))
btn44.pack(side=tk.LEFT)

_src 3_

Еще одна ключевая особенность такого использования заключается в том, что он также делает код короче, что означает, что он более доступен для программиста, когда он ищет инструмент как часть более крупного решения.

_Подсказка кода / вызов_
Напишите лямбда-выражение с ключевыми характеристиками, описанными выше; сделать код более разборчивым, переместив весь используемый код в одно и то же место; в результате получается более короткий и естественный код.

_Предопределенный код_

# only edit below this line
def y(z):
  return abs(5-z)

print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=y))

_src 1_

_Решение_
print(sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x)))

@robbiemu отличная работа! Мое единственное предложение - добавить комментарий в разделе «Предварительно определенный код» рядом со строкой печати, который говорит что-то вроде # only edit this line . Также я считаю, что это код Python 2, и мы собираемся обучать Python 3, поэтому я думаю, что единственное изменение - это строка печати, требующая обертывания '()'.
Спасибо Вам за Ваш вклад!

Итан, спасибо. Я продолжу над этим работать. Проблема и решение могут быть изменены, поэтому есть разумные тесты (без использования статического набора данных, как у меня здесь). Я хотел бы увидеть пример урока, как лучше всего это сделать.

@robbiemu конечно. Мы все еще работаем над REPL.it и обновим эту ветку, как только узнаем больше информации. Отличная работа

Это одна из проблем с кодом для раздела «Начинающий - математика», перечисленного в начале этой цепочки.

_Title_ - Абсолютное значение

_Описание / Объяснение / Урок_ -
Абсолютное значение указывает, насколько число отличается от нуля.
Если число отрицательное, функция abs () преобразует его в положительное.
В abs (x) x может быть целым числом, числом с плавающей запятой или комплексным числом.
https://docs.python.org/3/library/functions.html#abs
https://docs.python.org/3/library/stdtypes.html#numeric -types-int-float-complex

>>> abs(2)
2
>>> abs(-2)
2
>>> abs(-2.0)
2.0

_Подсказка кода / вызов_ -
Переменная absolute_value равна -42.
Измените absolute_value так, чтобы оно равнялось абсолютному значению -42.

_Предопределенный код_ -

absolute_value = -42

_Решение_ --

absolute_value = abs(-42)

_Тесты_ -

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(absolute_value, int)
        self.assertEqual(absolute_value, 42)

@bgroveben LGTM. хорошая работа!

@ Итан-Эрровуд Спасибо! Я также написал уроки для других базовых / математических задач, перечисленных выше. Я могу разместить каждого из них в этой теме, если хотите. Кроме того, я думаю, что было бы неплохо включить round (), sum (), max () и min () в уроки по основам математики - они пригодятся.

@bgroveben Я

@ Итан-Эрровуд

@amasad привет! Рад видеть тебя здесь 😄

Рад быть здесь 💃

Основное препятствие, с которым мы сталкиваемся при внедрении Repl.it в курс FCC Python, - это взаимодействие с модульными тестами Repl.it Classroom. Нам нравится структура Repl.it Classroom, позволяющая запускать независимый файл с модульными тестами; однако мы не можем понять, как узнать, когда пользователь завершает задачу (проходит все модульные тесты). Конечно, это поведение встроено в Repl.it, но для того, чтобы сохранить ощущение текущего FreeCodeCamp, мы хотели бы иметь возможность автоматически продвигать пользователя к следующему испытанию (или предлагать ему это сделать) после того, как он завершит текущая задача (т.е. успешно пройти все модульные тесты).

Есть идеи, как это реализовать? FCC написан на JavaScript, поэтому любой модуль web api или npm будет работать очень хорошо.

Самый простой - это запечь это. Сделайте настройку на стороне учителя, которая говорит «автопродвижение» или что-то в этом роде. (Мы не против добавления веб-перехватчиков и т. Д., Но для уменьшения сложности) Это сработает?

@amasad, используя функцию «автоматического продвижения», мы, несомненно, сможем эмулировать FreeCodeCamp в классе Repl.it, но мы все равно не сможем отслеживать прогресс пользователя на стороне FCC, что очень важно для ощущения FCC.

Как насчет функции, которая позволяет нам ПОЛУЧАТЬ / ОТПРАВИТЬ данные «Классной комнаты». Таким образом мы могли бы сделать что-то вроде:

repl.getUser('classroomID', 'userID').then( () => {
    // do stuff async 
}).catch( (error) => {
    // handle error
});

или еще лучше:

repl.getProgress('classroomID', 'lessonID', 'userID').then( () => { }).catch( (e) => { });

Теперь оба этих метода будут работать на нашей стороне, но поскольку REPL Classroom встроен через iframe, нам понадобятся, по крайней мере, несколько простых триггеров событий со стороны REPL, чтобы правильно отслеживать прогресс отдельного пользователя.

Кроме того, поскольку класс будет встроен через iframe, мы могли бы потенциально получить функцию, которая, когда пользователь завершает урок, REPL Classroom запускает некоторые строки JavaScript (которые мы можем определить через портал для учителей), чтобы мы могли заставить класс общаться с FCC?

Мы надеемся, что сможем использовать классы REPL не только для Python, но и для других языков. Как только учебный план FCC Python будет запущен и успешно запущен, мы перейдем к реализации таких языков, как Java или C ++ (или буквально любого языка, который REPL может предложить нам для использования!).

Я хотел бы узнать мнение @QuincyLarson по этому

Всем привет, большое спасибо за комментарии и предложения.

@amasad Спасибо, что

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

@ Ethan-Arrowood Отличная работа с инициативой. Спасибо за ваш тяжелый труд.

@amasad @QuincyLarson Я официально перенес обсуждение в классе REPL в эту ветку проблемы (согласно рекомендации https://github.com/freeCodeCamp/freeCodeCamp/issues/14736

вслед за комментарием cldershem (прокомментирован 8 дней назад), вот один для collections -

заглавие

именованные пары

Описание / Пояснение / Урок

1 https://en.wikipedia.org/wiki/Tuple
2 https://docs.python.org/3.6/library/collections.html
3 https://docs.python.org/3.6/library/collections.html#collections. namedtuple
4 https://pythonprogramming.net/reading-csv-files-python-3/

Кортеж - это понятие, распространенное в математике. Он считается конечным упорядоченным списком элементов. [1] В python они функционально похожи на словари, где ключи определены заранее. Именованные кортежи можно использовать для быстрого создания дерева свойств для любого использования: например, если ваше приложение должно иметь дело с носками, и все носки имеют размер и цену, тогда полезен кортеж с двумя полями, приближающий словарь {size: _size_, price: _price_} . Чтобы получить кортеж с этими полями, вы передаете их в фабричную функцию collections.namedtuple : [2]
collections.namedtuple(Socks, ['size', 'price'])
Для удобства, особенно при обработке информации из текстовых источников, имена полей могут быть массивом или отдельной строкой со значениями, разделенными запятыми и / или пробелами: [3]
EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')
Для _fieldname_ может использоваться любой действительный идентификатор Python, за исключением имен, начинающихся с символа подчеркивания. Допустимые идентификаторы состоят из букв, цифр и знаков подчеркивания, но не начинаются с цифры или подчеркивания и не могут быть такими ключевыми словами, как class, for, return, global, pass или raise. [3]
После создания их можно использовать для создания экземпляров со словарными записями:

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
p[0] + p[1] # 33
x, y = p # (11, 22)
p.x + p.y # 33
p # Point(x=11, y=22)

_из_ [3]

Подсказка по коду / вызов

Хорошее использование namedtuples - это облегчение приема данных, например, при экспорте в CSV из базы данных. В следующем коде исправьте этот импорт CSV с помощью кортежа.

Предустановленный код

import csv
import collections

# only change code below this line!
recordData = ['fieldNames'] # find the fieldnames in the code below
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        name = row[0]
        age = row[1]
        title = row[2]
        department = row[3]
        paygrade = row[4]

        processEmployee([name, age, title, department, paygrade]) # fails because processEmployee accepts an EmployeeRecord Tuple!
# only change code above this line!

_производится из_ [4]

_note_: в приведенном выше примере используется реальный файл, но мы можем заменить строки with ... readCSV чем-то вроде:
readCSV = csv.reader(['Alan,42,Manager,Sales, N1', 'Beth,38,Regional Director,Operations,CO','Robin,23,Associate,Sales,C2']

Решение

import csv
import collections

# only change code below this line!
recordData = ['name', 'age', 'title', 'department', 'paygrade']
# only change code above this line!
EmployeeRecord = collections.namedtuple('EmployeeRecord', recordData)

with open('employee-records.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
# onlt change code below this line!
        employee = EmployeeRecord(*row)

        processEmployee(employee)
# only change code above this line!

Урок 2:

заглавие

namedtuples._make

Описание / Пояснение / Урок

1 https://docs.python.org/3.6/library/collections.html#collections. namedtuple

Метод NamedTuples с именем __make_ облегчает создание экземпляров в функции итератора, что сделало бы проблему из предыдущего урока еще более краткой.
Это используется как:

for emp in map(EmployeeRecord._make, allRows):
    print(emp.name, emp.title)

Подсказка по коду / вызов

Мы пересматриваем предыдущий урок и исправляем код. Это почти готово, но работа еще не закончена. Для вашего удобства некоторые записи распечатаны там, где вы должны обрабатывать запись. Помните, что нам нужно создать EmployeeRecord и передать его функции в другом месте кода, например:

        employee = EmployeeRecord(*row)

        processEmployee(employee)

Предустановленный код

import csv
from collections import namedtuple

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    print(emp.name, emp.title)

Решение

EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

import csv
for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
# only change code below this line!
    processEmployee(emp)

Возможно, мы могли бы также использовать быстрые уроки, иллюстрирующие:

  • n = NamedTuple(**Dictionary)
  • использование ._fields для создания альтернативных форм: TwoD = namedtuple('TwoD', 'x y') => ThreeD = namedtuple('ThreeD', TWo._fields + ('z',))
  • охват основных вариантов использования: прием данных (например, csv), транзакции базы данных, сетевые транзакции, облегчение POJO (или .. POPOs - это вещь в Python? lol)

Вот остальные задачи по математике для начинающих:

__Title: __ Дополнение Python

__ Описание / Пояснение / Урок: __

В Python целое число (int) - это один из трех различных числовых типов.
В этом упражнении вы добавите два целых числа с помощью оператора плюс (+).

>>> 2 + 2
4

__Подсказка / запрос кода: __

Измените 0 так, чтобы сумма была равна 20.

__Предопределенный код: __

total = 10 + 0

__Решение:__

total = 10 + 10

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 20)

__Заглавие:__
Вычислить частное и остаток с помощью функции divmod ().

__ Описание / Пояснение / Урок: __

Divmod принимает два (не комплексных) числа в качестве аргументов и возвращает пару чисел, состоящую из их частного и остатка при использовании целочисленного деления.
Для целых чисел результат такой же, как (a // b, a% b).

>>> divmod(1, 1)
(1, 0)
>>> divmod(3, 2)
(1, 1)

__Подсказка / запрос кода: __

В этом упражнении для вас определены переменные a и b.
Определите переменную с именем result, которая вызывает функцию divmod для переменных a и b (в указанном порядке).

__Предопределенный код: __

a = 11
b = 3

__Решение:__

a = 11
b = 3
result = divmod(a, b)

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(result, tuple)
        self.assertEqual(result, (3, 2))

__Title: __ Python Exponents

__ Описание / Пояснение / Урок: __

Python использует оператор двойной звездочки (**) для обработки возведения в степень.
Число перед звездочкой - это основание, а число после - показатель степени.
Python также позволяет вам использовать встроенную функцию pow (x, y), которая дает вам x в степени y.

>>> 2 ** 2
4
>>> pow(2, 4)
16

__Подсказка / запрос кода: __

В консоли вам даны две переменные, a и b.
Используя любой метод, описанный в этом уроке, определите переменную с именем power, которая равна степени b.

__Предопределенный код: __

a = 3
b = 4

__Решение:__

a = 3
b = 4
power = pow(a, b)
# or #
power = a ** b

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(power, int)
        self.assertEqual(power, 81)

__Title: __ Python Float Division

__ Описание / Пояснение / Урок: __

Python 3 различает целочисленное (пол) деление и деление с плавающей запятой (истинное).
Python использует один оператор косой черты (/) для деления с плавающей запятой.
При использовании деления с плавающей запятой, даже если частное (результат) представляет собой целое число, например 1 или 2, вместо int будет возвращено число с плавающей запятой.

>>> 1 / 1
1.0
>>> 3 / 2
1.5

__Подсказка / запрос кода: __

Когда вы запустите существующий код, переменная с именем quotient будет иметь значение 1.0.
Измените второе число (знаменатель) так, чтобы частное имело значение 2,5.

__Предопределенный код: __

quotient = 5 / 5

__Решение:__

quotient = 5 / 2

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, float)
        self.assertEqual(quotient, 2.5)

__Title: __ Целочисленное деление Python

__ Описание / Пояснение / Урок: __

Python 3 различает целочисленное (пол) деление и деление с плавающей запятой (истинное).
Python использует оператор двойной косой черты (//) для целочисленного деления.
При использовании целочисленного деления Python округляет частное до ближайшего целого числа.

>>> 1 // 1
1
>>> 3 // 2
1

__Подсказка / запрос кода: __

Когда вы запустите существующий код, переменная с именем quotient будет иметь значение 1.
Измените второе число (знаменатель) так, чтобы частное имело значение 2.

__Предопределенный код: __

quotient = 5 // 5

__Решение:__

quotient = 5 // 2

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(quotient, int)
        self.assertEqual(quotient, 2)

__Title: __ Максимальное значение Python

__ Описание / Пояснение / Урок: __

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

>>> max(1,2,3,4)
4
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> max(list1)
'u'
>>> string1 = "largest"
>>> max(string1)
't'

__Подсказка / запрос кода: __

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

__Предопределенный код: __

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = numbers

__Решение:__

numbers = [8, 2, 4, 3, 6, 5, 9, 1]
highest = max(numbers)

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(highest, int)
        self.assertEqual(highest, 9)

__Title: __ Минимальное значение Python

__ Описание / Пояснение / Урок: __

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

>>> min(1,2,3,4)
1
>>> list1 = ['a', 'e', 'i', 'o', 'u']
>>> min(list1)
'a'
>>> string1 = "smallest"
>>> min(string1)
'a'

__Подсказка / запрос кода: __

В стартовом коде есть список букв, названных, ну, букв.
Самая низкая переменная инициализируется буквами.
Сделайте наименьшее значение равным наименьшей (в алфавитном порядке первой) букве в буквах.

__Предопределенный код: __

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = letters

__Решение:__

letters = ['m','o','n','t','y','p','y','t','h','o','n']
lowest = min(letters)

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(lowest, str)
        self.assertEqual(lowest, 'h')

__Title: __ Python Умножение

__ Описание / Пояснение / Урок: __

Python использует оператор звездочки (*) для умножения.

>>> 3 * 3
9

__Подсказка / запрос кода: __

Измените 0, чтобы произведение было 80.

__Предопределенный код: __

product = 8 * 0

__Решение:__

product = 8 * 10

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(product, int)
        self.assertEqual(product, 80)

__Title: __ Python Remainder

__ Описание / Пояснение / Урок: __

Оператор% (по модулю) возвращает остаток от деления первого аргумента на второй.
Оператор по модулю всегда дает результат с тем же знаком, что и его второй операнд (или ноль).

>>> 3 % 2
1
>>> 3 % 2.0
1.0

Простой способ определить, является ли число четным или нечетным, - это проверить остаток при делении этого числа на 2.
Для нечетных чисел остаток равен 1.
Для четных чисел остаток равен 0.

>>> 3 % 2
1
>>> 4 % 2
0

__Подсказка / запрос кода: __

Установите остаток переменной равным остатку от деления 11 на 3, используя оператор по модулю (%).

__Предопределенный код: __

remainder = "Solution goes here"

__Решение:__

remainder = 11 % 3

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(remainder, int)
        self.assertEqual(remainder, 2)

__Title: __ Округление Python

__ Описание / Пояснение / Урок: __

Функция round (число, n цифр) возвращает заданное число, округленное до точности n цифр после десятичной точки.
Если n цифр опущено или равно None, на вход возвращается ближайшее целое число.
Возвращаемое значение является целым числом, если вызывается с одним аргументом, в противном случае оно того же типа, что и заданное число.

>>> round(5)
5
>>> round(5.5)
6
>>> round(5.555, 1)
5.6

__Подсказка / запрос кода: __

В переменной long_pi слишком много цифр после десятичной точки.
Создайте переменную с именем shorter_pi, которую мы можем использовать вместо этого.
Используйте функцию round (), чтобы отобразить только первые 2 цифры после десятичной точки, и присвойте это значение shorter_pi.

__Предопределенный код: __

longer_pi = 3.14159265358979323846

__Решение:__

longer_pi = 3.14159265358979323846
shorter_pi = round(longer_pi, 2)

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(shorter_pi, float)
        self.assertEqual(shorter_pi, 3.14)

__Title: __ Python Square Root

__ Описание / Пояснение / Урок: __

Функция math.sqrt () является частью математического модуля Python, который всегда доступен, но должен быть импортирован.
Math.sqrt (x) возвращает квадратный корень из x как число с плавающей запятой.

>>> import math
>>> math.sqrt(4)
2.0
>>> math.sqrt(2)
1.4142135623730951

__Подсказка / запрос кода: __

Переменная square_root определяется числом 81.
Измените квадратный_корень так, чтобы он равнялся квадратному корню из 81.
Математический модуль был импортирован для вас.

__Предопределенный код: __

import math
square_root = 81

__Решение:___

import math
square_root = math.sqrt(81)

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(square_root, float)
        self.assertEqual(square_root, 9.0)

__Title: __ Python Вычитание

__ Описание / Пояснение / Урок: __

В Python целое число (int) - это один из трех различных числовых типов.
В этом упражнении вы вычтете два целых числа с помощью оператора минус (-).

>>> 2 - 1
1

__Подсказка / запрос кода: __

Измените 0 так, чтобы сумма была равна 10.

__Предопределенный код: __

total = 20 - 0

__Решение:__

total = 20 - 10

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 10)

__ Название: __ Python Sum

__ Описание / Пояснение / Урок: __

Функция sum (итерация) складывает все элементы в итерируемом Python (список, кортеж и т. Д.) Слева направо и возвращает итог.
Существует необязательный второй аргумент, start, который по умолчанию равен 0 и добавляется к итоговой сумме.
Элементы итерируемого обычно представляют собой числа, а начальное значение не может быть строкой.

>>> numbers = [1, 2, 3, 4, 5]
>>> sum(numbers)
15
>>> sum(numbers, 1)
16
>>> sum(numbers, 10)
25

__Подсказка / запрос кода: __

Есть два списка номеров.
Найдите сумму всех элементов в обоих списках и присвойте это значение переменной с именем total.

__Предопределенный код: __

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]

__Решение:__

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8, 10]
total = sum(list1, sum(list2))

__Тесты: __

class UnitTests(unittest.TestCase):
    def test_main(self):
        self.assertIsInstance(total, int)
        self.assertEqual(total, 55)

Я думаю, это охватывает все уроки, перечисленные в разделе «Основы / математика».
Пожалуйста, дайте мне знать, если вы хотите что-то добавить.
Кроме того, не стесняйтесь вносить правки, изменения, предложения и т. Д.
У меня есть все уроки, которые я только что опубликовал в файлах .py и .md по адресу:
https://github.com/bgroveben/FCC_Python.
Я также создал REPL Classroom по адресу:
https://repl.it/community/classrooms/18388.

Обратите внимание - мы переносим обсуждение наших проблем кодирования Python в этот новый репозиторий: https://github.com/freeCodeCamp/python-coding-challenges/issues

Размещение здесь для справки:
Я думаю, что Макс и Мин могут захотеть и того, и другого:

  1. Используйте числа для ясности - пользователи могут не знать, как char является целым числом
  2. Обязательно используйте несколько экземпляров одного числа - чтобы действительно стимулировать поведение
Была ли эта страница полезной?
0 / 5 - 0 рейтинги