Программирование на Python: Введение в информатику
Это вводный учебник для студентов колледжа, предназначенный для обучения основам информатики с использованием языка программирования Python. Основное внимание уделяется решению задач, проектированию и программированию по модели спирального охвата и графическому подходу.
Обзор курса
📚 Краткое содержание
Это вводный учебник для студентов колледжа, предназначенный для изучения фундаментальных принципов информатики с использованием языка программирования Python. Основное внимание уделяется решению задач, проектированию и программированию по модели спирального охвата и графическому подходу.
Мягкое и всестороннее введение в искусство информатики через призму Python.
Автор: Джон М. Зелле
Благодарности: Гвидо ван Россум (предисловие), Джим Лейзи, а также коллеги-ученые из колледжа Вартбург и различных университетов, включая Оуэна Астрахана, Кайя Хорстмана и Нелл Дейла.
🎯 Цели обучения
- Различать аппаратное обеспечение/программное обеспечение и алгоритмы/программы.
- Объяснить, как интерпретатор Python преобразует высокий уровень кода в исполняемые инструкции через байт-код.
- Определить и вызвать простые функции на Python с использованием параметров и аргументов.
- Перечислить и описать шесть этапов процесса разработки программного обеспечения.
- Применять правила синтаксиса Python для создания корректных идентификаторов и математических выражений с правильным порядком операций.
- Различать модели переменных «Коробка» и «Скрепка» и объяснить процесс вычисления и присваивания.
- Различать типы данных
intиfloatи применять явные преобразования типов. - Реализовать паттерн накопителя для решения математических задач, таких как факториал.
- Использовать библиотеку
mathPython для решения алгебраических уравнений, включая квадратичную формулу. - Определить и применить основные концепции объектно-ориентированного программирования: объекты, методы, акцессоры, мутаторы и псевдонимы.
🔹 Урок 1: Введение в информатику и основы Python
Обзор: В этом уроке информатика рассматривается как изучение вычислимых процессов, а не просто изучение физических машин. Студенты познакомятся с понятием «универсальной машины», где программное обеспечение позволяет трансформировать оборудование в любое воображаемое устройство. Урок завершается техническим введением в основы Python, включая выполнение на основе интерпретатора, определение функций и различие между синтаксисом и семантикой.
Результаты обучения:
- Различать аппаратное обеспечение/программное обеспечение и алгоритмы/программы.
- Объяснить, как интерпретатор Python преобразует высокий уровень кода в исполняемые инструкции через байт-код.
- Определить и вызвать простые функции на Python с использованием параметров и аргументов.
🔹 Урок 2: Процесс разработки программного обеспечения и простые программы
Обзор: В этом уроке представлен систематический подход к созданию программного обеспечения через шестистадийный процесс разработки и основные блоки программирования на Python. Студенты исследуют базовый синтаксис, включая идентификаторы, выражения и присваивание, сравнивая модель переменных «Скрепка» с традиционными понятиями. Урок завершается реализацией циклов с фиксированным числом повторений с использованием функции range() для обработки повторяющихся вычислений.
Результаты обучения:
- Перечислить и описать шесть этапов процесса разработки программного обеспечения.
- Применять правила синтаксиса Python для создания корректных идентификаторов и математических выражений с правильным порядком операций.
- Различать модели переменных «Коробка» и «Скрепка» и объяснить процесс вычисления и присваивания.
🔹 Урок 3: Представление числовых данных и библиотека math
Обзор: В этом уроке рассматриваются способы представления и манипуляции компьютерами числовыми данными, отличающими целые числа (целочисленные) от приближённых значений вещественных чисел (с плавающей точкой). Студенты научатся выполнять сложные вычисления с помощью встроенных операторов Python и библиотеки math, понимая ограничения двоичного представления и точности.
Результаты обучения:
- Различать типы данных
intиfloatи применять явные преобразования типов. - Реализовать паттерн накопителя для решения математических задач, таких как факториал.
- Использовать библиотеку
mathPython для решения алгебраических уравнений, включая квадратичную формулу.
🔹 Урок 4: Объектно-ориентированная графика и интерактивные графические пользовательские интерфейсы
Обзор: В этом уроке студенты переходят от текстового программирования к графическим пользовательским интерфейсам (GUI), используя объектно-ориентированный (ОО) подход. Студенты узнают, как управлять графическими объектами (точки, линии, фигуры), работать с координатными системами и создавать интерактивные программы, реагирующие на клики мыши, нажатия клавиш и ввод текста.
Результаты обучения:
- Определить и применить основные концепции ООП: объекты, методы, акцессоры, мутаторы и псевдонимы.
- Создавать и отображать графические объекты, такие как Точки, Линии, Круги, Прямоугольники, Овалы и Многоугольники.
- Реализовывать преобразования координат и интерактивные элементы (мышь/клавиатура/поля ввода) для создания функциональных GUI.
🔹 Урок 5: Последовательности: строки, списки и ввод-вывод файлов
Обзор: В этом уроке рассматриваются способы представления и манипулирования последовательностями данных в информатике, в частности строками и списками. Студенты научатся использовать индексирование и срезы, различать изменяемые и неизменяемые объекты, а также взаимодействовать с внешними данными через обработку файлов. Кроме того, урок охватывает кодирование данных с помощью Unicode и основы криптографии с использованием простых шифров.
Результаты обучения:
- Выполнять продвинутые манипуляции со строками и списками с использованием индексов, срезов и встроенных методов (split, join, upper, lower).
- Разрабатывать и реализовывать простые алгоритмы кодирования/декодирования и криптографические шифры (Цезарь и подстановочный).
- Создавать программы для обработки данных, которые открывают, читают, обрабатывают и закрывают внешние файлы данных.
🔹 Урок 6: Определение функций и область видимости переменных
Обзор: В этом уроке рассматривается переход от написания монолитных скриптов к созданию модульных программ с использованием функций. Рассматриваются синтаксис определения и вызова функций, механизм передачи информации через формальные и фактические параметры, а также то, как функции возвращают результаты через значения (включая несколько значений и объект None). Студенты также узнают о области видимости переменных — особенно о различии между локальными и глобальными переменными — и о том, как функции могут изменять изменяемые параметры, влияя на состояние программы.
Результаты обучения:
- Показать, как определять и вызывать функции для уменьшения дублирования кода и улучшения структуры программы.
- Различать формальные и фактические параметры и объяснить соответствие по позиции.
- Реализовать функции, возвращающие одно значение, несколько значений или по умолчанию — объект
None.
🔹 Урок 7: Структуры принятия решений и обработка исключений
Обзор: В этом уроке вводятся структуры принятия решений, позволяющие программам выполнять различные последовательности инструкций в зависимости от конкретных условий. Студенты научатся создавать булевы выражения с использованием отношений, реализовывать односторонние, двухсторонние и многосторонние решения, а также использовать вложенность для сложной логики. Также рассматривается модульное выполнение с помощью переменной __name__ и надежное управление ошибками через обработку исключений.
Результаты обучения:
- Реализовать простые, двухсторонние и многосторонние структуры принятия решений с использованием
if,elseиelif. - Создавать и оценивать булевы выражения с использованием операторов сравнения и лексикографического порядка для строк.
- Применить шаблон
try-exceptдля обработки времени выполнения ошибок и предотвращения сбоев программы.
🔹 Урок 8: Неопределённые циклы и булева логика
Обзор: В этом уроке происходит переход от определённых «подсчитываемых» циклов к неопределённым циклам, которые выполняются на основе условий, а не фиксированной последовательности. Студенты освоют оператор while и различные модели проектирования обработки данных, включая интерактивные, сигнальные и файловые циклы. Также рассматривается булева логика, предоставляющая алгебраические инструменты для построения и упрощения сложных структур принятия решений в коде.
Результаты обучения:
- Проектировать и реализовывать неопределённые циклы с использованием оператора
whileв Python. - Применять распространённые модели циклов, включая интерактивные циклы, циклические циклы со знаком-сигналом и паттерн первоначального чтения.
- Упрощать сложные логические условия с помощью булевой алгебры и законов Де Моргана.
🔹 Урок 9: Симуляция, проектирование и пошаговое уточнение
Обзор: В этом уроке рассматриваются систематические процессы разработки сложных компьютерных программ через топ-даун-проектирование и пошаговое уточнение. Студенты научатся разбивать сложные проблемы на управляемые "части" с помощью абстракции и модульности, визуализировать иерархии программ с помощью диаграмм структуры, а также реализовывать симуляции с использованием метода Монте-Карло. Курс также охватывает стратегии итеративной разработки, такие как прототипирование и спиральная разработка, а также надёжные методы тестирования, такие как юнит-тестирование.
Результаты обучения:
- Разбить сложную проблему на более мелкие, решаемые подзадачи с использованием топ-даун-проектирования.
- Конструировать и интерпретировать диаграммы структуры, показывающие поток данных (параметры и возвращаемые значения) между модулями.
- Применять метод Монте-Карло для моделирования вероятностных событий с использованием библиотеки
randomPython.
🔹 Урок 10: Определение классов и событийно-ориентированное программирование
Обзор: В этом уроке происходит переход от процедурного, функционального дизайна к объектно-ориентированному дизайну с использованием классов в Python. Студенты узнают, как инкапсулировать данные (экземплярные переменные) и поведение (методы) в единую структуру, создавать интерактивные графические элементы (GUI-компоненты) и управлять потоком программы через событийно-ориентированное программирование и синхронизированные циклы анимации.
Результаты обучения:
- Различать программный дизайн на основе функций и объектно-ориентированный дизайн.
- Определять пользовательские классы на Python с использованием конструкторов (
__init__), экземплярных переменных и параметраself. - Реализовывать инкапсуляцию и документацию с помощью строк-документов (docstrings).
🔹 Урок 11: Коллекции данных: расширенные списки и словари
Обзор: В этом уроке рассматриваются продвинутые методы работы с коллекциями данных в Python, с акцентом на универсальность списков и словарей. Студенты научатся отличать списки от традиционных массивов, выполнять сложные операции со списками, такие как срезы и сортировка записей, и применять не последовательное отображение через словари. Модуль завершается применением этих структур для статистического анализа и классических алгоритмов, таких как решето Эратосфена.
Результаты обучения:
- Сравнить динамические списки в Python с массивами фиксированного размера и гомогенными типами.
- Выполнять продвинутые манипуляции со списками, включая срезы, выборочное удаление и пользовательскую сортировку объектных записей.
- Реализовывать статистические алгоритмы (среднее, медиана, стандартное отклонение) и таблицы-управляемые проекты с использованием коллекций.
🔹 Урок 12: Принципы объектно-ориентированного проектирования (ООП)
Обзор: В этом уроке рассматривается переход от топ-даун-функционального проектирования к объектно-ориентированному проектированию (ООП), которое представляет систему как совокупность взаимодействующих «черных ящиков» (объектов). Студенты научатся выявлять потенциальные объекты и методы, реализовывать многоклассовые симуляции, такие как ракетбол и покер с кубиками, и применять три основных принципа ООП: инкапсуляцию, полиморфизм и наследование. Урок завершается управлением сложными взаимодействиями графического пользовательского интерфейса через наследование классов и переопределение методов.
Результаты обучения:
- Выявить потенциальные классы и методы из описания задачи путём анализа существительных и глаголов.
- Реализовать сложную многоклассовую симуляцию с использованием структурированных классов (например,
Player,Game,Stats). - Различать и применять фундаментальные концепции инкапсуляции, полиморфизма и наследования.
🔹 Урок 13: Проектирование алгоритмов, рекурсия и эффективность
Обзор: В этом уроке рассматриваются фундаментальные методы решения вычислительных задач эффективно. Охватываются стратегии поиска, механика рекурсивного решения задач (базовые случаи и рекурсивные шаги), а также сравнение сортировочных алгоритмов, таких как сортировка выбором и сортировка слиянием, чтобы понять, как проектирование алгоритмов влияет на производительность.
Результаты обучения:
- Сравнивать и реализовывать стратегии линейного и бинарного поиска.
- Проектировать рекурсивные функции с использованием базовых случаев и рекурсивных шагов для задач, таких как переворот строки и быстрое возведение в степень.
- Анализировать компромиссы производительности между рекурсией и итерацией, а также между различными сортировочными алгоритмами (n^2 против n \log n).