В каком порядке следует понимать концепции Python для абсолютных новичков?

Я преподаю Python для бакалавров математики. Меня интересует оптимальный порядок, в котором учащиеся должны быть ознакомлены с различными концепциями Python. На мой взгляд, на каждом этапе студенты должны иметь возможность решить нетривиальную проблему программирования, используя только имеющиеся в то время инструменты. Каждый новый инструмент должен позволить более простое решение знакомой проблемы. Выбор множества концепций, доступных на Python, необходим для того, чтобы держать учащихся в центре внимания. Они также должны мотивироваться и должны ценить каждый вновь освоенный инструмент без слишком большого запоминания. Вот некоторые конкретные вопросы:

  • Например, мой предшественник представил списки перед строками. Я считаю, что наоборот – лучшее решение.
  • Должны ли быть введены определения функций в самом начале или после освоения основных идей структурированного программирования, таких как решения (if) и циклы (while)?
  • Должны ли вводиться наборы перед словарями?
  • Лучше ли начинать чтение и запись файлов на раннем этапе курса, или же нужно использовать ввод и печать для большей части курса?

Любые предложения с объяснениями приветствуются.

Редактировать: В старшей школе ученики познакомились с компьютерами. Некоторые из них научились программировать. До этого у них был курс, охватывающий слово, excel, powerpoint, html, латекс, вкус Mathematica, но не программирование. 5 лет назад я использовал Mathematica в этом курсе, и в последующем курсе используется C и более поздняя Java. Теперь я преподаю введение в Python, и в последующем курсе мой коллега учит объектно-ориентированному программированию на Python. Позже студент может проводить специальные курсы по структурам данных, алгоритмам, оптимизации и на некоторых курсах по выбору, которые они изучают на своих собственных Mathematica, Matlab и R.

5 Solutions collect form web for “В каком порядке следует понимать концепции Python для абсолютных новичков?”

После некоторой попытки / кроме учителя, я решил придерживаться чего-то вроде :

(начиная с нуля, приспосабливаясь к их уровню)

  1. Вскоре, что такое Python и что вы можете с ним сделать. Пропустите речь о технических материалах и сосредоточьтесь на том, что они хотят делать: музыку, графический интерфейс, веб-сайт, переименование файлов и т. Д.
  2. Установка Python, запуск интерпретатора. Если можно, используйте iPython .
  3. Переменные, основные строки и print() .
  4. Int и типы (включая ошибки типов и литье).
  5. Основное исчисление. Покажите им 1 / 0 , 10 / 3 но не беспокоите их подробностями .
  6. Приведение исчисления приводит к переменным.
  7. Использование переменных в исчислении.
  8. Строковое формирование с % . Показывать только «% s», этого достаточно и всегда работает. Всегда используйте кортеж (с конечной комой), даже если он содержит только один элемент.
  9. Списки, индексирование, нарезка и общие ошибки. Затем покажите кортежи как замороженные списки (и кастинг). Покажите, что тогда могут содержать друг друга. Заставьте их работать над этим, пока они не овладеют им совершенно : это очень, очень важно.
  10. Словари, с общими ошибками. Вложение с кортежами и списками. Настаивайте на последней точке.
  11. For цикла на строках, затем списки, затем кортежи, затем словари.
  12. For цикла на вложенных типах. Будьте противны. Не торопитесь. Зная, что эта часть меняет все.
  13. items() словаря items() , values() и keys() .
  14. Чтение файлов с использованием, включая IOErrors .
  15. Запись файлов.
  16. Использование методов. Используйте строку в качестве примера, показывающую strip() , lower() , split() и т. Д. Не объясняйте OOP , как использовать метод. Использовать мировой «метод» много отныне.
  17. Создание файла модуля и его использование. Только один модуль . Все в нем.
  18. Функции (только с return , без print() . Запрет print() в функциях ).
  19. Функциональные параметры.
  20. Именованные параметры.
  21. Параметры значения по умолчанию.
  22. Try / Except и исключения.
  23. Import и создание собственных модулей каталогов. Покажите все особые случаи (требуется больше времени, чтобы объяснить это, чем вы думаете).
  24. Продемонстрируйте некоторые стандартные модули (но не тратьте на это слишком много времени, это просто показать ): datetime, string, os и sys. Избегайте абстрактных материалов, таких как itertools, они мечта кодера, но студентский кошмар.

После этого вы можете принести ООП на стол, но это немного сложнее. Используйте строки, списки и файлы, чтобы ввести понятие объекта. Когда они это получат, начните с занятий. Тогда сила может быть с вами 🙂

Заманчиво использовать функцию print в функциях, чтобы показать, как она работает, и еще более соблазнительно использовать raw_input . Вы должны избегать его любой ценой . Первая из них очень затрудняет воплощение концепции «возвращаемого значения», вторая скрывает реальный поток программы, и ученикам трудно понять, что вам нужно цепочки функций, а не спрашивать у пользователя за каждое значение, которое вы необходимость.

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

Показывать только строковое формирование с использованием % и игнорировать + и. Вы всегда можете добавить небольшой блок «идти дальше» в материал для лекций для тех, кто хочет узнать больше. Показывать только и не while . Вы можете запрограммировать почти 90% программ Python. Избегайте += . Не показывайте, что вы можете размножать строки / списки / dict с помощью ints. Это не так, но приведет их к заблуждению. Вам нужно, чтобы они были сосредоточены на основных концепциях.

Не показывать наборы. Наборы очень полезны, но редко используются. Поощряйте их вводить код дома и спрашивать, не могут ли они решить проблему. В этом случае show sets, если они являются решением. Знание наборов требует времени и ресурсов мозга учащихся, которые можно использовать для чего-то более часто используемого. У них будет много времени для изучения новых инструментов позже, без вас: сосредоточьтесь на том, что сложно или трудоемко учиться в одиночку.

То же самое относится к enumerate . Студенты с C или фоном Java будут использовать индексы для цикла, а не for если вы дадите им enumerate . По тем же причинам держите len , fd.read , fd.realines и range для того, чтобы один из последних курсов fd.realines право на «расширенный python», если у вас есть время для этого.

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

В конце концов, произвольно применяйте хорошие практики . PEP8, хорошая архитектура, соглашения о названиях, неизменные параметры по умолчанию и т. Д. Они просто не могут знать об этом прямо сейчас. Не беспокойтесь, вы учитель, вы имеете право сказать «это как раз то, как это происходит» от времени к разу.

О, и они будут лучше программистов, если они не начнут изучать такие вещи, как байт-код, рекурсия, сборка, сложность, сортировка пузырьков, стек, детали реализации и т. Д. Вы тратите время на обучение этому кому-то, кто не может кодировать приличный Python, он просто не может понять, что это такое. Практика – это ваши лучшие инструменты для приведения теории. И снова они будут изучать все остальное ими самими позже, если вы правильно их подготовите, поэтому расставьте приоритеты и не бойтесь пропустить понятия, даже простые / важные .

Вы можете увидеть мою схему здесь: http://homepage.mac.com/s_lott/books/nonprog/html/index.html

Этот порядок представления основан на опыте преподавания C, Ada, C ++, PL / SQL (и даже курса COBOL один раз).

Есть великая книга, которая имеет разумное педагогическое упорядочение понятий.

RC Holt, GS Graham, ED Lazowska, MA Scott. Структурированное параллельное программирование с использованием операционных систем. 1978. Эддисон-Уэсли. 0201029375

http://openlibrary.org/b/OL4570626M/Structured_concurrent_programming_with_operating_systems_applications

Список e-satis довольно хорош, но поскольку это для математического класса, я бы добавил следующие предложения:

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

 from __future__ import division 

В противном случае они будут укусаться целым делением. Достаточно легко запомнить, когда вы вводите 1/2 в интерактивном приглашении, но вы получите ошибки в таких тонких местах, как:

 def mean(seq): """Return the arithmetic mean of a list.""" return sum(seq) / len(seq) 

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

 def derivative(f, x, delta_x=1e-8): """Approximate f'(x).""" return (f(x + delta_x) - f(x - delta_x)) / (2 * delta_x) print(derivative(math.sin, 0)) 

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

Это может показаться очевидным, но преподавать только столько языка, сколько им нужно для решения проблемы, не слишком углубляться в «правильные» и эффективные стили кодирования, вы можете начать работать над этим медленно, как только ваши ученики , например, комментарий по стилю, но не слишком строги к нему.

Чтобы решить проблему, вы должны понимать хотя бы некоторую основную часть языка. Я собираюсь предположить, что все, что вы делаете, скорее всего, будет содержаться в одной строке, а namespacing, modules, performance и т. Д. Действительно не будут главными приоритетами.

Начните с установки их с помощью среды разработки и создайте простую программу для их запуска. Удостоверьтесь, что у них есть среда, в которой есть все, что им нужно (если им нужно numpy, пройти их через установку), пройдите их через запуск программы из командной строки и, конечно же, с удобным в использовании редактором (например, Eclipse + PyDev, вероятно, слишком сложно). Самое неприятное, когда вы не можете получить рабочую среду. Молитесь, что вам не нужно поддерживать Windows или не иметь много библиотек, с которыми можно бороться.

Как только у вас есть это, познакомьтесь с языком в целом. Типы обложек и тонкие проблемы, которые могут возникнуть, например:

 >>> 1/2 0 >>> 1./2 0.5 

Я бы даже привил привычку делать все поплавками. Введите строки для вывода и как сделать этот вывод, если вы хотите, чтобы он был на той же строке. Покройте операции и логику, затем предоставьте введение в «функции», убедившись, что вы должны провести различие между математическим эквивалентом. Я думаю, что структуры потока команд должны быть довольно простыми и включать простые (if, else, elif, возможно, пока).

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

Редактировать:

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

Я думаю, что наборы гораздо более математически релевантны (и полезны!), А затем dicts есть и будут вводить их в первую очередь.

Недавно я преподавал короткий курс краха Python для студентов I-III курсов Computer Science, большинство из которых знали только C и C ++, и даже это не так хорошо. Мой подход сильно отличался от того, что вы предлагаете.

Отказ от ответственности: целью моего курса было введение языка людям, которые уже знакомы с основными идеями программирования, поэтому это может быть нецелесообразным, если вы преподаете людям, которые никогда не подвергались программированию вообще.

  • Во-первых, я коротко ознакомился с языком с его сильными и слабыми сторонами и показал некоторые простые программы на Python, которые могут легко получить даже те, кто не знает Python.
  • Затем я провел тщательный анализ структур данных, используя экстенты REPL для примеров. Конечно, на данный момент они не могли написать программу, но написание любой программы (даже если это был пример с игрушкой) без использования структур данных – это не то, о чем говорит Python; Я бы даже сказал, что попытка это предполагает непитские привычки ученикам. Я пошел в таком порядке:
    • Числа ( int -> float )
    • Последовательности ( list & tuple -> string -> bytearray )
    • наборы
    • Словари
    • Bools, включая авто-кастинг для bools.
  • Следующий пример был основным синтаксисом в следующем порядке:
    • Выражения (разрывы строк и т. Д.)
    • печать
    • Переменные, фокусируясь на особенностях динамического связывания и существенной разности между понятием C переменных и его эквивалентом Python.
    • Conditionals
    • Loops
    • Учет списка
    • Вызов функций / методов, включая цепочки функций, параметры ключевых слов и списки аргументов.
    • Модули, включая импорт и работу с пространствами имен.
  • Форт глубоко погрузился в функции. В Python есть много интересного, в том числе различные способы определения аргументов (ключевые слова, списки), множественные возвраты, docstrings, scoping (большая предметная область отдельно) и важная, но часто пропущенная часть, которая использует функции как объекты, передавая их, используя лямбды и т. д.
  • В-пятых, это был более практичный обзор файлов, включая проблемы ввода / вывода и кодирования и исключения (концепция -> улов -> повышение).
  • Наконец, обзор функций OO в Python, включая переменные экземпляра, типы методов (экземпляр / класс / статические), наследование, наименования методов (частные, искаженные, специальные) и т. Д.

По конкретным вопросам:

Например, мой предшественник представил списки перед строками. Я считаю, что наоборот – лучшее решение.

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

Должны ли быть введены определения функций в самом начале или после освоения основных идей структурированного программирования, таких как решения (if) и циклы (while)?

Определенно после. Функции вызова должны преподаваться примерно в то же время, что и основные идеи структурированного программирования, но определение ваших собственных должно быть отложено.

Должны ли вводиться наборы перед словарями?

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

Лучше ли начинать чтение и запись файлов на раннем этапе курса, или же нужно использовать ввод и печать для большей части курса?

Возможности IO Python действительно просты, поэтому это не имеет большого значения, но я бы сказал, что это не нужно для базовых упражнений, поэтому вы можете также оставить их на вторую половину курса.

На мой взгляд, на каждом этапе студенты должны иметь возможность решить нетривиальную проблему программирования, используя только имеющиеся в то время инструменты. Каждый новый инструмент должен позволить более простое решение знакомой проблемы.

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

  • Умножение строки с числом в python
  • PyCharm и PYTHONPATH
  • Написание файла dict в txt и его чтение?
  • Python 3.1 - Ошибка памяти во время выборки большого списка
  • Что такое pythonic, чтобы избежать параметров по умолчанию, которые являются пустыми списками?
  • В Pycharm Как загрузить код в интерактивный отладчик?
  • python oauth 2.0 new fbsr facebook cookie, ошибка проверки кода проверки
  • Python не интерпретирует измененные файлы, используя устаревший .pyc
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.