/
Автор: Герасимов А.В. Гущина О.М.
Теги: языки программирования искусственный интеллект трансляторы язык программирования python
ISBN: 978-58259-1754-2
Год: 20025
Текст
О.М. Гущина, А.В. Герасимов
С р е д С т В А п р О Г рА М М н О й
рА з рА б О т к и н А я з ы к е
Python: Веб-прилОжения,
иСкуССтВенный интеллект
и МАшиннОе Обучение
Для создания на сервисе replit виртуального окружения нажимаем Create
Repl.Для создания на сервисе replit виртуального окружения нажимаем Create
Repl.
Для создания на сервисе replit виртуального окружения нажимаем Create
Repl.
Появляется окно с выбором шаблона проекта.
Появляется окно с выбором шаблона проекта.
Появляется окно с выбором шаблона проекта.
Выбираем Python.
учебно-методическое пособие
Выбираем Python.
Выбираем Python.
Задаем название.
Задаем название.
Задаем название.
Задаем название.
Задаем название.
Задаем название.
Нажимаем Create Repl.
Нажимаем Create Repl.
Нажимаем Create Repl.
Нажимаем Create Repl.
Нажимаем Create Repl.
Нажимаем Create Repl.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
Справа в окне находим вкладку Shell и переходим в неё.
Справа в окне находим вкладку Shell и переходим в неё.
Справа в окне находим вкладку Shell и переходим в неё.
Справа в окне находим вкладку Shell и переходим в неё.
Справа в окне находим вкладку Shell и переходим в неё.
Справа в окне находим вкладку Shell и переходим в неё.
Тольятти
Издательство ТГУ
2025
Министерство науки и высшего образования
Российской Федерации
Тольяттинский государственный университет
О.М. Гущина, А.В. Герасимов
СРЕДСТВА ПРОГРАММНОЙ РАЗРАБОТКИ
НА ЯЗЫКЕ PYTHON: ВЕБ-ПРИЛОЖЕНИЯ,
ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ
И МАШИННОЕ ОБУЧЕНИЕ
Учебно-методическое пособие
Тольятти
Издательство ТГУ
2025
УДК 004.43(075.8)+004.8(075.8)
ББК 32.973.2я73+16.6я73
Г 981
Рецензенты:
д-р пед. наук, доцент, заведующий кафедрой «Прикладная
информатика» Тольяттинской академии управления
Н.Б. Стрекалова;
д-р техн. наук, доцент, профессор кафедры прикладной
математики и информатики Тольяттинского государственного
университета С.В. Мкртычев.
Г 981 Гущина, О.М. Средства программной разработки на языке
Python: веб-приложения, искусственный интеллект и машинное
обучение : учебно-методическое пособие / О.М. Гущина, А.В. Герасимов. – Тольятти : Издательство ТГУ, 2025. – 363 с. – ISBN 978-58259-1754-2.
Учебно-методическое пособие содержит теоретические представления и практические рекомендации по использованию языка
программирования Python в задачах программной разработки и машинного обучения.
Предназначено для использования в работе со студентами всех
направлений подготовки, всех специальностей, всех форм обучения (в том числе с использованием ДОТ) и может быть полезно студентам, профессорско-преподавательскому составу высших
учебных заведений, а также любому желающему получить знания
по языку программирования Python.
УДК 004.43(075.8)+004.8(075.8)
ББК 32.973.2я73+16.6я73
Рекомендовано к изданию научно-методическим советом
Тольяттинского государственного университета.
ISBN 978-5-8259-1754-2
© Гущина О.М., Герасимов А.В., 2025
© ФГБОУ ВО «Тольяттинский
государственный университет», 2025
ВВЕДЕНИЕ
Учебно-методическое пособие «Средства программной разработки на языке Python: веб-приложения, искусственный интеллект
и машинное обучение» предназначено для студентов и всех тех, кто
хочет получить базу теоретических знаний и практических навыков
в области разработки программных продуктов на языке программирования Python.
В данной работе представлено описание основ анализа данных,
которые включают описание базовых структур языка Python, основ
объектно ориентированного программирования и веб-разработки
на нем. Дается также представление об искусственном интеллекте
и машинном обучении с примерами реализации на языке Python.
Каждый модуль завершается контрольными вопросами и предлагаемыми практическими заданиями с методическими рекомендациями для их выполнения.
Цель пособия заключается в предоставлении теоретических
и практических рекомендаций по использованию языка программирования Python в задачах программной разработки и машинного
обучения.
Задачи
1. Дать общее представление о языке программирования Python.
2. Рассмотреть основы разработки программного продукта.
3. Показать практику применения языка программирования Python
для разработки веб-приложений и решения задач машинного
обучения.
4. Проверить знания материала с помощью контрольных вопросов
и выполнения практических заданий.
Первый модуль пособия дает общее представление о языке
программирования Python и принципах объектно ориентированного подхода. Второй модуль рассматривает основы веб-разработки от создания программного продукта до его публикации. Третий
модуль дает общее представление об искусственном интеллекте
и машинном обучении с примерами реализации решений на языке
программирования Python.
3
В результате изучения учебно-методического пособия обучающийся должен
знать:
– базовые структуры языка Python;
– принципы работы с файлами, модулями и функциями;
– основные понятия ООП;
– основы веб-разработки;
– основные задачи систем искусственного интеллекта;
– примеры работы с системами глубокого обучения;
уметь:
– создавать программные продукты на языке Python;
– осуществлять настройку веб-приложения;
– применять простейшие алгоритмы машинного обучения;
владеть навыками:
– разработки от простых приложений до веб-приложений;
– применения простейших алгоритмов машинного обучения в задачах систем искусственного интеллекта.
4
Модуль 1. ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ PYTHON
Тема 1. Базовые структуры языка Python
и их обработка
Общее представление о языке Python
Python – интерпретируемый, высокоуровневый, динамически
типизированный язык программирования, который был разработан в конце 1980-х годов Гвидо ван Россумом. Python был создан
как язык для обучения программированию, но с тех пор он стал одним из самых популярных языков программирования в мире.
Python может быть использован для широкого спектра задач,
включая следующие.
Автоматизация задач: Python – мощный инструмент для написания скриптов и автоматизации задач. Это может быть особенно
полезно для работ с большими объемами данных, обработки изображений, создания отчетов и других повседневных задач.
Разработка веб-приложений: Python часто используется для
создания веб-сайтов и веб-приложений. Фреймворки, такие как
Django и Flask, делают разработку веб-приложений более простой
и быстрой.
Научные и математические вычисления: Python имеет множество библиотек для научных и математических вычислений, таких
как NumPy, SciPy и Pandas. Они позволяют выполнять сложные
вычисления, работу с массивами данных, создание графиков
и многое другое.
Разработка игр: Python может использоваться для создания игр.
Библиотеки, такие как Pygame и PyOpenGL, позволяют создавать
2D и 3D игры.
Машинное обучение и искусственный интеллект: Python является
одним из наиболее популярных языков программирования для машинного обучения и искусственного интеллекта. Библиотеки, такие как TensorFlow, Keras и PyTorch, позволяют создавать сложные
модели машинного обучения и производить анализ данных.
5
Разработка мобильных приложений: Python может использоваться для создания мобильных приложений. Фреймворки, такие как
Kivy и BeeWare, позволяют создавать кроссплатформенные приложения для Android и iOS.
Python является очень гибким и универсальным языком программирования, который может использоваться для решения широкого спектра задач. Он обладает множеством преимуществ, таких
как простота, легкость в изучении и использовании, а также широкий выбор библиотек и фреймворков.
Достоинства Python
• Простой и легкий в изучении и использовании. Имеет широкий спектр библиотек и фреймворков, облегчающих разработку
приложений и повышающих производительность.
• Обладает высокой скоростью разработки благодаря своей
простоте и удобству синтаксиса.
• Интерпретируемый язык, и это означает, что нет необходимости компилировать его программы, что существенно ускоряет
процесс разработки и отладки.
• Имеет мощную систему управления памятью, что помогает
избежать проблем с утечками памяти.
Недостатки Python
• Может быть более медленный, чем некоторые другие языки
программирования, такие как C++ или Java.
• Динамически типизированный язык, что может привести
к некоторым проблемам с типами данных.
• Интерпретируемый язык, что может привести к снижению
производительности приложений, особенно при работе с большими объемами данных.
Изучение языка программирования Python может помочь в развитии навыков логического мышления, решения проблем и алгоритмического мышления. Эти навыки могут быть полезными для
решения разнообразных задач как в программировании, так и в повседневной жизни.
Python имеет множество преимуществ, которые делают его
удобным для разработки веб-приложений.
6
Простота языка. Python имеет чистый и понятный синтаксис,
который облегчает понимание кода и ускоряет процесс разработки.
Python не требует знания множества дополнительных языков, таких
как HTML, CSS, JavaScript, и др., для разработки веб-приложений.
Вместо этого Python может использоваться вместе с веб-фреймворками, такими как Django или Flask, которые облегчают создание
веб-приложений.
Мощность языка. Python имеет множество библиотек, которые
облегчают разработку веб-приложений. Библиотеки, такие как
Requests, BeautifulSoup, и Pandas, предоставляют разработчикам
множество инструментов для работы с данными, сетевыми протоколами и многими другими аспектами веб-разработки. Кроме того,
Python имеет мощные инструменты для обработки данных, такие
как NumPy, SciPy, и Matplotlib, которые могут быть полезны при
создании веб-приложений, связанных с научными исследованиями и анализом данных.
Кроссплатформенность. Python может быть запущен на различных операционных системах, включая Windows, macOS, и Linux.
Это делает его удобным для разработки веб-приложений, которые
могут быть запущены на различных платформах.
Активное сообщество. Python имеет большое и активное сообщество разработчиков, которые создают новые библиотеки,
фреймворки и инструменты для улучшения процесса разработки.
Сообщество также предоставляет множество ресурсов для обучения
и поддержки, таких как документация, форумы и онлайн-курсы.
Высокая скорость разработки. Python позволяет создавать
веб-приложения быстрее, чем многие другие языки программирования. Python имеет понятный синтаксис и множество инструментов, которые облегчают создание веб-приложений. Кроме того,
Python имеет множество библиотек, которые облегчают работу
с базами данных, сетевыми протоколами и многими другими аспектами веб-разработки.
Python является удобным языком программирования для разработки веб-приложений. Он имеет простой и понятный синтаксис, мощные инструменты и библиотеки, кроссплатформенность,
активное сообщество и высокую скорость разработки. Разработка
7
интернет-магазины,
сети,различных
корпоративные
и т. д. таких как
может быть полезнасоциальные
для создания
типовпорталы
приложений,
интернет-магазины, социальные сети, корпоративные порталы и т. д.
веб-приложений
Python
с использованием Django может быть
Основные понятиянаязыка
Python
полезна для создания различных типов приложений, таких как инПеременные
в Python
– именованные области памяти, которые
Основные понятия
языка Python
тернет-магазины, социальные сети, корпоративные порталы и т. д.
используются
для хранения
В Python области
переменные
не требуется
Переменные
в Pythonзначений.
– именованные
памяти,
которые
Основные
понятия
Python
объявлять явнодля
– они
создаются
автоматически
при
первом присваивании
используются
хранения
значений.
Вязыка
Python
переменные
не требуется
в Python
– именованные
области
значения.
объявлятьПеременные
явно – они
создаются
автоматически
припамяти,
первомкоторые
присваивании
используются для хранения значений. В Python переменные не треПример на рис. 1 показывает описание процесса создания переменной и
значения.
буется объявлять явно – они создаются автоматически при первом
присваивание
Пример ей
на значения.
рис.значения.
1 показывает описание процесса создания переменной и
присваивании
Пример
на рис. 1 показывает описание процесса создания пеприсваивание
ей значения.
ременной и присваивание ей значения.
Рис. 1. Описание процесса создания переменной
Рис.
процессасоздания
создания
переменной
Рис.1.1.Описание
Описание процесса
переменной
ДляДля
того
вывести значение
значениепеременной
переменной
на экран,
тогочтобы
чтобы вывести
на экран,
мож- можно
но
функцию
print(),
описание
которой представлено
использовать
функцию
print(),
описание
которой
представлено
рис. 2. можно
Дляиспользовать
того
чтобы
вывести
значение
переменной
нана экран,
на рис. 2.
использовать функцию print(), описание которой представлено на рис. 2.
Рис.2.
2. Описание
Описание работы
print()
Рис.
работыфункции
функции
print()
Переменные в Python могут изменять свои значения в процессе
Рис.в Python
2.
функции
print()
Переменные
могутработы
изменять
свои
значения
в процессе
выполнения
программы.
С Описание
переменными
в Python
можно
выполнять
различные
выполнения программы. С переменными в Python можно выполматематические
операции, а также операции сравнения и логические операции.
нять различные математические операции, а также операции сравПример
на рис. 3 показывает
нения и логические
операции. описание сложения двух переменных и
Пример на рис. 3 показывает описание сложения двух переменвывод результата.
ных и вывод результата.
Рис.
двухпеременных
переменных
Рис.3.3.Сравнение
Сравнение двух
8
Пример на рис. 4 позволяет продемонстрировать применение логического
"и".
Пример на рис. 4 позволяет продемонстрировать применение логического
Пример на рис. 4 позволяет продемонстрировать применение
"и".
логического «и».
Рис.
логического«и»
"и"
Рис.4.4.Применение
Применение логического
При использовании операций с переменными в Python результат может
зависеть отопераций
типа данных
переменных.вНапример,
при де- может
При
использовании
с переменными
Python результат
лении двух целых чисел результат будет также целым числом, а при
зависеть от типа данных переменных. Например, при делении двух целых чисел
делении числа с плавающей точкой на целое число результат будет
результат
будет
целымважно
числом,
а призаделении
числа
с плавающей
иметь
типтакже
float. Также
следить
порядком
выполнения
опе- точкой
раций
и использовать
при необходимости.
на целое
число
результат скобки
будет иметь
тип float. Также важно следить за
В
Python
для
ввода
и
вывода
данных
используются
функции
порядком выполнения операций и использовать скобки
при необходимости.
input() и print() соответственно. Функция input() позволяет полуВ
Python для ввода и вывода данных используются функции input() и
чить данные от пользователя, а функция print() используется для
print() вывода
соответственно.
Функция input() позволяет получить данные от
данных на экран.
Пример
на рис.print()
5 показывает
правильную
запись
вводана
и вывопользователя,
а функция
используется
для вывода
данных
экран.
да данных.
Пример на рис. 5 показывает правильную запись ввода и вывода данных.
Рис. 5. Правильная запись ввода/вывода данных
5. Правильная
запись
ввода/вывода
данных переменных,
Пример наРис.
рис.
6 показывает
запись
вывода нескольких
Пример
на рис. 6 показывает запись вывода нескольких переиспользуемых
в программе.
менных, на
используемых
в программе.
Пример
рис. 6 показывает
запись вывода нескольких переменных,
Рис. 5. Правильная запись ввода/вывода данных
используемых в программе.
Рис.
несколькихпеременных
переменных
Рис.6.6.Запись
Запись вывода
вывода нескольких
При использовании функции input() все введенные данные буРис. str.
6. Запись
вывода
нескольких
переменных
дут иметь
тип
Поэтому
необходимо
При
использовании
функции
input()
все преобразовывать
введенные
данныеданные
будут иметь
к нужному типу (например, int или float) перед их использованием
тип str. Поэтому необходимо преобразовывать данные к нужному типу
При использовании
функции
input() все введенные
данные Также
будут важно
иметь
(например,
int или float) перед
их использованием
в вычислениях.
9
тип
str. Поэтому
преобразовывать
данные кпользователем
нужному типу
обращать
вниманиенеобходимо
на правильность
ввода данных
и
обращать
внимание
на
правильность
ввода
данных
пользователем
и
обрабатывать возможные ошибки при вводе.
Строки
в Python
последовательность
символов,
заключенных в
в вычислениях.
Также– важно
обращать внимание
на правильность
ввода
данных
и обрабатывать
ошибки
кавычки.
Они
могутпользователем
содержать любые
символы, возможные
включая буквы,
цифры и
при вводе.
специальные символы. Строки в Python – упорядоченные последовательности
Строки в Python – последовательность символов, заключенных
символов,
где каждый
символ
имеет свой
индекс.
Индексы
начинаются
в кавычки.
Они могут
содержать
любые
символы,
включая
буквы,с 0 для
цифры
и специальные
символы.
Строки вна
Python
– упорядоченные
первого
символа
в строке и
увеличиваются
1 для
каждого следующего
последовательности
символов,
где
каждый
символ
имеет
свой инсимвола.
декс. Индексы начинаются с 0 для первого символа в строке и увеВ
примере на рис. 7 показывается, как происходит создание и вывод
личиваются на 1 для каждого следующего символа.
строки. В примере на рис. 7 показывается, как происходит создание
и вывод строки.
Строки
в
Python
могут
быть
изменяемыми
и
неизменяемыми.
Неизменяемые строки не могут быть изменены после создания, а изменяемые
Рис.
выводстроки
строки
Рис.7.
7. Создание
Создание иивывод
строки могут быть изменены.
Строки
Python
могут быть изменяемыми
и неизменяемыми.
Пример
на врис.
8 показывает
описание изменяемой
и неизменяемой
Неизменяемые строки не могут быть изменены после создания,
строк:
а изменяемые строки могут быть изменены.
– строка
"Hello,
world!"
сохраняется
в переменной
s1;
Пример
на рис.
8 показывает
описание
изменяемой
и неизместрок:
–няемой
попытка
изменить первый символ строки приводит к ошибке, так как
– строка «Hello, world!» сохраняется в переменной s1;
строка неизменяемая;
– попытка изменить первый символ строки приводит к ошибке,
– строка
сохраняется в переменной s2;
так как"Hello,
строкаworld!"
неизменяемая;
–– функция
replace()
используется
длявзамены
символов
строка «Hello,
world!»
сохраняется
переменной
s2; в строке;
–
функция
replace()
используется
для
замены
символов
в строке;
– измененная строка сохраняется в той же переменной s2;
– измененная строка сохраняется в той же переменной s2;
– функция print() используется для вывода измененной строки на экран.
– функция print() используется для вывода измененной строки
на экран.
Рис.8.8.Описание
Описание изменяемой/неизменяемой
строки
Рис.
изменяемой/неизменяемой
строки
10 необходимо
При работе со строками в Python
учитывать их особенности,
такие как неизменяемость строк, использование кавычек для определения
При работе со строками в Python необходимо учитывать их особенности, такие как неизменяемость строк, использование кавычек
для определения начала и конца строки, а также различные методы для работы со строками в Python. Кроме того, форматирование
строк и использование регулярных выражений могут значительно
упростить и ускорить обработку строк в Python.
Код программы на языке Python (рис. 9) показывает обращение
к символам строки. Этот код создает переменную string и присваивает ей значение «Hello, World!». Он выводит отдельные символы этой
строки на экран, используя индексы символов в квадратных скобках.
Рис. 9. Обращение к символам строки
В этом примере мы выводим первый символ, используя индекс 0, второй
Рис. Рис.
9.1,Обращение
к символам
строки
9. т.
Обращение
киспользуем
символам
строки
символ – используя индекс
и
д. Также
отрицательный индекс -1
для обращения
к последнему
символу
строки.
результате
выполнения
В этом
примере мы
выводим
первыйВсимвол,
используя
индексэтой
0, второй
символ
– используя
индекс
т. д. Также
используем
В этом
мы выводим
первый
используя
индекс
0, второй
программы
напримере
экране
появятся
символы
H,
e,символ,
l и !1,– икаждый
на отдельной
строке
отрицательный
индекс
-1
для
обращения
к
последнему
символу
символ
–
используя
индекс
1,
и
т.
д.
Также
используем
отрицательный
индекс
-1
– соответственно первый, второй, третий и последний символы строки "Hello,
строки. В результате выполнения этой программы на экране поядля
обращения
к последнему
строки.наВотдельной
результатестроке
выполнения
World!".
вятся символы
H, e, lсимволу
и ! – каждый
– соот-этой
программы
на экранепервый,
появятся
символы
H,
e, lии последний
! – каждый
на отдельной
строке
символы
строки
Код,ветственно
представленный
навторой,
рис. 10,третий
демонстрирует
форматирование
строк:
«Hello,
World!».
–создает
соответственно
первый,
и последний
переменные
nameвторой,
и age третий
и присваивает
им символы
значениястроки
"John""Hello,
и 30
Код, представленный на рис. 10, демонстрирует форматироваWorld!".
соответственно.
Онсоздает
выводит
отформатированную
строку, используя
метод
ние строк:
переменные
name и age и присваивает
им значеКод,ния
представленный
на рис. 10, демонстрирует
форматирование строк:
«John» и 30 соответственно.
Он выводит отформатированную
format().
строку, используя
format().
создает переменные
nameметод
и age
и присваивает им значения "John" и 30
соответственно. Он выводит отформатированную строку, используя метод
format().
Рис.10.
10. Форматирование
Форматирование строк
Рис.
строк
Метод format() используется для вставки значений переменных
внутрь
строки.
В примере для
выше
используются
скобки
Метод format()
используется
вставки
значенийфигурные
переменных
внутрь
{} внутри строки для
обозначения
мест,
где
должны
быть
вставлеРис. 10. Форматирование
строк{} внутри строки для
строки. В примере выше используются
фигурные скобки
ны значения переменных. Передаем значения переменных name
обозначения мест, где должны быть вставлены значения переменных. Передаем
вставки
11format()
Метод
format() используется
значений
переменных
внутрь
значения
переменных
name и age в для
метод
в качестве
аргументов.
При
строки. В примере
используются
внутри строки для
выполнении
методвыше
format()
заменяет фигурные
фигурныескобки
скобки{} соответствующими
и age в метод format() в качестве аргументов. При выполнении метод
format() заменяет фигурные скобки соответствующими значениями переменных и формирует новую строку в результате. В данном
случае метод format() заменит {} на name и age, чтобы получилась
строка «My name is John and I’m 30 years old.».
На рис. 11 показан пример, описывающий методы строк. Меизменение
символов,
замена подстрок
на операции
другие подстроки
и многое
тоды регистра
строк позволяют
выполнять
различные
с символьдругое.ными данными, такие как изменение регистра символов, замена
подстрок на другие подстроки и многое другое.
Рис.
методовстрок
строк
Рис.11.
11.Описание
Описание методов
Код программы на языке Python создает переменную string
и присваивает
«Hello,
World!».
Он вызывает
несколько
Код
программыей
назначение
языке Python
создает
переменную
string
и присваивает
методов
на этой
строкеОн
и выводит
результат
их работы
нана
экран:
ей значение
"Hello,
World!".
вызывает
несколько
методов
этой строке и
– метод upper() используется для преобразования всех симвовыводит
результат их работы на экран:
лов строки в верхний регистр. В данном случае мы вызываем метод
–upper()
метод на
upper()
используется
преобразования
всех
строки в
переменной
string для
и выводим
результат
на символов
экран с помощью
функции
print().
В результате
выполнения
этой операции
верхний
регистр.
В данном
случае
мы вызываем
метод upper()
на переменной
на экране появится строка «HELLO, WORLD!»;
string и выводим результат на экран с помощью функции print(). В результате
– метод lower() используется для преобразования всех симвовыполнения
этой операции
экранеВпоявится
строкамы
"HELLO,
WORLD!";
лов строки
в нижний на
регистр.
данном случае
вызываем
метод
переменной
string для
и выводим
результатвсех
на символов
экран с по–lower()
метод на
lower()
используется
преобразования
строки в
мощью функции print(). В результате выполнения этой операции
нижний регистр. В данном случае мы вызываем метод lower() на переменной
на экране появится строка «hello, world!»;
string и выводим
экран с помощью
функции
print().
В результате
– методрезультат
replace() на
используется
для замены
одной
подстроки
выполнения
этойвоперации
экране случае
появится
"hello,
world!";
на другую
строке. Внаданном
мыстрока
вызываем
метод
replace()
на
переменной
string
и
передаем
два
аргумента
–
подстроку,
– метод replace() используется для замены одной подстроки на кодругую в
торую нужно заменить, и подстроку, на которую нужно заменить.
строке. В данном случае мы вызываем метод replace() на переменной string и
В результате выполнения этой операции на экране появится строка
передаем
дваWorld!»
аргумента
– подстроку,
которую
заменить,
и подстроку,
на
«Jello,
– символ
H в слове
«Hello»нужно
был заменен
на символ
J.
которую нужно заменить. В результате выполнения этой операции на экране
появится строка "Jello, World!" – символ H в слове "Hello" был заменен на
символ J.
12
Цикл for используется для перебора элементов в последовательности,
Циклы в Python
такой как строка, список или кортеж. Цикл for выполняет блок кода для каждого
ЦиклЦиклы
for используется
для перебора
последовательности,
в Python используются
для элементов
повторенияв определенного
элемента в последовательности. Рассмотрим пример, представленный на рис.
блока
кода несколько
В Python
основных
типа
циклов:
такой как
строка,
список илираз.
кортеж.
Циклесть
for два
выполняет
блок
кода
для каждого
12: for и while.
элемента в последовательности. Рассмотрим пример, представленный на рис.
Цикл[1,
for 2,
используется
для перебора
элементов
в последователь– список
3, 4, 5] сохраняется
в переменной
numbers;
12: ности, такой как строка, список или кортеж. Цикл for выполняет
– цикл for используется для перебора элементов в списке;
–блок
список
2, каждого
3, 4, 5] сохраняется
в переменной numbers;
кода[1,для
элемента в последовательности.
Рассмотрим
–пример,
переменная
number принимает
значение каждого элемента списка в
представленный
на
рис.
12:
– цикл for используется для перебора элементов в списке;
каждой–итерации
список [1,цикла;
2, 3, 4, 5] сохраняется в переменной numbers;
– переменная number принимает значение каждого элемента списка в
–
цикл
for
используется
для перебора
элементов
в списке;
– функция print() используется
для вывода
элемента
на экран.
каждой–итерации
цикла;
переменная number принимает значение каждого элемента
списка вprint()
каждой
итерации цикла;
– функция
используется
для вывода элемента на экран.
– функция print() используется для вывода элемента на экран.
Рис. 12. Описание работы for
Рис.
работыfor
for
Рис.12.
12.Описание
Описание работы
Цикл while используется для повторения блока кода, пока определенное
Цикл while используется для повторения блока кода, пока опреусловие истинно.
Цикл while проверяет условие перед каждой итерацией цикла.
Цикл
whileусловие
используется
для Цикл
повторения
блока кода,условие
пока определенное
деленное
истинно.
while проверяет
перед
Пример
на рис.итерацией
13 демонстрирует
работу на
цикла
while:
каждой
цикла.
Пример
рис.
13
демонстрирует
работу
условие истинно. Цикл while проверяет условие перед каждой итерацией цикла.
–цикла
переменная
while: i инициализируется значением 1;
Пример на рис. 13 демонстрирует работу цикла while:
–
переменная
i инициализируется
значением
– цикл while используется
для вывода
чисел от1;1 до 5;
––переменная
i
инициализируется
значением
цикл while используется для вывода чисел 1;
от 1 до 5;
– условие i <= 5 проверяется перед каждой итерацией цикла;
–
условие
i
<=
5
проверяется
перед
каждой
итерацией
– цикл while используется для вывода чисел от 1 до 5; цикла;
––функция
функцияprint()
print()используется
используетсядля
длявывода
выводачисла
числананаэкран;
экран;
– условие i <= 5 проверяется перед каждой итерацией цикла;
–
значение
переменной
i
увеличивается
на
1
в
каждой
итерации
– значение переменной i увеличивается на 1 в каждой итерации
цикла.
– функция
print()
используется
для
вывода
числа
на
экран;
цикла.
– значение переменной i увеличивается на 1 в каждой итерации цикла.
Рис.
работыwhile
while
Рис.13.
13.Описание
Описание работы
Рис. 13. Описание работы while
13
При работе с циклами в Python необходимо учитывать их особенности,
такие
как
использование
range()
для
создания
последовательностей,
использование break, continue и pass для управления циклами, а также
При работе с циклами в Python необходимо учитывать их осопринципы работы циклов и их эффективность. При правильном использовании
бенности, такие как использование range() для создания последоциклов вательностей,
в Python можно
ускорить выполнение
программ
и реализовать
использование
break, continue
и pass для
управленияболее
циклами,
сложные
задачи. а также принципы работы циклов и их эффективность.
При
правильном
циклов
в Python
ускорить
В примере
на рис.использовании
14 мы используем
цикл
for дляможно
перебора
элементов
выполнение программ и реализовать более сложные задачи.
списка fruits, содержащего три элемента – "apple", "banana" и "cherry".
В примере на рис. 14 мы используем цикл for для перебора элеПеременная
fruit
– это
временная
переменная,
которая
принимает
значение
ментов
списка
fruits,
содержащего
три элемента
– «apple»,
«banana»
fruit на
– это
временная
переменная,
каждогои «cherry».
элементаПеременная
списка fruits
каждой
итерации
цикла. которая
Используем
принимает значение каждого элемента списка fruits на каждой итефункцию print() для вывода значения этой переменной на экран. В результате
рации цикла. Используем функцию print() для вывода значения
выполнения
этой программы
на Вэкране
появятся
три строки,
содержащие
этой переменной
на экран.
результате
выполнения
этой программыэлементов
на экранесписка
появятся
строки,"banana"
содержащие
значения элемензначения
fruitsтри
– "apple",
и "cherry".
тов списка fruits – «apple», «banana» и «cherry».
Рис.Рис.
14. 14.
Описание
цикла
элементов
Описание
циклаfor
forдля
для перебора
перебора элементов
В примере на рис. 15 мы используем цикл while для вывода чисел
0 до 4. на
Переменная
инициализируется
значением
0, затем
Вот
примере
рис. 15 мыcount
используем
цикл while для
вывода чисел
от 0 до
на каждой итерации цикла выводим значение переменной и уве4. Переменная count инициализируется значением 0, затем на каждой итерации
личиваем ее на 1. Цикл while используется для повторения одного
цикла выводим
значение пока
переменной
увеличиваем
ее Вна
1. Цикл
и того же действия,
заданноеи условие
истинно.
данном
слу- while
используется
для повторения
и тогоповторять
же действия,
пока
заданное
условие
чае используется
цикл одного
while, чтобы
вывод
значения
переменной
i
на
экран
до
тех
пор,
пока
i
меньше
5.
На
каждой
итерации
истинно. В данном случае используется цикл while, чтобы повторять вывод
цикла значение переменной i увеличивается на 1 с помощью операзначения переменной i на экран до тех пор, пока i меньше 5. На каждой
тора +=. Это позволяет нам постепенно увеличивать значение пеитерации
цикла iзначение
i увеличивается
назначения
1 с помощью
ременной
на каждойпеременной
итерации, пока
оно не достигнет
5.
В
результате
выполнения
этой
программы
на
экране
появятся
пять
оператора +=. Это позволяет нам постепенно увеличивать значение переменной
строк, содержащих значения переменной i от 0 до 4.
i на каждой итерации, пока оно не достигнет значения 5. В результате
выполнения этой программы на экране появятся пять строк, содержащих
значения переменной i от 0 до 4.
Рис.
циклаwhile
while
Рис.15.
15.Описание
Описание цикла
14цикл
for для перебора элементов списка
В примере на рис. 16 используем
fruits, содержащего три элемента – "apple", "banana" и "cherry". Здесь
Рис. 15. Описание цикла while
В примере на рис. 16 используем цикл for для перебора элементов списка
В примере на рис. 16 используем цикл for для перебора элеменfruits, тов
содержащего
трисодержащего
элемента –три"apple",
"banana"
и "cherry".
списка fruits,
элемента
– «apple»,
«banana» Здесь
используется
цикл
for используется
для переборацикл
всех for
элементов
списка
и элеменвывода их на
и «cherry».
Здесь
для перебора
всех
списка
и вывода
их наэлемент
экран. Однако
если
встречается
элемент
экран. тов
Однако
если
встречается
"banana",
цикл
прерывается.
«banana», цикл прерывается.
Рис.
16.16.Описание
дляперебора
перебораэлементов
элементов
Рис.
Описаниецикла
цикла for
for для
Ключевое слово break используется для прерывания цикла,
в котором слово
оно находится.
В данном случае
мы используем
Ключевое
break используется
для прерывания
цикла,оператор
в котором оно
if для проверки, является ли текущий элемент списка fruits равным
находится. В данном случае мы используем оператор if для проверки, является
«banana». Если это так, используем break, чтобы прервать выполнели текущий
элемент
списка
fruits
"banana".используем
Если это так,
используем
ние цикла.
Если
элемент
не равным
равен «banana»,
функцию
выводавыполнение
значения этого
элемента
экран. не
Прерывание
break, print()
чтобы для
прервать
цикла.
Если на
элемент
равен "banana",
цикла
может
быть
полезным
в
различных
ситуациях,
например,
используем функцию print() для вывода значения этого элемента на экран.
когда нужно найти определенный элемент в списке или выполПрерывание цикла может быть полезным в различных ситуациях, например,
нить действие до определенного момента. При этом если условие,
когда нужно
найти
определенный
элемент
в списке или выполнить
до
которое
вызывает
прерывание,
не выполняется,
цикл будетдействие
продолжаться
до конца.
определенного
момента.
При этом если условие, которое вызывает прерывание,
не выполняется, цикл будет продолжаться до конца.
Условия в Python
Условия в Python используются для выполнения различных
действийв Python
в зависимости от того, выполняется определенное услоУсловия
вие или нет. В Python
условия проверяются
помощьювоператоров
Используются
для выполнения
различных сдействий
зависимости от
сравнения, таких как ==, !=, <, >, <= и >=.
того, выполняется определенное условие или нет. В Python условия
Условные операторы в Python позволяют программисту управпроверяются
с помощью
операторов
сравнения,
таких как ==,от
!=,выполне<, >, <= и >=.
лять потоком
выполнения
программы
в зависимости
ния определенных условий. В Python есть два основных типа условных операторов: if и else. Также существует оператор elif, который
позволяет проверять несколько условий.
15
– переменная x инициализируется значением 5;
существует оператор elif, который позволяет проверять несколько условий.
– условие x > 0 проверяется;
Пример на рис. 17 показывает код применения условного оператора if:
– если
условие
истинно,
то выполняется
блок кода,
который
выводит
Пример
на
рис.
17 показывает
код применения
условного
опе– переменная
x инициализируется
значением
5;
if:
строкуратора
на экран.
– условие x > 0 проверяется;
– переменная x инициализируется значением 5;
–– если
условие
истинно, то выполняется блок кода, который выводит
условие
x > 0 проверяется;
условие истинно, то выполняется блок кода, который вывостроку–наесли
экран.
дит строку на экран.
Рис. 17. Код применения условного оператора if
Пример на рис. 18 показывает, как применяется оператор if-elif:
Рис.
17.17.Код
оператора
Рис.
Кодприменения
применения условного
условного оператора
if if
– переменная x инициализируется значением -5;
Пример на рис. 18 показывает, как применяется оператор if-elif:
– условие x > 0 проверяется;
– переменная
инициализируется
значением -5;
Пример
на рис.x18
показывает, как применяется
оператор if-elif:
–– если
условие
ложно,
то
выполняется
блок
кода, который выводит
условие x > 0 проверяется;
– переменная x инициализируется значением -5;
если условие
ложно, то выполняется блок кода, который выводит
другую–строку
на экран.
– условие
x
>
0
проверяется;
другую строку на экран.
– если условие ложно, то выполняется блок кода, который выводит
другую строку на экран.
Рис.
18.18.Пример
оператораif-elif
if-elif
Рис.
Примерприменение
применения оператора
Пример на рис. 19 демонстрирует описание оператора if-elif-else:
– переменная
инициализируется
значением
0;
Пример
на рис.x19
демонстрирует описание
оператора
if-elif-else:
Рис. 18. Пример применение оператора if-elif
– условие x > 0 проверяется;
– переменная x инициализируется значением 0;
––если
это условие
ложно,
то выполняется
блок условие
кода, который
если иусловие
ложно,
то проверяется
следующее
x == 0;выводит
––условие
x
>
0
проверяется;
если и
это
условие
ложно, то выполняется
блок кода,
который
другую
строку
экран.
Пример
нана
рис.
19 демонстрирует
описание оператора
if-elif-else:
выводит
другую
строку
на экран. следующее условие x == 0;
– если
условие
ложно,
то проверяется
– переменная x инициализируется значением 0;
– условие x > 0 проверяется;
– если условие ложно, то проверяется следующее условие x == 0;
Рис.
19.19.Пример
оператораif-elif-else
if-elif-else
Рис.
Примерприменение
применения оператора
16
Условные операторы if, else и elif позволяют проверять различные
условия и выполнять соответствующие действия.
Условные операторы if, else и elif позволяют проверять различные
условия и выполнять соответствующие действия.
Условные операторы if, else и elif позволяют проверять различПример
на рис.
20 показывает
код программы
на языке Python, который
ные условия
и выполнять
соответствующие
действия.
Пример
на рис.оператора
20 показывает
код программы на языке Python,
демонстрирует
описание
if-else.
который демонстрирует описание оператора if-else.
Рис.
20.Пример
Примерприменение
применения оператора
Рис.
20.
оператораif-else
if-else
Этот код запрашивает у пользователя ввод числа, затем использует
if-else, чтобы
проверить, является
ли введенное
Этот оператор
код запрашивает
у пользователя
ввод числа,
затем чисиспользует
ло больше нуля или меньше или равно нулю. В зависимости от реоператор if-else, чтобы проверить, является ли введенное число больше нуля
зультата проверки программа выводит соответствующее сообщение
или меньше
или равно нулю. В зависимости от результата проверки программа
на экран.
Оператор if-else используется
выполнения разных действий
выводит соответствующее
сообщение надля
экран.
в зависимости от того, выполняется заданное условие или нет.
Оператор if-else используется для выполнения разных действий в
В данном случае мы используем оператор if для проверки, является
зависимости
от того,
выполняется
ли заданное
условие
или нет.
В данном
ли введенное
число
больше нуля.
Если это так,
используем
функслучаецию
мы print()
используем
оператор
if для проверки,
является
введенное
для вывода
сообщения,
что число
большели
нуля.
В про- число
случае
оператор
else, чтобы
большетивном
нуля. Если
этоиспользуем
так, используем
функцию
print()выполнить
для выводадругое
сообщения,
действие – вывод сообщения, что число меньше или равно нулю.
что число больше нуля. В противном случае используем оператор else, чтобы
В результате выполнения этой программы на экране появится одно
выполнить
другое
действие
– вывод сообщения,
что число
или равно
из двух
сообщений,
в зависимости
от того, какое
число меньше
было введено пользователем.
Оператор if-else может использоваться для выполнения различных действий в зависимости от любого условия, которое можно выразить в виде логического выражения. Этот оператор может также
использоваться для проверки других условий, таких как равенство,
неравенство, сравнение строк и т. д. Кроме того, можно использовать множественные операторы if-else, чтобы проверять несколько условий и выполнять соответствующие действия в зависимости
от выполнения каждого условия.
В примере на рис. 21 используется оператор elif для проверки,
является ли значение переменной x отрицательным, равным нулю
17
В примере на рис. 21 используется оператор elif для проверки, является ли
значение переменной x отрицательным, равным нулю или положительным. В
зависимости от результата проверки программа выводит соответствующее
или положительным. В зависимости от результата проверки просообщение
на экран.
грамма выводит соответствующее сообщение на экран.
Рис.
оператораelif
elifдля
для
проверки
Рис.21.
21.Описание
Описание оператора
проверки
Оператор elif является сокращением от else if. Он используется
для проверки
дополнительных
условий,
если
условие
Оператор
elif является
сокращением
от else
if. первое
Он используется
для
(определенное
оператором
if) не если
выполняется.
данном (определенное
случае
проверки
дополнительных
условий,
первое В
условие
нами используется оператор if для проверки, является ли значение
оператором if) не выполняется. В данном случае нами используется оператор if
переменной x отрицательным. Если это так, используем функцию
для проверки,
является
значение переменной
x отрицательным.
print() для
выводали
сообщения,
что «x отрицательное
число».Если
Еслиэто так,
значение
переменной
отрицательное,
переходим
следующеиспользуем
функцию
print()x не
для
вывода сообщения,
чток "x
отрицательное
му условию с помощью оператора elif. Здесь мы проверяем, равно
число". Если значение переменной x не отрицательное, переходим к
ли значение переменной x нулю. Если это так, используем функследующему
условию
с помощью
оператора
Здесь
мы Если
проверяем,
равно ли
цию print()
для вывода
сообщения,
что xelif.
равно
нулю.
ни одно
из первых
двух условий
выполняется,
используем оператор
значение
переменной
x нулю.неЕсли
это так, используем
функцию else,
print() для
чтобы выполнить другое действие – печать сообщения «x положивывода сообщения, что x равно нулю. Если ни одно из первых двух условий не
тельное число».
Оператор elif может использоваться для проверки нескольких
дополнительных условий и выполнения соответствующих действий в зависимости от их выполнения. Если ни одно из условий
не выполняется, можно использовать оператор else, чтобы выполнить действие по умолчанию.
Коллекции в Python
В Python существует несколько типов коллекций, которые позволяют хранить множество объектов в одном месте.
Коллекции (collections) – структуры данных в Python, которые позволяют хранить и обрабатывать данные в виде коллекций.
Коллекции в Python включают в себя кортежи, списки, словари
и множества.
18
включают в себя кортежи, списки, словари и множества.
Кортежи в Python – упорядоченные коллекции объектов, которые могут
содержать объекты разных типов. Кортежи являются неизменяемыми, то есть
Кортежи в Python – упорядоченные коллекции объектов, котоэлементы кортежа не могут быть изменены, добавлены или удалены.
рые могут содержать объекты разных типов. Кортежи являются неДля
работы с кортежами
используются
следующие
изменяемыми,
то есть элементы
кортежа
не могут операторы:
быть изменены,
–добавлены
my_tuple =или
(1, удалены.
2, 3, 4, 5) # создание кортежа;
Для
работы
с кортежами
используются
– print(my_tuple[0])
# обращение
к элементуследующие
кортежа пооператоры:
индексу;
– my_tuple = (1, 2, 3, 4, 5) # создание кортежа;
––print(len(my_tuple))
определение
длины кортежа.
print(my_tuple[0]) ##обращение
к элементу
кортежа по индексу;
В
примере
на
рис.
22
мы
создаем
кортеж
dimensions,
– print(len(my_tuple)) # определение длины кортежа. который содержит
В примере
на рис.и 22высоту
мы создаем
кортеж
dimensions,
который
два элемента
– ширину
экрана.
Программа
выводит
на экран
содержит два элемента – ширину и высоту экрана. Программа выинформацию о кортеже. Для доступа к элементам кортежа используется
водит на экран информацию о кортеже. Для доступа к элементам
оператор
индексации
[] и оператор
соответствующие
индексы.
Значения элементов
кортежа
используется
индексации
[] и соответствующие
индексы.
Значения
выводятся на
экран вместе с соответвыводятся
на экран
вместеэлементов
с соответствующими
сообщениями.
ствующими сообщениями.
Рис.22.
22. Создание
Создание кортежа
Рис.
кортежа
Программа выводит информацию о кортеже dimensions, используя оператор индексации для доступа к его элементам. Кортежи являются неизменяемыми объектами, поэтому их элементы
не могут быть изменены после создания.
Списки – упорядоченные коллекции объектов, которые могут
содержать объекты разных типов. Списки могут быть изменяемыми, то есть элементы списка могут быть изменены, добавлены или
удалены.
Для работы со списками используются следующие операторы:
– my_list = [1, 2, 3, 4, 5] # создание списка;
– print(my_list[0]) # обращение к элементу списка по индексу;
– my_list[0] = 6 # изменение элемента списка по индексу;
– my_list.append(6) # добавление элемента в конец списка;
– del my_list[0] # удаление элемента из списка;
– print(len(my_list)) # определение длины списка.
Пример на рис. 23 показывает, как создается список numbers,
который содержит 11 элементов. Программа выводит на экран информацию о списке, используя несколько функций и методов:
19
– функция len() используется для определения количества элементов в списке numbers. Результат выводится на экран;
– для доступа к первому элементу списка используется оператор
индексации [] и индекс 0. Значение этого элемента выводится
на экран;
– для доступа к последнему элементу списка используется отрицательный индекс -1. Значение этого элемента выводится на экран;
– функция sum() используется для нахождения суммы всех элементов в списке numbers. Результат выводится на экран;
– для нахождения среднего значения всех элементов в списке сумма всех элементов делится на количество элементов. Результат
выводится на экран;
– с помощью оператора in проверяется, содержится ли число 5
в списке numbers. Если да, то метод count() используется для подсчета
количества
вхождений
элемента
5 в списке.
Результат
вывовхождений
элемента
5 в списке.
Результат
выводится
на экран.
Если
число 5 не
дится на экран. Если число 5 не содержится в списке, выводится
содержится в списке, выводится другое сообщение.
другое сообщение.
Рис.
Созданиесписка
списка
Рис. 23.
23. Создание
Программа
выводит
информацию
о списке
numbers,
используя
различные
Программа
выводит
информацию
о списке
numbers,
испольфункции
методы, ифункции
выполняет
несколько
простых операций
на простых
этом списке.
зуя и
различные
и методы,
и выполняет
несколько
операций
на
этом
списке.
Словари в Python – неупорядоченные коллекции объектов, которые
Словари в Python – неупорядоченные коллекции объектов, кохранятся в виде пар «ключ-значение». Ключи словаря должны быть
торые хранятся в виде пар «ключ-значение». Ключи словаря должуникальными,
а значения могут
быть любого
могут быть
ны быть уникальными,
а значения
могуттипа
бытьданных.
любого Словари
типа данных.
Словари могут
изменяемыми,
тоизменены,
есть значения
могут быть
изменяемыми,
то естьбыть
значения
могут быть
добавлены
или изудалены.
менены, добавлены или удалены.
Для работы со словарями используются следующие операторы:
– my_dict = {"name": "John", "age": 30, "city": "New York"} # создание
20
словаря;
Для работы со словарями используются следующие операторы:
– my_dict = {“name”: “John”, “age”: 30, “city”: “New York”} # создание словаря;
– print(my_dict[«name»])# выводит «John» # доступ к значению
по ключу;
– my_dict[«age»] = 31 # изменение значения по ключу;
– my_dict[«gender»] = «male» # добавление новой пары «ключ-значение»;
– del my_dict[«city»] # удаление пары «ключ-значение»;
– print(len(my_dict)) # определение количества элементов в словаре.
На рис. 24 представлен код программы «Словари», который
создает словарь person, содержащий информацию о человеке: его
имени, возрасте и городе проживания. Программа выполняет несколько операций на словаре и выводит результаты на экран:
– функция print() используется для вывода на экран содержимого
person;
– словаря
используя
оператор индексации [], значение ключа "age" в словаре
– используя оператор индексации [], значение ключа «age» в слоperson изменяется
на 31. Новый
"job"
его изначение
"Developer"
варе person изменяется
на 31.ключ
Новый
ключи «job»
его значение
добавляются
в словарь
person; в словарь person;
«Developer»
добавляются
–
items()
проходится
по всем
ключам
– сс помощью
помощьюцикла
циклаforforи метода
и метода
items()
проходится
по всем
ключам и
и значениям в словаре person и выводит их на экран в формате
значениям в словаре person и выводит их на экран в формате «ключ-значение».
«ключ-значение».
Рис.
программы«Словари»
«Словари»
Рис.24.
24. Код
Код программы
Программа выполняет несколько операций на словаре person,
Программа
несколько
на словаре
person,
изменяя его
изменяя
еговыполняет
содержимое
и выводяопераций
информацию
о ключах
и значениях наиэкран.
Словари
представляют
собой
колсодержимое
выводя
информацию
о ключах
и неупорядоченные
значениях на экран.
Словари
представляют собой неупорядоченные коллекции пар «ключ-значение», которые
21 и обработки структурированных
могут быть использованы для хранения
данных.
лекции пар «ключ-значение», которые могут быть использованы
для хранения и обработки структурированных данных.
Множества в Python – неупорядоченные коллекции уникальных элементов. Множества могут быть изменяемыми, то есть элементы могут быть добавлены или удалены.
Для работы с множествами используются следующие операторы:
– my_set = {1, 2, 3, 4, 5} # создание множества;
– my_set.add(6) # добавление элемента в множество;
– my_set.remove(1) # удаление элемента из множества;
– print(3 in my_set) # проверка наличия элемента в множестве;
рис. 25 показан #программный
код, который
создает два
множества –
–Наprint(len(my_set))
определение количества
элементов
в множеset1 и set2,
стве.содержащие несколько элементов. Программа выполняет несколько
25 показан
программный
код, который
операцийНа
на рис.
множествах
и выводит
результаты
на экран:создает два множества – set1 и set2, содержащие несколько элементов. Программа
– функции print() используются для вывода на экран содержимого
выполняет несколько операций на множествах и выводит результамножеств
и set2;
ты наset1
экран:
–– функции
print()
используются
вывода наобъединения
экран содержимого
метод union()
используется
длядля
нахождения
множеств set1
множеств set1 и set2;
и set2. Результат выводится на экран;
– метод union() используется для нахождения объединения мно– жеств
метод set1
intersection()
используется
для нахождения
и set2. Результат
выводится
на экран; пересечения множеств
метод
intersection()
используется
set1 и–set2.
Результат
выводится
на экран; для нахождения пересечения
set1 и set2.
Результат выводится
– множеств
метод difference()
используется
дважды – на
дляэкран;
нахождения разности set1
– метод difference() используется дважды – для нахождения разно− set2 и set2 − set1. Результаты выводятся на экран.
сти set1 – set2 и set2 – set1. Результаты выводятся на экран.
Рис.
Примерописания
описаниямножеств
множеств
Рис. 25.
25. Пример
Программа выполняет несколько операций на множествах set1 и set2,
используя соответствующие методы, и выводит результаты на экран.
22
Множества представляют собой неупорядоченные
коллекции уникальных
элементов, которые могут быть использованы для выполнения различных
Программа выполняет несколько операций на множествах set1
и set2, используя соответствующие методы, и выводит результаты
на экран. Множества представляют собой неупорядоченные коллекции уникальных элементов, которые могут быть использованы
для выполнения различных операций над элементами.
Тема 2. Файлы, модули и функции в Python
Работа с файлами в Python
Работа с файлами позволяет считывать данные из файлов
и записывать данные в файлы. В Python используются различные
методы для работы с файлами, которые позволяют открывать файлы, считывать данные из файлов, записывать данные в файлы,
закрывать файлы и так далее.
Для открытия файла в Python используется функция open().
Она принимает два аргумента: имя файла и режим открытия файла.
Выделяют следующие режимы открытия файла:
«r» – открыть файл для чтения (по умолчанию);
«w» – открыть файл для записи, содержимое файла удаляется,
если файл не существует, то создается новый файл;
«x» – открыть файл для записи, но только если файл не существует;
«a» – открыть файл для записи в конец файла, содержимое файла не удаляется;
«b» – открыть файл в бинарном режиме;
«t» – открыть файл в текстовом режиме (по умолчанию);
«+» – открыть файл для чтения и записи.
Для чтения данных из файла в Python используется метод read().
Этот метод считывает все содержимое файла и возвращает его
в виде строки.
Для записи данных в файл в Python используется метод write().
Этот метод записывает данные в файл.
После того как работа с файлом завершена, его необходимо
закрыть, чтобы освободить ресурсы. Для закрытия файла в Python
используется метод close().
23
В табл. 1 представлены примеры записи программного кода
для основных операций, которые можно производить с файлами.
content = file.read()
Таблица 1
print(content)
Основные операции с файлами
file.close()
Операция
Запись данных в файл
Открытие файла
Чтение данных из файла
Пример записи кода программы
file = open("test.txt", "w")
file = open(«test.txt», «r»)
file.write("Hello,
World!") «r»)
file = open(«test.txt»,
content = file.read()
file.close()
print(content)
file.close()
Закрытие файла
Запись данных в файл
file = open("test.txt", "r")
file = open(«test.txt», «w»)
content =file.write(«Hello,
file.read()
World!»)
file.close()
Закрытие файла
file.close()
file = open(«test.txt», «r»)
content = file.read()
file.close()
Код (рис. 26) показывает пример программы для чтения содержимого
Код (рис.
26)экран.
показывает пример программы для чтения содерфайла и вывода
его на
жимого файла и вывода его на экран.
Рис.
26.
содержимого
файла
Рис.
26.Чтение
Чтение ии вывод
вывод содержимого
файла
Эта Эта
программа
использует
функцию
open()
для для
открытия
файла
с именем
программа
использует
функцию
open()
открытия
файла
с именем
«example.txt»
в режиме
чтения
(«r»). Онаоператор
использует
опе"example.txt"
в режиме
чтения
("r"). Она
использует
with,
который
ратор with, который автоматически закрывает файл после окончаавтоматически закрывает файл после окончания работы с ним и позволяет
ния работы с ним и позволяет избежать проблем с утечкой ресуризбежать
утечкой
ресурсов.
Внутри
блока with
программа
считывает
сов.проблем
Внутри сблока
with
программа
считывает
содержимое
файла
в переменную
с помощью
read().метода
Программа
содержимое
файла в content
переменную
contentметода
с помощью
read().вывоПрограмма
дит
содержимое
файла
на
экран
с
помощью
функции
print().
Совыводит содержимое файла на экран с помощью функции print(). Содержимое
выводится в виде одной строки, так как метод read() сохраняет все содержимое
24
файла в одну строку.
Код (рис. 27) показывает программу для записи строки в файл. Эта
программа
использует
функцию
open()
для так
открытия
файла
именем
держимое
выводится
в виде одной
строки,
как метод
read()с соКод (рис. 27) показывает программу для записи строки в файл. Эта
храняет ввсе
содержимое
строку.
"example.txt"
режиме
записифайла
("w").в одну
Она использует
оператор with, который
программаКодиспользует
функцию программу
open() для
открытия
файла с именем
(рис.
27)
показывает
для
записи
автоматически закрывает файл после окончания работыстроки
с нимв ифайл.
позволяет
Эта программа
использует
функцию
open() для оператор
открытия with,
файла
"example.txt"
в режиме
записи ("w").
Она использует
который
избежать проблем с утечкой ресурсов. Внутри блока with программа записывает
с именем «example.txt» в режиме записи («w»). Она использует опеавтоматически закрывает файл после окончания работы с ним и позволяет
строкуратор
"Hello,
world!"
в файл
с помощьюзакрывает
метода write().
Программа
выводит
with,
который
автоматически
файл после
окончаизбежать
проблем
с
утечкой
ресурсов.
Внутри
блока
with
программа
записывает
ния работы
с ним и
позволяет
проблем
с утечкой
сообщение
об успешной
записи
в файлизбежать
с помощью
функции
print(). ресурстрокусов.
"Hello,
world!"
в
файл
с
помощью
метода
write().
Программа
выводит
Внутри блока with программа записывает строку «Hello,
world!»
в файл
помощьюзаписи
методавwrite().
выводитprint().
сообщение
сообщение
обсуспешной
файл с Программа
помощью функции
об успешной записи в файл с помощью функции print().
Рис. 27. Запись строки в файл
Рис.
27. Запись
строки
вв
файл
Рис.
27.
Запись
строки
файл
Программа позволяет
быстро
и легко
записать
строку в файл. Если файл с
Программа
позволяет
быстро
и легко
записатьбудет
строку
в файл. новой
указанным
именем уже
существует,
то его
содержимое
заменено
Если
файл
с
указанным
именем
уже
существует,
то
его
содержимое
Программа
позволяет
быстротои он
легко
записать
строкой.
Если файл
не существует,
будет
создан.строку в файл. Если файл с
будет заменено новой строкой. Если файл не существует, то он бууказанным
именем
существует,
то его содержимое
будет заменено
новой
Кодсоздан.
(рис.
28)уже
показывает
программу,
которая считывает
содержимое
дет
строкой.
Если
файл
не существует,
то
он будет создан.
Код (рис.
28)
показывает
программу,
которая считывает содерфайла построчно
и выводит
его на экран.
жимое
файла
построчно
и
выводит
его
на
экран. считывает содержимое
Код (рис. 28) показывает программу, которая
файла построчно и выводит его на экран.
Рис.
содержимогофайла
файла
Рис.28.
28.Считывание
Считывание содержимого
Эта программа использует функцию open() для открытия файла
Рис.
28. Считывание
содержимого
файла
программа
использует
функцию
open()
дляОна
открытия
файлаопес именем
сЭта
именем
«example.txt»
в режиме
чтения
(«r»).
использует
ратор with,
который
автоматически
файл
после оконча"example.txt"
в режиме
чтения
("r"). Оназакрывает
использует
оператор
with, который
ния работы с ним и позволяет избежать проблем с утечкой ресурсов.
автоматически
закрывает
файл после
окончания
работы
с ним
и позволяет
Эта программа
использует
функцию
open() для
открытия
файла
с именем
"example.txt" в режиме чтения ("r").
Она
25
использует оператор with, который
автоматически закрывает файл после окончания работы с ним и позволяет
избежать проблем с утечкой ресурсов. Внутри блока with программа использует
Внутри
блока
with программа
использует
for для считывания
цикл
for для
считывания
содержимого
файлацикл
построчно.
Каждая строка
содержимого
файла построчно.
Каждая
считывается
пересчитывается
в переменную
line, которая
затем строка
выводится
на экран с впомощью
менную line, которая затем выводится на экран с помощью функции print(). Метод strip() используется для удаления символов
строки (\n) в конце каждой строки. Программа заканчивает работу, когда все
переноса строки (\n) в конце каждой строки. Программа заканчистроки
были
прочитаны.
вает файла
работу,
когда
все строки файла были прочитаны.
Программа
быстро
и легко
прочитать
и вывести
на экран
Программапозволяет
позволяет
быстро
и легко
прочитать
и вывести
на экран содержимое
файлаЭто
построчно.
Это может
быть
полезно,для
содержимое
файла построчно.
может быть
полезно,
например,
например,
для
обработки
больших
текстовых
файлов,
где
требуется
обработки больших текстовых файлов, где требуется построчное чтение.
построчное
Код (рис. чтение.
29) показывает программу, которая считывает содержимое
Код (рис. 29) показывает программу, которая считывает содерфайла, изменяет его и записывает обратно в файл.
жимое файла, изменяет его и записывает обратно в файл.
функции print(). Метод strip() используется для удаления символов переноса
Рис. 29.
Действия сс содержимым
Рис.
29. Действия
содержимым файла
файла
Программа использует функцию open() для открытия файла
Программа
используетв функцию
open() для
открытия
файла с именем
с именем
«example.txt»
режиме чтения
(«r»).
Она использует
опе-
ратор with,в который
автоматически
после
оконча"example.txt"
режиме чтения
("r"). Она закрывает
использует файл
оператор
with,
который
ния работы закрывает
с ним и позволяет
проблем
ресуравтоматически
файл послеизбежать
окончания
работы ссутечкой
ним и позволяет
сов. Внутри блока with программа считывает содержимое файла
в переменную content с помощью метода read(). Программа изсодержимое файла в переменную content с помощью метода read(). Программа
меняет содержимое файла, заменяя все вхождения слова «world»
изменяет
содержимое
файла, заменяя
все вхождения
слова "world"
на "Python".
на «Python».
Измененное
содержимое
сохраняется
в переменную
Измененное
содержимое
сохраняется
в переменную
modified_content.
После
modified_content.
После
этого программа
открывает
файл для запиэтого
программа
открываетоператор
файл для with
записи
и использует оператор
with
си («w»)
и использует
для("w")
автоматического
закрытия
файла.
Она
записывает
измененное
содержимое
в
файл
с
помощью
для автоматического закрытия файла. Она записывает измененное содержимое в
метода
write().метода
Программа
сообщение
об успешной
файл
с помощью
write().выводит
Программа
выводит сообщение
об записи
успешной
в файл с помощью функции print().
записи в файл с помощью функции print().
Программа позволяет быстро и легко изменить содержимое
файла, сохранить изменения и вывести сообщение об успешной
записи.
избежать проблем с утечкой ресурсов. Внутри блока with программа считывает
26
Функции в Python
Функция – это блок кода, который может принимать входные аргументы и
Функции в Python
возвращать результаты. Функции в Python – блоки кода, которые могут быть
Функция – это блок кода, который может принимать входные
аргументы и возвращать результаты. Функции в Python – блоки
большие
на более
мелкие
и легкоизуправляемые
блокипрограммы.
кода. Функции
кода, программы
которые могут
быть
вызваны
других частей
упрощают
написание
позволяют
избежатьбольшие
дублирование
кода и повторное
Функции
в Pythonкода,
позволяют
разбивать
программы
на более мелкие кода.
и легко управляемые блоки кода. Функции упрощают
использование
написание
кода,функции
позволяют
избежать
дублирование
кода иаргументов
повтор- в
Определение
состоит
из имени
функции, списка
ное
использование
кода.
скобках и блока кода, который выполняется при вызове функции. В Python
Определение функции состоит из имени функции, списка
функция объявляется с помощью ключевого слова def, за которым следует имя
аргументов в скобках и блока кода, который выполняется при выфункции,
а затем скобки,
в которых
входные
аргументы.
Тело
зове функции.
В Python
функцияуказываются
объявляется
с помощью
ключефункции
начинается
отступа следует
и может имя
содержать
любой
допустимый
вого слова
def, за скоторым
функции,
а затем
скобки,код
в которых
указываются
входныерезультаты
аргументы.с Тело
функции
начинаPython.
Функция
может возвращать
помощью
ключевого
слова
ется
с
отступа
и
может
содержать
любой
допустимый
код
Python.
return. Она вызывается путем указания ее имени и передачи аргументов в
Функция может возвращать результаты с помощью ключевого
скобках.
слова return. Она вызывается путем указания ее имени и передачи
Функции могут принимать аргументы. Аргументы могут быть
аргументов в скобках.
обязательными или необязательными. Обязательные аргументы должны быть
Функции могут принимать аргументы. Аргументы могут быть
переданы
функции. Необязательные
аргументы Обязательные
имеют значения аргументы
по умолчанию
обязательными
или необязательными.
и могут
бытьбыть
не переданы
функции.
должны
переданы
функции. Необязательные аргументы имеют На
значения
умолчаниюпример
и могут
быть не
переданы функции.
рис. 30 по
представлены
функции
с обязательными
аргументами
На
рис.
30
представлены
пример
функции
с
обязательными
и пример функции с необязательными аргументами.
аргументами и пример функции с необязательными аргументами.
вызваны из других частей программы. Функции в Python позволяют разбивать
Рис. 30. Описание функции с обязательными/необязательными
аргументами
Функции в Python могут быть вызваны из других частей программы с помощью имени функции и передачи необходимых аргументов.
27
Функции в Python могут быть вызваны из других частей программы с
помощью имени функции и передачи необходимых аргументов.
На рис. 31 представлены примеры описания использования функций в
НаПрограмма
рис. 31 представлены
примеры
описания factorial(),
использования
программе.
использует три
разные функции:
is_prime() и
функций в программе. Программа использует три разные функget_primes_until(). Она запрашивает у пользователя число, вычисляет его
ции: factorial(), is_prime() и get_primes_until(). Она запрашивает
факториал
с помощью
функции
factorial(),
а затем находит
список
простых
у пользователя
число,
вычисляет
его факториал
с помощью
функfactorial(),
а затем
находитфункций
список простых
чисел
до этого чисчисел ции
до этого
числа
с помощью
is_prime()
и get_primes_until()
и
ла с помощью функций is_prime() и get_primes_until() и выводит
выводит их на экран.
их на экран.
Рис. 31. Примеры описания использования функций
28
Представим пошаговое объяснение, что делает каждая строка
кода в этой программе:
– объявляет функцию factorial(), которая принимает один аргумент
n и вычисляет его факториал;
– проверяет, является ли n равным 0;
– возвращает 1, если n равен 0;
– возвращает n умноженное на факториал (n - 1), если n не равен 0;
– объявляет функцию is_prime(), которая принимает один аргумент n и проверяет, является ли n простым числом;
– возвращает False, если n меньше или равен 1;
– используя оператор for, программа перебирает числа от 2 до квадратного корня из n + 1;
– проверяет, делится ли n на i без остатка, и возвращает False, если
делится;
– возвращает True, если n является простым числом;
– объявляет функцию get_primes_until(), которая принимает один
аргумент n и возвращает список простых чисел до n;
– создает пустой список primes;
– используя оператор for, программа перебирает числа от 2 до n + 1;
– проверяет, является ли i простым числом с помощью функции
is_prime(), и добавляет его в список primes, если является;
– возвращает список простых чисел;
– запрашивает у пользователя число и преобразует его в целое число;
– вычисляет факториал числа num с помощью функции factorial()
и сохраняет результат в переменную fact;
– выводит сообщение о том, что был вычислен факториал числа
num и его значение;
– находит список простых чисел до num с помощью функции get_
primes_until() и сохраняет его в переменную primes;
– выводит список простых чисел до num на экран.
Программа демонстрирует использование различных функций
в Python для выполнения различных задач. Она объявляет три
функции: factorial(), is_prime() и get_primes_until(), которые выполняют различные действия, и использует эти функции для вычисления факториала числа, проверки числа на простоту и нахождения
списка простых чисел.
29
простоту и нахождения списка простых чисел.
В Python функции могут быть определены внутри других функций. Эти
называются вложенными функциями или внутренними
В
функции
могут быть
определены
внутри других
функциями.Python
Вложенные
функции
могут
быть использованы
дляфункулучшения
ций. Эти функции называются вложенными функциями или внуорганизации
кода, а также для повышения безопасности и сокрытия функций от
тренними функциями. Вложенные функции могут быть использодругихваны
частей
программы.
для
улучшения организации кода, а также для повышения
безопасности
и сокрытия
функций оттак
других
программы.
Вложенные функции
определяются
же, частей
как и обычные
функции, с
Вложенные функции определяются так же, как и обычные
помощью ключевого слова def, но внутри другой функции.
функции, с помощью ключевого слова def, но внутри другой
На
рис. 32 представлен пример программы, демонстрирующей работу
функции.
рис. 32 представлен
пример программы,
демонстрирующей
вложенныхНафункций,
то есть определение
функции внутри
других функций.
работу вложенных функций, то есть определение функции внуПрограмма использует вложенную функцию inner_func() внутри внешней
три других функций. Программа использует вложенную функцию
функции
outer_func().
Онавнешней
устанавливает
значение
переменной
x в 10 внутри
inner_func()
внутри
функции
outer_func().
Она устанавлиouter_func(),
а затем вызывает
inner_func(),
которая
увеличивает
значение
вает значение
переменной
x в 10 внутри
outer_func(),
а затем
вызы- x на 5
вает его
inner_func(),
которая
увеличивает
значение
на 5 и выводит
и выводит
на экран. Затем
outer_func()
также
выводитx значение
x на экран.
его на экран. Затем outer_func() также выводит значение x на экран.
функции
Рис. 32. Описание вложенных функций
Опишем пошаговое объяснение, что делает каждая строка кода
в этой программе:
– объявляет внешнюю функцию outer_func();
– устанавливает значение переменной x равной 10;
– объявляет вложенную функцию inner_func();
– объявляет переменную x как нелокальную, чтобы ее значение
можно было изменять внутри вложенной функции;
– увеличивает значение переменной x на 5;
30
– выводит значение переменной x внутри вложенной функции;
– вызывает вложенную функцию inner_func();
– выводит значение переменной x внутри внешней функции;
– вызывает внешнюю функцию outer_func().
В этой программе вложенная функция inner_func() объявляется внутри внешней функции outer_func(). Поскольку inner_func()
находится внутри outer_func(), она имеет доступ к переменным,
объявленным внутри outer_func(), включая переменную x. Когда
inner_func() вызывается, она увеличивает значение переменной x
на 5 и выводит его на экран. Затем outer_func() также выводит значение переменной x на экран.
Важной особенностью вложенной функции является то, что
она имеет доступ к переменным внешней функции даже после
того, как была выполнена. Кроме того, объявление переменной x
как нелокальной с помощью ключевого слова nonlocal позволяет
изменять ее значение внутри вложенной функции. Это может быть
полезным, если вы хотите изменить значение переменной внутри
вложенной функции и сохранить это изменение после того, как
вложенная функция завершится.
Вложенные функции могут иметь доступ к переменным внешней функции. Для этого необходимо использовать ключевое слово
nonlocal.
На рис. 33 представлен пример, который демонстрирует доступ
к внешним переменным, то есть переменным, которые определены
вне функции, но доступны внутри нее. Программа имеет две переменные с именем x. Первая переменная объявляется вне функций
и имеет начальное значение 5. Вторая переменная также называется x и объявляется внутри функции outer_func() с начальным значением 10. Затем вложенная функция inner_func() изменяет значение второй переменной x на 5 с помощью ключевого слова nonlocal
и выводит ее значение на экран. Затем outer_func() также выводит
значение второй переменной x на экран. За пределами функций
первая переменная x сохраняет свое значение и выводится на экран.
31
второй переменной x на экран. За пределами функций первая переменная x
сохраняет свое значение и выводится на экран.
Рис. 33.
33.Доступ
Доступкквнешним
внешнимпеременным
переменным
Рис.
Доступ к внешним переменным в Python работает следующим образом:
Доступ к внешним переменным в Python работает следующим
– если переменная используется только внутри функции, Python ищет ее
образом:
значение
локальной области
видимоститолько
функции;
– еслив переменная
используется
внутри функции, Python
ищет
ее
значение
в
локальной
области
видимости
функции;
– переменная не найдена в локальной области видимости
функции, Python
–
если
переменная
не
найдена
в
локальной
области
видимости
ищет ее значение в глобальной области видимости;
функции, Python ищет ее значение в глобальной области види– переменная не найдена в глобальной области видимости, Python ищет ее
мости;
значение во встроенных именах;
– если переменная не найдена в глобальной области видимости,
Python ищет ее значение во встроенных именах;
– если переменная определена внутри другой функции, Python ищет
ее значение в области видимости этой функции;
– если переменная не найдена в области видимости внутренней
функции, Python ищет ее значение в области видимости внешней функции;
– если переменная не найдена в области видимости внешней функции, Python продолжает искать ее значение в глобальной области
видимости и во встроенных именах.
В примере программы первая переменная x находится в глобальной области видимости, а вторая переменная x находится
в локальной области видимости функции outer_func(). Вложенная
функция inner_func() имеет доступ к переменной x, объявленной
внутри внешней функции outer_func(), потому что в Python переменные внутренних функций имеют доступ к переменным внеш 32
них функций. С помощью ключевого слова nonlocal вложенная
функция может изменять значение переменной x, объявленной
внутри внешней функции.
Доступ к внешним переменным в Python позволяет функциям
иметь доступ к переменным, объявленным во внешних областях
видимости, и изменять их значения при необходимости.
Вложенные функции могут использоваться для создания замыканий. Замыкание – функция, которая запоминает значения
из окружающей среды даже после того, как эта среда была изменена. Замыкание – функция, которая ссылается на переменные в своей внешней области видимости, которые уже были удалены из стека вызовов. В Python замыкание создается тогда, когда внутренняя
функция ссылается на переменные внешней функции. Внутренняя
функция сохраняет ссылки на эти переменные в замыкании, что
позволяет ей использовать их значения в будущем.
На рис. 34 представлен фрагмент программы, которая демонстрирует замыкание, то есть возможность вложенной функции сохранять значения внешних переменных, которые были переданы
ей в качестве аргументов.
Рис.
замыкания
Рис.34.
34. Описание
Описание замыкания
В этой программе функция outer_func() возвращает вложенную
функцию
inner_func(),
которая
принимает
аргумент yвложенную
и возвращает
В
этой программе
функция
outer_func()
возвращает
функцию
сумму
x
и
y.
Затем
outer_func()
вызывается
с
аргументом
5,
и
возвраinner_func(), которая принимает аргумент y и возвращает сумму x и y. Затем
щаемая функция сохраняется в переменной add_five. После этого
outer_func() вызывается с аргументом 5, и возвращаемая функция сохраняется в
add_five() вызывается с аргументом 10, и результат 15 сохраняется
переменной
add_five.result
После
этого add_five()
вызывается
с аргументом
в переменной
и выводится
на экран.
Когда outer_func()
вы- 10, и
результат 15 сохраняется в переменной result и выводится на экран. Когда
335, Python создает замыкание, которое
outer_func() вызывается с аргументом
содержит ссылку на переменную x. Затем outer_func() возвращает функцию
зывается с аргументом 5, Python создает замыкание, которое содержит ссылку на переменную x. Затем outer_func() возвращает
функцию inner_func(), которая сохраняет ссылку на x в замыкании.
Когда add_five() вызывается с аргументом 10, inner_func() использует сохраненную ссылку на x в замыкании и возвращает сумму x
и y, то есть 5 + 10 = 15.
Программа демонстрирует, как замыкания позволяют функциям в Python использовать переменные, объявленные внутри других
функций, и сохранять их значения между вызовами. В этом примере замыкание создается при вызове outer_func() и сохраняет ссылку
на переменную x внутри возвращаемой функции inner_func(). Когда inner_func() вызывается через add_five(), она использует сохраненную ссылку на переменную x для вычисления суммы.
Код на рис. 35 демонстрирует еще один пример использования
замыкания.
Рис.35.
35. Пример
Пример описания
Рис.
описаниязамыкания
замыкания
В этом примере функция make_multiplier() возвращает вложеннуюэтом
функцию
multiplier(),
которая
принимает аргумент
n и возвраВ
примере
функция
make_multiplier()
возвращает
вложенную
щает произведение x и n. Затем make_multiplier() вызывается дважфункцию multiplier(), которая принимает аргумент n и возвращает произведение
ды, и возвращаемые функции сохраняются в переменных times_three
x и n.иЗатем
make_multiplier()
вызывается вызывается
дважды, и возвращаемые
функции
times_five.
После этого times_three()
с аргументом 10,
и результат
30 сохраняется
в переменной
result.После
Затемэтого
times_five()
сохраняются
в переменных
times_three
и times_five.
times_three()
вызывается с аргументом 10, и результат 50 сохраняется в переменвызывается с аргументом 10, и результат 30 сохраняется в переменной result.
ной result, и результаты выводятся на экран. Когда make_multiplier()
Затем вызывается
times_five()свызывается
10, замыкание,
и результаткоторое
50 сохраняется
в
аргументом сx,аргументом
Python создает
сопеременной
выводятся
на экран. Когдавозвращает
make_multiplier()
держитresult,
ссылкуинарезультаты
переменную
x. Затем make_multiplier()
функцию
multiplier(),
которая
сохраняет
ссылку
на
x
в
замыкании.
вызывается с аргументом x, Python создает замыкание, которое содержит
ссылку на переменную x. Затем 34
make_multiplier()
возвращает функцию
multiplier(), которая сохраняет ссылку на x в замыкании. Когда times_three()
Когда times_three() вызывается с аргументом 10, функция multiplier()
использует сохраненную ссылку на x в замыкании и возвращает
произведение 3 * 10 = 30. Аналогично, когда times_five() вызывается
с аргументом 10, функция multiplier() использует сохраненную ссылку на x в замыкании и возвращает произведение 5 * 10 = 50.
Этот пример демонстрирует, как замыкания могут использоваться для создания функций, которые зависят от параметров, переданных при их создании. В этом примере замыкание создается
при вызове make_multiplier() и сохраняет ссылку на переменную x
внутри возвращаемой функции multiplier(). Когда multiplier() вызывается через times_three() или times_five(), она использует сохраненную ссылку на переменную x в замыкании и возвращает произведениевxPython
и n.
Модули
Это файлы, содержащие код, который можно использовать в других
Модули в Python
программах.
Модули
упрощают
написание
позволяют
избежать
Это файлы, содержащие код,
которыйкода,
можно
использовать
дублирования
и повторного
использования
кода. В Python
модули могут
в другихкода
программах.
Модули
упрощают написание
кода, позволяют избежать дублирования
кода и повторного
кода.
быть импортированы
в другие программы
с помощьюиспользования
ключевого слова
import.
В Python модули могут быть импортированы в другие программы
Для создания модуля нужно определить функции, классы и переменные,
с помощью ключевого слова import.
которые будут
использоваться
в других
программах,
в отдельном
файле с
Для создания
модуля нужно
определить
функции,
классы и переменные,
которые
будут
использоваться
в других
программах,
расширением
«.py.»
В модуле
можно
определить любое
количество
функций,
в отдельном файле с расширением «.py». В модуле можно опредеклассов и переменных.
лить любое количество функций, классов и переменных.
На рис.
36 представлен
пример
программы,
демонстрирующей
создание
На рис.
36 представлен
пример
программы,
демонстрирующей
модуля,
то есть
файла, содержащего
определения
модуля,создание
то есть
файла,
содержащего
определения
функций, функклассов и
ций,
классов
и
переменных,
которые
могут
быть
использованы
переменных, которые могут быть использованы в других программах.
в других программах.
Рис.
модуля
Рис.36.
36.Создание
Создание модуля
35
В этом примере мы создаем модуль my_module, который содержит две
функции: say_hello() и add_numbers(). Функция say_hello() принимает аргумент
В этом примере мы создаем модуль my_module, который содержит две функции: say_hello() и add_numbers(). Функция say_hello()
принимает аргумент name и выводит на экран приветствие с именем, переданным в качестве аргумента. Функция add_numbers()
принимает два аргумента x и y и возвращает их сумму.
Чтобы использовать этот модуль в других программах, нам нужно импортировать его (рис. 37). В этой программе мы импортируем
модуль my_module с помощью инструкции import. Затем вызываем функцию say_hello() из модуля, передавая ей аргумент «John».
После этого вызываем функцию add_numbers() из модуля, передавая ей аргументы 5 и 10, и сохраняем результат в переменной result
и выводим результат на экран.
Рис.37.
37. Использование
Использование модуля
Рис.
модуля
Когда импортируем модуль my_module, Python выполняет код
в этом импортируем
файле и создает
объектmy_module,
модуля. Функции
add_в этом
Когда
модуль
Python say_hello()
выполняети код
numbers() становятся доступными через этот объект модуля. Мы
файле и создает объект модуля. Функции say_hello() и add_numbers() становятся
вызываем функции, используя синтаксис <имя_модуля>.<имя_
доступными
через этот объект модуля. Мы вызываем функции, используя
функции>().
импортирования модуля в другую программу можно иссинтаксисДля
<имя_модуля>.<имя_функции>().
пользовать ключевое слово import. После импорта модуля его функДля импортирования модуля в другую программу можно использовать
ции, классы и переменные становятся доступными в программе.
ключевое Фрагмент
слово import.
После импорта
его как
функции,
классы и
кода программы
(рис. 38)модуля
показывает,
можно импортировать
модуль
mymoduleвспрограмме.
помощью команды import. Затем
переменные
становятся
доступными
программа вызывает функцию add_numbers() из модуля mymodule
Фрагмент кода программы (рис. 38) показывает, как можно
с аргументами 5 и 7 и выводит результат на экран с помощью функимпортировать
модуль
с помощью
команды
import.
Затем
программа
ции print().
Далееmymodule
программа
создает объект
person
класса
Person
вызывает функцию add_numbers() из модуля mymodule с аргументами 5 и 7 и
36 функции print(). Далее программа
выводит результат на экран с помощью
создает объект person класса Person из модуля mymodule, передавая ему
из модуля mymodule, передавая ему аргументы «John» и 30, и вызывает метод say_hello() для этого объекта. Программа выводит значение переменной message из модуля mymodule на экран.
Рис.38.
38.Импортирование
Импортирование модуля
Рис.
модуля
Импортирование модуля позволяет использовать определения
Импортирование
позволяет
использовать
определения
функций,
классов имодуля
переменных
из другого
модуля
в текущейфункций,
проклассов
и
переменных
из
другого
модуля
в
текущей
программе.
При
грамме. При импортировании модуля все его определения становятся доступными
в текущей
имя модуля.
Например,
импортировании
модуля
все егопрограмме
определениячерез
становятся
доступными
в текущей
для вызова
add_numbers()
извызова
модуля
mymodule
исполь- из
программе
черезфункции
имя модуля.
Например, для
функции
add_numbers()
зуем
имя
модуля
и
имя
функции,
разделенные
точкой
(mymodule.
модуля mymodule используем имя модуля и имя функции, разделенные точкой
add_numbers()). Аналогично для создания объекта класса Person ис(mymodule.add_numbers()). Аналогично для создания объекта класса Person
пользуем имя модуля и имя класса (mymodule.Person(«John», 30)).
используем имя модуля и имя класса (mymodule.Person("John", 30)).
В языке программирования Python модуль представляет собой
В языке
программирования
модуль определения
представляет собой
файл с
файл
с расширением
«.py», Python
содержащий
функций,
расширением
«.py», содержащий
определения
функций,могут
классов,
переменных
классов, переменных
и других
объектов, которые
быть
исполь- и
зованы
в другихкоторые
программах.
Иногда
может возникнуть
других
объектов,
могут быть
использованы
в другихнеобходипрограммах.
мость может
импортировать
только
некоторыеимпортировать
объекты из модуля,
не все.
Иногда
возникнуть
необходимость
только а некоторые
Для импортирования конкретных объектов из модуля в Python
объекты из модуля, а не все.
используется ключевое слово from, за которым следует имя модуля,
Для импортирования конкретных объектов из модуля в Python
затем ключевое слово import и список импортируемых объектов чеиспользуется
ключевое
слово from, за которым
следует
имя модуля,
затем
рез запятую.
Для импортирования
конкретных
функций,
классов
ключевое слово import и список импортируемых объектов через запятую. Для
импортирования конкретных функций,
или переменных из модуля
37 классов
можно использовать ключевое слово from, как показано на рис. 39. Программа в
или переменных из модуля можно использовать ключевое слово
from, как показано на рис. 39. Программа в примере импортирует
толькоимпортирует
функцию add_numbers
и класс
Person иизкласс
модуля
mymodule
примере
только функцию
add_numbers
Person
из модуля
с
помощью
команды
from
...
import.
Затем
программа
вызывает
mymodule с помощью команды from ... import. Затем программа вызывает
функцию add_numbers() из модуля mymodule с аргументами 5 и 7
функцию add_numbers() из модуля mymodule с аргументами 5 и 7 и выводит
и выводит результат на экран с помощью функции print(). Далее
результат на экран с помощью функции print(). Далее программа создает объект
программа создает объект person класса Person из модуля mymodule,
person
класса Person
из модуля mymodule,
передавая
ему аргументы
"John" и 30,
передавая
ему аргументы
«John» и 30,
и вызывает
метод say_hello()
и вызывает
say_hello() для этого объекта.
для этогометод
объекта.
Рис.
конкретногообъекта
объекта
Рис. 39.
39.Импортирование
Импортирование конкретного
Импортирование конкретных объектов из модуля позволяет исИмпортирование
конкретных
объектов
из модуля
позволяет
использовать
пользовать
только нужные
объекты
из модуля
в текущей
программе,
что может
код
и ускорить
его выполнение.
импортитолько
нужныеупростить
объекты из
модуля
в текущей
программе, чтоПри
может
упростить
ровании
конкретных
объектов
из
модуля
не
нужно
указывать
имя из
код и ускорить его выполнение. При импортировании конкретных объектов
модуля при вызове этих объектов, так как они становятся доступмодуля не нужно указывать имя модуля при вызове этих объектов, так как они
ными в текущей программе под своими именами (add_numbers()
становятся доступными в текущей программе под своими именами
и Person() в данном примере).
(add_numbers()
и Person() в данном
примере). объектов из модуля остальПри импортировании
конкретных
импортировании
объектов извмодуля
остальные
объекты
ныеПри
объекты
в модулеконкретных
не будут доступны
текущей
программе,
и еслине
они
понадобятся,
их нужно
будет импортировать
отдельноих
в модуле
будут
доступны в текущей
программе,
и если они понадобятся,
или будет
импортировать
весьотдельно
модульили
целиком.
нужно
импортировать
импортировать весь модуль целиком.
Для
удобства
чтения
кода
можно
использовать
псевдонимы
Для удобства чтения кода можно использовать
псевдонимы
для для
имен
имен модулей. Для этого используется ключевое слово as.
модулей. Для этого используется ключевое слово as.
На рис. 40 показан пример программы, демонстрирующей соНа рис. 40 показан пример программы, демонстрирующей создание
здание псевдонимов модулей.
псевдонимов
В этоммодулей.
примере мы импортируем модуль numpy с помощью
инструкции import и задаем ему псевдоним np с помощью ключевого слова as. Модуль numpy содержит функции для работы с массивами, векторами и матрицами. Когда импортируем этот модуль
38
с псевдонимом, можно использовать этот псевдоним вместо имени
модуля при вызове его функций.
Рис.
40.40.Создание
псевдонима
модуля
Рис.
Создание псевдонима
модуля
Использование псевдонимов модулей может быть полезным,
когда у нас есть модуль с длинным именем, которое неудобно исВ этом примере мы импортируем модуль numpy с помощью инструкци
пользовать в коде. Псевдонимы могут также помочь избежать конimport и фликтов
задаем имен,
ему псевдоним
np с помощью
слова as. Модул
если импортируется
несколькоключевого
модулей с функциями, имеющими
одинаковые
имена.сСоздание
псевдонимов
модулей
numpy содержит
функции
для работы
массивами,
векторами
и матрицами
позволяет использовать модуль под другим именем в текущей проКогда импортируем
этот быть
модуль
с псевдонимом,
можно
использовать
это
грамме. Это может
полезно,
если имя модуля
слишком
длинное
или неудобное
для использования
в коде.
При задании псевпсевдоним
вместо
имени модуля
при вызове его
функций.
донима для модуля все его определения становятся доступными
Использование псевдонимов модулей может быть полезным, когда у на
в текущей программе через новое имя модуля.
есть модуль с длинным именем, которое неудобно использовать в коде
Псевдонимы
Модули для работы с файлами в Python,
могут
также помочь избежать конфликтов
которые предоставляют дополнительные функции
имен,
есл
импортируется
несколько
модулей
с функциями,
имена
В Python
существует
несколько
модулей имеющими
для работы с одинаковые
файлами,
предоставляют
дополнительные
функции и возможности
Созданиекоторые
псевдонимов
модулей
позволяет использовать
модуль под другим
по сравнению с базовыми функциями работы с файлами.
именем в текущей
Это
можетдля
быть
полезно,
если имя модул
Модуль osпрограмме.
предоставляет
функции
работы
с операционной
том числе
для работы
и директориями.
слишком системой,
длинное в или
неудобное
дляс файлами
использования
в коде.БазоПри задани
псевдонима для модуля все его определения становятся доступными в текуще
программе через новое имя модуля.
39
вые функции, которые можно использовать для работы с файлами,
представлены на рис. 41 в примере программы. Дадим пошаговое
объяснение, что делает каждая строка кода в этой программе:
– импортирует модуль os для работы с функциями операционной
системы;
– используя функцию getcwd(), программа получает текущую рабочую директорию и сохраняет ее в переменную current_directory;
– выводит текущую рабочую директорию на экран;
– создает новую переменную new_directory и присваивает ей значение «новая_директория»;
– используя функцию mkdir(), программа создает новую директорию с именем, указанным в переменной new_directory;
– выводит сообщение о том, что новая директория была успешно
создана;
– используя функцию chdir(), программа переходит в новую директорию, указанную в переменной new_directory;
– выводит сообщение о том, что программа перешла в новую директорию;
– используя функцию getcwd(), программа получает текущую рабочую директорию в новой директории и сохраняет ее в переменную current_directory;
– выводит текущую рабочую директорию в новой директории
на экран;
– используя функцию chdir(), программа возвращает текущую директорию на один уровень выше;
– выводит сообщение о том, что программа вернулась в исходную
директорию;
– используя функцию rmdir(), программа удаляет новую директорию, указанную в переменной new_directory;
– выводит сообщение о том, что новая директория была успешно
удалена.
40
– выводит сообщение о том, что новая директория была успешно удалена
Рис.
Базовые функции
os os
Рис.
41.41.Базовые
функциимодуля
модуля
предоставляет функции
функции для
с файлами
МодульМодуль
shutilshutil
предоставляет
дляработы
работы
с файлами
и директориями, такие как копирование файлов, перемещение
файлов, удаление директорий и т. д.
директорий иНат. рис.
д. 42 представлен пример использования функций модуЭта программа использует модуль shutil для копирования и пеНа ля.
рис.
42 представлен пример использования функций модуля. Эт
ремещения файлов и директорий, а также модуль os для создания
программа
использует
модуль иshutil
дляв ней.
копирования и перемещения файлов
временной
директории
файлов
директориями, такие как копирование файлов, перемещение файлов, удалени
директорий, а также модуль os для создания временной директории и файлов
ней.
41
Рис.
42.
модуля
shutil
Рис.
42.Базовые
Базовые функции
функции модуля
shutil
Представим
пошаговое
объяснение,
что делает
каждая
строка
кода в этой
Представим
пошаговое
объяснение,
что делает
каждая
строка
кода в этой программе:
программе:
– импортирует модули shutil и os для работы с функциями файловой системы;
системы;
– создает переменную temp_dir и присваивает ей значение temp;
используя
функциюtemp_dir
mkdir(),ипрограмма
создает
новую temp;
времен– –создает
переменную
присваивает
ей значение
ную директорию с именем, указанным в переменной temp_dir;
– используя функцию mkdir(), программа создает новую временную
– выводит сообщение о том, что временная директория была
директорию
с именем,
указанным в переменной temp_dir;
успешно
создана;
– импортирует модули shutil и os для работы с функциями файловой
– выводит сообщение о том, что временная директория была успешно
создана;
42
– создает переменные file1 и file2 и присваивает им значения «temp/
file1.txt» и «temp/file2.txt» соответственно;
– используя оператор with, программа открывает файлы file1 и file2
для записи;
– записывает строки в файлы file1 и file2 соответственно;
– выводит сообщение о том, что файлы были успешно созданы
во временной директории;
– создает переменную new_dir и присваивает ей значение «новая_
директория»;
– используя функцию copy(), программа копирует файлы file1
и file2 в новую директорию new_dir.
– выводит сообщение о том, что файлы были успешно скопированы в новую директорию;
– используя функцию move(), программа перемещает файлы file1
и file2 в новую директорию new_dir;
– выводит сообщение о том, что файлы были успешно перемещены в новую директорию;
– используя функцию rmtree(), программа удаляет временную директорию temp_dir и все ее содержимое;
– выводит сообщение о том, что временная директория была
успешно удалена.
Программа демонстрирует базовые функции модуля shutil для
копирования и перемещения файлов и директорий. Она создает временную директорию, создает в ней файлы, копирует и перемещает
их в новую директорию, а затем удаляет временную директорию.
Модуль glob в Python предоставляет возможность поиска файлов и директорий по шаблону. Шаблон – это строка, которая может содержать символы «*» (заменяет любое количество символов),
«?» (заменяет один символ) и «[]» (символьный класс для указания
допустимых символов). Модуль glob позволяет поискать файлы
в директории и ее поддиректориях, используя указанный шаблон.
На рис. 43 представлен пример использования функций модуля. Программа ищет все файлы в текущей директории с расширением .txt и выводит их имена, а также находит все директории
в текущей директории, кроме тех, которые имеют расширение .txt,
и выводит их имена.
43
кроме тех, которые имеют расширение .txt, и выводит их имена.
Рис.
функциимодуля
модуляglob
glob
Рис.43.
43.Базовые
Базовые функции
Представим
пошаговое
объяснение,
что делает
каждая
строка
кода в этой
Представим
пошаговое
объяснение,
что делает
каждая
строка
кода в этой программе:
программе:
импортирует модуль
работы
с шаблонами
поиска
файлов
–– импортирует
модульglob
globдля
для
работы
с шаблонами
поиска
файлов и
и директорий;
директорий;
– используя функцию glob(), программа находит все файлы в теку– используя
функцию
glob(),
программа
находит на
все.txt,
файлы
в текущей
щей директории,
имена
которых
заканчиваются
и сохраняет их
имена
в переменную
txt_files; на .txt, и сохраняет их имена в
директории,
имена
которых
заканчиваются
– выводит сообщение о том, что были найдены файлы;
переменную txt_files;
– используя оператор for, программа перебирает каждый файл,
– выводит
сообщение
о том, что
были найдены файлы;
найденный
в предыдущем
шаге;
выводит имя
каждого
найденного
в предыдущем
шаге;
––используя
оператор
for,файла,
программа
перебирает
каждый файл,
найденный
–
используя
функцию
glob(),
программа
находит
все
директории
в предыдущем шаге;
в текущей директории, имена которых не заканчиваются на .txt,
– выводит
имя их
каждого
найденного
и сохраняет
именафайла,
в переменную
dirs;в предыдущем шаге;
– выводит сообщение о том, что были найдены директории;
– используя оператор for, программа перебирает каждую директорию, найденную в предыдущем шаге;
– выводит имя каждой директории, найденной в предыдущем шаге.
Программа демонстрирует функциональность модуля glob для
поиска файлов и директорий в директории с помощью шаблонов.
44
Она находит все файлы в текущей директории, имена которых заканчиваются на .txt, и выводит их имена, а также находит все директории в текущей директории, кроме тех, которые имеют расширение .txt, и выводит их имена. В реальном приложении вы можете
использовать этот модуль для поиска файлов и директорий с определенными шаблонами, а также для выполнения других операций
с найденными файлами и директориями.
Исключения в Python
Исключения – это ошибки, которые возникают во время выполнения программы. Когда возникает исключение, программа
останавливается и выводит сообщение об ошибке. В Python исключения могут быть обработаны с помощью конструкции try/except.
Исключения могут быть вызваны явно с помощью ключевого
слова raise. Когда исключение вызывается, программа останавливается и выводит сообщение об ошибке.
На рис. 44 представлен пример программы, демонстрирующей
вызов исключений.
Рис.
исключений
Рис. 44.
44. Вызов
Вызов исключений
Программа определяет функцию divide_numbers(), которая
Программа
определяет
котораяОднако
выполняет
выполняет деление
двухфункцию
чисел и divide_numbers(),
возвращает результат.
еслидвух
второй
аргумент
равенрезультат.
нулю, функция
вызывает
исключение
деление
чисел
и возвращает
Однако если
второй
аргумент равен
ZeroDivisionError
с
помощью
ключевого
слова
raise.
Затем
програмнулю, функция вызывает исключение ZeroDivisionError с помощью
ключевого
ма вызывает функцию divide_numbers() с разными аргументами
слова raise. Затем программа вызывает функцию divide_numbers() с разными
аргументами и обрабатывает возможное исключение ZeroDivisionError с
45
помощью блока except. Ключевое слово raise используется для вызова
исключения в явном виде. В данном примере мы вызываем исключение
и обрабатывает возможное исключение ZeroDivisionError с помощью блока except. Ключевое слово raise используется для вызова
исключения в явном виде. В данном примере мы вызываем исключение ZeroDivisionError с сообщением «Деление на ноль невозможно», если второй аргумент функции равен нулю. Это позволяет остановить выполнение функции и передать управление в блок
except в том месте, где функция была вызвана. В блоке try вызываем
функцию divide_numbers() с аргументами 10 и 2, а затем с аргументами 5 и 0. При попытке выполнения деления на ноль во втором
вызове функции возникает исключение ZeroDivisionError, которое
обрабатывается в блоке except. В данном примере мы просто выводим сообщение об ошибке с помощью функции print() и передаем
объект исключения в качестве аргумента функции print() с помощью переменной error.
Вызов исключений позволяет явно указать на возникновение
ошибки в программе и передать управление в блок except, где она
может быть обработана. В блоке try вызываем функцию, которая
результате программа может корректно работать даже в случае возникновения
может вызвать исключение, а в блоке except обрабатываем это исошибок.
ключение и выводим сообщение об ошибке. В результате программогут быть
обработаны
с помощью
конструкцииошибок.
try/except.
маИсключения
может корректно
работать
даже в случае
возникновения
Код, который
может вызвать
помещается
в блок try
(рис. 45). Если
Исключения
могут исключение,
быть обработаны
с помощью
конструкции
try/except.
Код, который
может
вызватьв исключение,
помещается
исключение
возникает,
программа
переходит
блок except, где
исключение
в
блок
try
(рис.
45).
Если
исключение
возникает,
программа
перехоможет быть обработано.
дит в блок except, где исключение может быть обработано.
Рис.
Рис. 45.
45. Описание
Описание конструкции
конструкциидля
дляисключений
исключений
Пример программы, демонстрирующей обработку исключе-
Пример
программы,
демонстрирующей
обработку исключений,
ний,
представлен
на рис. 46.
Эта программа запрашивает
у пользопредставлен
начисла,
рис. 46.выполняет
Эта программа
запрашивает
у пользователя
числа,
вателя два
деление
и выводит
результат надва
экран.
выполняет деление и выводит результат на экран.
46
представлен на рис. 46. Эта программа запрашивает у пользователя два числа,
выполняет деление и выводит результат на экран.
Рис. 46.
Пример
исключений
с использованием
конструкции
Рис.
46. Пример
исключений
с использованием
конструкции
Однако она также предусматривает
обработку возможных исключений,
которыеОднако
могут возникнуть
при неправильном обработку
вводе данных
или делении
она также предусматривает
возможных
ис- на
ключений,
возникнуть
вводе
ноль.
Ключевоекоторые
слово tryмогут
обозначает
начало при
блоканеправильном
кода, в котором
может
данных или делении на ноль. Ключевое слово try обозначает начало
блока кода, в котором может произойти исключение. Если исключение происходит внутри блока try, то программа переходит к блоку
except, где обрабатывается исключение.
В данном примере мы используем несколько исключений, объединенных в кортеж с помощью скобок: (ValueError,
ZeroDivisionError). Если любое из этих исключений возникает
в блоке try, то программа переходит к блоку except, где обрабатывается исключение. В нашем случае выводим сообщение об ошибке
с помощью функции print() и передаем объект исключения в качестве аргумента функции print() с помощью переменной error.
Обработка исключений позволяет предвидеть возможные
ошибки в программе и обрабатывать их, чтобы программа не прерывалась и не выдавала ошибки пользователю. В блоке try размещаем код, который может вызвать исключение, а в блоке except
обрабатываем это исключение и выводим сообщение об ошибке.
В результате программа может корректно работать даже в случае
возникновения ошибок.
47
Тема 3. Объектно ориентированное
программирование на Python
Основные понятия ООП
Объектно ориентированное программирование (ООП) – это парадигма программирования, основанная на концепции объектов,
которые объединяют данные и функциональность в единую сущность. В ООП объекты являются экземплярами классов, которые
определяют свойства и методы объектов.
Основные понятия в ООП
Класс – шаблон или описание объекта, который определяет
свойства и методы объектов класса.
Объект – экземпляр класса, который содержит данные и функциональность, определенные в классе.
Атрибут – переменная, которая хранит данные объекта.
Метод – функция, которая определена в классе и может изменять данные объекта.
Наследование – механизм, который позволяет создавать новые
классы на основе существующих классов, наследуя их свойства
и методы.
Полиморфизм – возможность объектов разных классов использовать одинаковое имя метода, но с различной реализацией.
Инкапсуляция – концепция, которая обеспечивает скрытие реализации объекта от пользователей объекта.
Специфика ООП в языке Python:
– Python поддерживает все основные концепции ООП, включая
классы, объекты, наследование, полиморфизм и инкапсуляцию;
– в Python нет модификаторов доступа к атрибутам и методам,
но существует соглашение о том, что атрибуты и методы, начинающиеся с символа подчеркивания, считаются защищенными
и не должны использоваться вне класса;
– в Python конструктор класса __init__ и метод self используются
для инициализации атрибутов объекта;
– в Python методы могут быть определены как обычные методы,
статические методы или методы класса с помощью декораторов
@staticmethod, @classmethod и @property соответственно;
48
– Python поддерживает множественное наследование, то есть
класс может наследовать свойства и методы сразу от нескольких классов.
На рис. 47 представлен пример программы на Python, которая
демонстрирует использование ООП.
В этом примере мы определяем два класса: Fruit и Apple. Класс
Apple наследуется от класса Fruit. Класс Fruit имеет конструктор
__init__, который инициализирует свойства name и color. Класс
Fruit также имеет метод describe, который выводит название и цвет
фрукта. Класс Apple также имеет конструктор __init__, который
вызывает конструктор родительского класса с помощью функции
super(). Класс Apple также имеет свойство variety и метод describe,
который вызывает метод describe родительского класса и добавляет
информацию о сорте яблока. Затем создаем объекты классов Fruit
Вызываем метод describe для каждого объекта, чтобы вывести информацию о
и Apple. Вызываем метод describe для каждого объекта, чтобы вывефрукте или яблоке.
сти информацию о фрукте или яблоке.
Рис.47.
47.Использование
Использование ООП
Рис.
ООП
Использование классов и наследования позволяет создавать объекты с
общими свойствами и методами. Классы
49 позволяют нам абстрагироваться от
конкретных реализаций и создавать универсальные решения. Наследование
Использование классов и наследования позволяет создавать
объекты с общими свойствами и методами. Классы позволяют нам
абстрагироваться от конкретных реализаций и создавать универсальные решения. Наследование позволяет создавать новые классы на основе существующих и использовать их свойства и методы.
Класс
Одним из основных понятий ООП является класс.
Классы в Python – это шаблоны для создания объектов. Класс
определяет состояние (атрибуты) и поведение (методы) объектов.
Классыобъекты
позволяют
создавать
объектыи сметодами,
общими свойствами
и месоздавать
с общими
свойствами
что делает код
более
тодами,
что
делает
код
более
структурированным
и
удобным
для
структурированным и удобным для использования.
использования.
Классы в Python – основа объектно ориентированного программирования.
Классы в Python – основа объектно ориентированного проОни позволяют определять новые типы данных и выступают в роли
граммирования. Они позволяют определять новые типы данных
«шаблонов»
для создания
Классы
содержать
методы Классы
(функции),
и выступают
в роли объектов.
«шаблонов»
длямогут
создания
объектов.
атрибуты
(переменные)
и (функции),
конструкторыатрибуты
(специальные
методы, и которые
могут содержать
методы
(переменные)
конструкторы
(специальные
методы,
которые вызываются при создавызываются
при
создании нового
объекта).
нииНанового
объекта).
рис. 48 представлен пример программы, демонстрирующей создание
На рис. 48 представлен пример программы, демонстрирующей
класса Person, который имеет конструктор __init__, который инициализирует
создание класса Person, который имеет конструктор __init__, котосвойства name и age. Класс Person также имеет метод describe, который выводит
рый инициализирует свойства name и age. Класс Person также имеет
информацию
о человеке.
метод describe,
который выводит информацию о человеке.
Использование
Рис. 48.
Создание класса
Рис.
48. Создание
класса
классов позволяет создавать
объекты
с
общими
свойствами и методами. Классы позволяют
абстрагироваться от конкретных
50
реализаций и создавать универсальные решения.
Использование классов позволяет создавать объекты с общими свойствами и методами. Классы позволяют абстрагироваться
от конкретных реализаций и создавать универсальные решения.
Создание классов позволяет определять новые типы объектов
в Python и задавать им свойства и методы. Классы могут содержать
атрибуты, методы и конструкторы, которые могут быть использованы для создания и манипуляции объектами класса. Создание
объектов класса позволяет работать с экземплярами класса и использовать их методы и свойства в программе.
Наследование
Это механизм, который позволяет классам наследовать свойства и методы других классов. Класс, который наследует свойства
и методы, называется дочерним классом, а класс, от которого наследуются свойства и методы, называется родительским классом.
На рис. 49 представлен пример программы на Python, которая
демонстрирует наследование классов. Поясним, как работает программа.
• Определяем класс Shape, который имеет конструктор __
init__, инициализирующий свойство color и метод info, который
выводит информацию о фигуре.
• Определяем класс Square, который наследуется от класса
Shape и имеет конструктор __init__, который вызывает конструктор родительского класса с помощью функции super(). Класс Square
также имеет свойство side_length и переопределяет метод info, чтобы вывести информацию о квадрате и длине его стороны.
• Создаем объекты классов Shape и Square.
• Вызываем метод info для каждого объекта, чтобы вывести информацию о фигуре или квадрате.
Использование наследования классов позволяет создавать классы, которые наследуют свойства и методы от других классов, что
позволяет нам использовать код многократно и экономить время.
В данном примере класс Square наследует свойство color и метод info
от класса Shape. Затем класс Square добавляет свойство side_length
и переопределяет метод info, чтобы вывести информацию о квадрате.
51
называется родительским классом.
Рис.49.
49.Наследование
Наследование классов
Рис.
классов
Использование позволяет
наследованиясоздавать
классов новые
позволяет
создавать
классы,
Наследование
классы
на основе
которые
наследуют повторно
свойства и используя
методы от других
позволяет нам
существующих,
код и классов,
избегая что
дублирования.
использовать
код многократно
и экономить время.
В данном
Класс-наследник
может использовать
все свойства
и примере
методы класс
родительского класса, а также добавлять свои собственные свойства
и методы. В результате код становится более читабельным, легко
поддерживаемым и масштабируемым.
Специальные методы
Поведение объектов классов в ответ на стандартные операторы и функции Python позволяют определять специальные методы.
Они могут быть переопределены для определенных классов, чтобы
обеспечить правильное выполнение операций, которые могут быть
не очевидными для стандартных операторов и функций Python.
Они используются для переопределения поведения стандартных
операторов и встроенных функций Python для объектов класса.
52
Специальные методы начинаются и заканчиваются двойным
подчеркиванием, например, __str__().
На рис. 50 представлен пример программы, демонстрирующей
специальные методы классов. В примере мы определяем класс
Book, который имеет конструктор __init__, который инициализирует свойства title, author и pages. Класс Book также имеет специальные методы:
__str__: переопределяет метод str(), который вызывается, когда
мы хотим преобразовать объект в строку. Метод __str__ возвращает
строку, которая содержит название книги и имя автора;
__len__: переопределяет метод len(), который вызывается, когда хотим узнать длину объекта. Метод __len__ возвращает количество страниц в книге.
Рис. 50.
50.Специальные
Специальные методы
методы класса
класса
Рис.
Специальные методы классов в Python позволяют переопредеклассов
в Python
позволяют
переопределять
лятьСпециальные
стандартноеметоды
поведение
объектов.
Можно
определять
специ-
альные методы
для объектов.
того, чтобы
нашопределять
класс мог специальные
работать с оператостандартное
поведение
Можно
методы для
рами
Python,
такими
+, -, с*,операторами
/, %, ==, !=
и многими
того,
чтобы
наш класс
могкак
работать
Python,
такимидругими.
как +, -, *, /,
Также можем определять специальные методы для того, чтобы наш
класс мог работать с встроенными функциями Python, такими как
для того, чтобы наш класс мог работать с встроенными функциями Python,
str(), len(), max(), min() и другими.
%, ==, != и многими другими. Также можем определять специальные методы
такими как str(), len(), max(), min() и другими.
Пример
программы,
53
демонстрирующей
наследования, представлен на рис. 51.
класс
с
использованием
Пример программы, демонстрирующей класс с использованием наследования, представлен на рис. 51.
В примере определяем два класса: Person и Student. Класс Student
наследуется от класса Person. Класс Person имеет конструктор __
init__, который инициализирует свойства name и age. Класс Person
также имеет метод info, который выводит информацию о персоне.
Класс Student также имеет конструктор __init__, который вызывает конструктор родительского класса с помощью функции super().
Класс Student также имеет свойство grade и переопределяет метод
info,создаем
чтобы вывести
его классе.метод
Затемinfo
соз-для
Затем
объекты информацию
классов Personо студенте
и Student.иВызываем
даем
объекты
классов
Person
и
Student.
Вызываем
метод
info
для
кажкаждого объекта, чтобы вывести информацию о персоне или студенте.
дого объекта, чтобы вывести информацию о персоне или студенте.
Рис. 51.
51.Класс
Класс сс использованием
использованием наследования
Рис.
наследования
Использование наследования классов позволяет нам созда-
наследования
классов позволяет
создавать
новые
ватьИспользование
новые классы,
которые наследуют
свойства инам
методы
от родиклассы,
которые
наследуют
свойства инам
методы
от родительских
классов.
Это
тельских
классов.
Это позволяет
избежать
дублирования
кода
позволяет
нам избежать
дублирования
кодаподдерживаемые
и создавать более программы.
читаемые и легко
и создавать
более читаемые
и легко
поддерживаемые программы.
Объект
54
Объект
Еще одним основным понятием объектно ориентированного
подхода к программированию являются объекты.
Объекты в Python представляют собой экземпляры классов. Каждый
Объекты в Python представляют собой экземпляры классов.
объект
имеетобъект
свои уникальные
которые
могут быть
установлены
Каждый
имеет своиатрибуты,
уникальные
атрибуты,
которые
могут и
получены
извне. Атрибуты
объектаизвне.
могутАтрибуты
быть переменными
(числовыми,
быть установлены
и получены
объекта могут
быть
переменными
(числовыми,
строковыми,
и т. д.) или
строковыми,
логическими
и т. д.) или
функциями логическими
(методами).
функциями
(методами).
Атрибуты объектов представляют собой переменные, связанные с
Атрибуты объектов представляют собой переменные, связанные
конкретным экземпляром класса. Они могут быть использованы для хранения
с конкретным экземпляром класса. Они могут быть использованы
информации о состоянии объекта и быть изменены в процессе выполнения
для хранения информации о состоянии объекта и быть изменены
программы.
рис. 52 представлен
пример
программы,
демонстрирующей
в процессеНа
выполнения
программы.
На рис.
52 представлен
пример
атрибуты
объектов.
программы, демонстрирующей атрибуты объектов.
Рис. 52. Атрибуты объектов
Рис. 52. Атрибуты объектов
В этом примере мы определяем класс Car, который имеет конструктор
__init__, который инициализирует атрибуты объекта make, model, year и
mileage. Класс Car также имеет метод
info, который выводит информацию об
55
В этом примере мы определяем класс Car, который имеет конструктор __init__, который инициализирует атрибуты объекта
make, model, year и mileage. Класс Car также имеет метод info, который выводит информацию об автомобиле, и метод drive, который
увеличивает пробег автомобиля на заданное количество миль. Затем создаем два объекта класса Car, car1 и car2, с разными значениями атрибутов. Вызываем метод info для каждого объекта, чтобы
вывести информацию об автомобиле. Затем вызываем метод drive
для объекта car1, чтобы увеличить его пробег на 100 миль, и затем
вызываем метод info для этого объекта, чтобы вывести измененную
информацию о нем.
Использование объектов и атрибутов классов позволяет создавать и манипулировать данными в объектах. Атрибуты объектов
могут быть изменены в любое время, что делает объекты гибкими
и адаптивными к различным сценариям использования.
Декораторы в Python
Это функции, которые принимают другую функцию в качестве
аргумента и возвращают новую функцию, изменяющую поведение
исходной функции без ее изменения. Декораторы позволяют добавлять дополнительную функциональность к функциям и методам, не изменяя их код, что делает код более гибким и модульным.
С помощью декораторов можно реализовать различные задачи, например, измерение времени выполнения функции, кэширование
результатов функции, логирование вызовов функции и т. д.
На рис. 53 представлен пример программы на Python, которая
демонстрирует использование декоратора.
Суть работы программы заключается в следующем.
• Определяем декоратор timer, который принимает функцию
в качестве аргумента и возвращает новую функцию wrapper. Функция wrapper засекает время выполнения функции, вызывает переданную функцию и выводит время выполнения.
• Определяем функцию factorial, которая вычисляет факториал
числа n.
• Используем декоратор @timer, чтобы применить декоратор
timer к функции factorial.
56
• Вызываем
Вызываем функцию
с аргументом
5. 5.
функциюfactorial
factorial
с аргументом
timerзасекает
засекает
время
выполнения
• Декоратор
Декоратор timer
время
выполнения
функциифункции
factorial,
factorial,
ее и выполнения.
выводит время выполнения.
вызывает
ее и вызывает
выводит время
Рис. 53. Использование декоратора
Использование
позволяет
добавлять дополнительРис.декораторов
53. Использование
декоратора
ную функциональность к функциям и методам без изменения их
Использование декораторов позволяет добавлять дополнительную
кода. Декораторы определяются как функции, которые принимают
функциональность к функциям и методам без изменения их кода. Декораторы
другую функцию в качестве аргумента и возвращают новую функопределяются
как функции,
которые принимают
другую
функцию
в качестве
цию, которая
обычно вызывает
переданную
функцию
и выполняет
аргумента
и возвращают
новую функцию, которая обычно вызывает
дополнительные
действия.
Декораторы
мощный дополнительные
инструмент в Python,
переданную
функцию и–выполняет
действия.который позволяет
добавлять
новые
функциональные
возможности
к существуюДекораторы – мощный инструмент в Python, который позволяет
добавлять
щему коду без его изменения. Изучение декораторов может помочь
новые функциональные возможности к существующему коду без его
улучшить качество и читаемость кода, а также повысить эффективизменения. Изучение декораторов может помочь улучшить качество и
ность программирования в Python.
читаемость
кода, а также
повысить
эффективность
программирования
в Python.
Рассмотрим
еще
один пример
программы
на Python, которая
Рассмотрим еще
один пример
программы
на Python,
которая
демонстрирует
использование
нескольких
встроенных
декораторов
(рис. 54). использование нескольких встроенных декораторов (рис. 54).
демонстрирует
57
Рис.
54.
встроенныхдекораторов
декораторов
Рис.
54.Использование
Использование нескольких
нескольких встроенных
Суть работы
работы программы
заключается
в следующем.
Суть
программы
заключается
в следующем.
Определяем
декоратор
timer,
который
принимает функцию
• Определяем декоратор timer, который принимает
функциюв
качестве
аргумента
и замеряет
время еевремя
выполнения.
Декоратор выводит
время
в качестве
аргумента
и замеряет
ее выполнения.
Декоратор
выводит время
выполнения
функции результат
в консоль
и возвращает
ревыполнения
функции
в консоль и возвращает
выполнения
функции.
зультат
выполнения
функции.
Определяем класс User, который имеет два атрибута: name и age.
• Определяем класс User, который имеет два атрибута: name
и age.
• Используем декоратор @property, чтобы превратить метод
is_adult в свойство объекта. Свойство is_adult вычисляет, является
ли пользователь совершеннолетним, основываясь на его возрасте.
58
• Определяем функцию print_user_info, которая принимает
объект класса User и выводит информацию о пользователе в консоль. Функция использует декоратор @timer, чтобы замерить время
выполнения.
• Создаем объект класса User с именем Иван и возрастом 25.
• Вызываем функцию print_user_info с объектом user.
Использование встроенных декораторов позволяет применять
готовые функции для преобразования методов и свойств объектов, а также для добавления дополнительной функциональности
к функциям.
Множественное наследование
Возможность класса наследовать свойства и методы сразу
от нескольких родительских классов – множественное наследование. Это означает, что класс может наследовать свойства и методы
не только от одного родительского класса, но и от нескольких.
В Python множественное наследование реализуется путем указания нескольких родительских классов в определении дочернего класса. При этом если несколько родительских классов имеют методы с одинаковыми именами, то при вызове такого метода
у дочернего класса будет использоваться первый подходящий метод из всех родительских классов в порядке, определенном в списке наследования.
Рассмотрим пример программы на Python, демонстрирующей
множественное наследование (рис. 55). В программе определены
три класса: A, B и C. Класс A имеет свойство a и метод method_a.
Класс B имеет свойство b и метод method_b. Класс C наследует
свойства и методы от A и B и имеет свойство c и метод method_c.
При создании объекта класса C все его свойства и методы становятся доступными для использования. В данном случае мы создали объект c и вызвали его методы method_a, method_b и method_c.
Когда создается объект c, Python вызывает конструктор класса C.
Конструктор класса C вызывает конструкторы классов A и B, передавая им нужные аргументы. Затем конструктор класса C инициализирует свойство c. При вызове метода method_a Python ищет его
в классе C. Так как метод method_a отсутствует в классе C, Python
59
совершеннолетним, основываясь на его возрасте.
Определяем функцию print_user_info, которая принимает объект
продолжает
поиск в родительском
A. Метод method_a
найден
класса
User и выводит
информацию классе
о пользователе
в консоль.
Функция
в классе
A, и поэтому
он чтобы
вызывается.
Аналогично
при вызове метоиспользует
декоратор
@timer,
замерить
время выполнения.
да method_b Python ищет его в классе C, но не находит, и затем ищет
Создаем объект класса User с именем Иван и возрастом 25.
его в родительском классе B. Метод method_b найден в классе B,
Вызываем функцию
print_user_info
с объектом
user.находит его
ион вызывается.
При вызове
метода method_c,
Python
в Использование
классе C и вызывает
его. Таким
образом, позволяет
при вызовеприменять
c.method_a()
встроенных
декораторов
готовые
будет выведено «Method A called», при вызове c.method_b() будет
функции для преобразования методов и свойств объектов, а также для
выведено «Method B called», а при вызове c.method_c() будет выведобавления дополнительной функциональности к функциям.
дено «Method C called».
Рис.
наследование
Рис. 55.
55. Множественное
Множественное наследование
Множественное наследование может быть полезным, когда
необходимо создать класс, который объединяет функциональность
нескольких классов.
60
Контрольные вопросы
1. Для решения каких задач применяется язык программирования
Python?
2. Что такое переменная? От чего зависит результат при использовании операций с переменными в Python?
3. Какие циклические структуры используются в Python? Приведите примеры.
4. Какие форматы условных операторов используются в Python?
Приведите примеры.
5. Какие типы коллекций используются в Python? Дайте им характеристику.
6. Что такое множество? Какие операторы используются для работы со множествами?
7. Что такое функция? Каким образом происходит объявление
функции?
8. Какие функции называются вложенными? Что используется для
создания замыкания?
9. Что такое модуль в Python? Что нужно определить для создания
модуля?
10. Что представляют собой классы в Python? Как определить класс?
11. Для чего нужны специальные методы? Как записать специальные методы?
12. Что представляет собой наследование в Python? Какой класс называется дочерним классом, а какой – родительским классом?
13. Что представляют собой объекты в Python? Чем могут быть
определены атрибуты объекта?
14. Что такое декораторы в Python? Для чего они нужны?
15. Что такое множественное наследование? Как реализуется
в Python множественное наследование?
61
Тесты для самоконтроля
(ответы см. в приложении)
1. Как называется упорядоченная последовательность символов, где каждый символ имеет свой индекс? (один вариант ответа)
а) строка
б) запись
в) кортеж
г) словарь
2. Какой метод используется для замены одной подстроки
на другую? (один вариант ответа)
а) format()
б) upper()
в) lower()
г) replace()
3. Какие условные операторы используются в Python для управления выполнения программы в зависимости от выполнения определенных условий? (несколько вариантов ответа)
а) if
б) else
в) elif
г) ifel
4. Как обрабатывать ошибки при вводе данных пользователем
с помощью функции input() в Python? (один вариант ответа)
а) использовать функцию read()
б) использовать функцию get()
в) использовать конструкцию try-except
г) не обрабатывать ошибки
5. Какие символы могут содержать строки в Python? (один вариант ответа)
а) только буквы
б) только цифры
в) любые символы, включая буквы, цифры и специальные символы
г) только специальные символы
62
6. Для чего используется цикл for в Python? (один вариант
ответа)
а) для повторения блока кода, пока определенное условие истинно
б) для перебора элементов в последовательности, такой как строка,
список или кортеж
в) для создания последовательностей в Python
г) для управления циклами
7. Как проверяется условие в цикле while в Python? (один вариант ответа)
а) условие проверяется после каждой итерации цикла
б) условие проверяется перед каждой итерацией цикла
в) условие проверяется только один раз перед началом цикла
г) условие не проверяется
8. Какие основные типы условных операторов существуют
в Python? (один вариант ответа)
а) if и for
б) if и else
в) while и else
г) for и else
9. Какой тип условного оператора необходимо использовать,
если нужно проверить несколько условий? (один вариант ответа)
а) if
б) else
в) elif
г) while
10. Что такое кортежи в Python? (один вариант ответа)
а) неупорядоченные коллекции объектов
б) упорядоченные коллекции объектов
в) коллекции, которые могут содержать объекты только одного типа
г) коллекции, которые могут быть изменены, добавлены или удалены
63
11. Какой оператор используется для доступа к элементам кортежа по индексу? (один вариант ответа)
а) ()
б) []
в) {}
г) <>
12. Какой метод используется для доступа к значению по ключу
в словаре в Python? (один вариант ответа)
а) index()
б) append()
в) remove()
г) get()
13. Какой оператор используется для создания множества
в Python? (один вариант ответа)
а) {}
б) []
в) ()
г) set()
14. Какой режим открытия файла используется по умолчанию
в Python? (один вариант ответа)
а) ‘r’
б) ‘w’
в) ‘x’
г) ‘a’
15. Какой метод используется для записи данных в файл
в Python? (один вариант ответа)
а) read()
б) write()
в) close()
г) print()
16. Какая функция модуля os используется для получения текущей рабочей директории? (один вариант ответа)
а) mkdir()
б) chdir()
64
в) getcwd()
г) rmdir()
17. Какая функция модуля os используется для перехода в другую директорию? (один вариант ответа)
а) mkdir()
б) chdir()
в) getcwd()
г) rmdir()
18. Какая функция модуля shutil используется для удаления директории? (один вариант ответа)
а) mkdir()
б) chdir()
в) getcwd()
г) rmtree()
19. Какие элементы входят в определение функции в Python?
(несколько вариантов ответа)
а) имя функции
б) список аргументов в скобках
в) блок кода
г) пароль
20. Что такое необязательные аргументы в функции Python?
(один вариант ответа)
а) аргументы, которые не могут быть переданы функции
б) аргументы, которые должны быть переданы функции
в) аргументы, значения которых не заданы, но могут быть переданы
функции
г) аргументы, значения которых всегда заданы
21. Какой тип переменной x находится в глобальной области
видимости в программе, демонстрирующей работу вложенных
функций? (один вариант ответа)
а) локальная
б) глобальная
в) нелокальная
г) константа
65
22. Как определяются вложенные функции в Python? (один
вариант ответа)
а) с помощью ключевого слова nested
б) с помощью ключевого слова inner
в) с помощью ключевого слова def, внутри другой функции
г) с помощью ключевого слова func, внутри другой функции
23. Что представляет собой модуль в языке программирования
Python? (один вариант ответа)
а) файл с расширением .py, содержащий определения функций,
классов, переменных и других объектов
б) файл с расширением .exe, содержащий исполняемый код программы
в) файл с расширением .txt, содержащий комментарии и описания
кода
г) файл с расширением .html, содержащий веб-страницу
24. Что такое исключения в Python? (один вариант ответа)
а) ошибки, возникающие во время выполнения программы
б) уведомления об успешном выполнении программы
в) директивы для компилятора
г) ошибки, возникающие при компиляции программы
25. Какое ключевое слово используется для вызова исключения
в Python? (один вариант ответа)
а) catch
б) raise
в) throw
г) handle
26. Для чего могут быть использованы атрибуты объектов
в Python? (один вариант ответа)
а) для хранения информации о состоянии объекта
б) для изменения кода класса
в) для создания новых типов данных
г) для изменения встроенных функций Python
66
27. Что такое декораторы в Python? (один вариант ответа)
а) это функции, которые принимают другую функцию в качестве
аргумента и возвращают новую функцию, изменяющую поведение исходной функции без ее изменения
б) это функции, которые изменяют поведение исходной функции,
изменяя ее код
в) это функции, которые добавляют новые возможности к языку
Python
г) это функции, которые удаляют ненужный код из существующих
функций
28. Какие ключевые слова используются для определения наследования классов в языке Python? (один вариант ответа)
а) extends, implements
б) extends, inherits
в) inherits, implements
г) None of the above
29. Что такое метод класса в языке Python? (несколько вариантов
ответа)
а) функция, определенная внутри класса
б) функция, определенная вне класса
в) метод может иметь доступ к атрибутам класса
г) метод может иметь доступ к атрибутам экземпляра класса
30. Какие методы вызываются автоматически при создании экземпляра класса? (несколько вариантов ответа)
а) init
б) str
в) new
г) del
67
Практические задания
задания по
по темам
темам модуля
модуля 11
Практические
Тема «Базовые
«Базовые структуры
структуры языка
языка Python и
и их обработка»
обработка»
Тема
Практические
задания поPython
темам их
модуля 1
Тема «Базовые структуры языка Python и их обработка»
Задание 1.
1. Создайте
Создайте файл
файл сс расширением
расширением «.py»
«.py» ии напишите
напишите программу,
программу,
Задание
Задание
1.сообщение
Создайте "Привет,
файл с расширением
«.py» и напишите прокоторая
выводит
Python!".
которая
выводит
сообщение "Привет,
Python!".
грамму,
которая выводит сообщение «Привет, Python!».
Ход работы
работы
Ход
Ход работы
1. Изучите
Изучите методические рекомендации.
рекомендации.
1.
1. Изучитеметодические
методические рекомендации.
2. Выполните
Выполните установку интерпретатора
интерпретатора Python
Python ии напишите
напишите программу,
программу,
2.
2. Выполнитеустановку
установку интерпретатора
Python и напишивыводящую на
на консоль
консоль текст
текст "Привет,
"Привет, Python!".
Python!". Для
Для этого
этого используйте
используйте один
один из
из
выводящую
те программу,
выводящую
на консоль
текст
«Привет,
Python!».
способов
взаимодействия.
Для этого
используйте один из способов взаимодействия.
способов
взаимодействия.
3.
Создайте
файл
расширением
«.py».
ДляДля
этого
Visual
Studio
Code
3. Создайте
Создайтефайл
файлсс срасширением
расширением
«.py».
этого
в Visual
Studio
3.
«.py».
Для
этого
вв Visual
Studio
Code
Code нажмите
в меню
File
→File.
New Text File.
нажмите
меню File
File
→ New
New
Text
File.
нажмите
вв меню
→
Text
4.
ВВпоявившемся
появившемся
окнеокне
редактором
нажмите
ссылку Select
Select
language
4.
окне
сс редактором
нажмите
ссылку
aa language
4. В
появившемся
с редактором
нажмите
ссылку
Select aии вв
поисковой
строке
напишите
Python,
выберите
Python.
languageстроке
и в поисковой
напишите
Python, выберите Python.
поисковой
напишите строке
Python, выберите
Python.
5. В
В Python-файле, используя
используя текстовый
текстовый редактор,
редактор, наберите
наберите следующую
следующую
5.
5. ВPython-файле,
Python-файле, используя
текстовый редактор,
наберите
программу:
программу:
следующую программу:
Функция print()
print() используется
для вывода информации
на экран.
В данном
Функция
используется
для вывода
информации
случае она выводит строку "Hello, World".
на экран. В данном случае она выводит строку «Hello, World».
6. Сохраните файл под именем HelloWorld.py, выбрав пункт меню
«Файл» – > «Сохранить». Лучше всего создать для файла отдельную папку в
удобном для вас расположении.
68
Функция print() используется для вывода информации на экран. В данном
случае она выводит строку "Hello, World".
6. 6.Сохраните
подименем
именем
HelloWorld.py,
выбрав
Сохраните файл
файл под
HelloWorld.py,
выбрав
пункт пункт
меню
меню
– > «Сохранить».
Лучше для
всего
создать
дляпапку
файла
«Файл»«Файл»
– > «Сохранить».
Лучше всего создать
файла
отдельную
в
отдельную
папку
в
удобном
для
вас
расположении.
удобном для вас расположении.
7. Запустите
Запустите сохраненный файл
при при
помощи
командной
строки командой
7.
файл
помощи
командной
строки
7. Запустите сохраненный
сохраненный файл
при помощи
командной
строки командой
py
HelloWorld.py
или python HelloWorld.py
командой
py HelloWorld.py
или python HelloWorld.py
py HelloWorld.py или python HelloWorld.py
Это
VisualStudio
StudioCode,
Code,нажав
нажав
Этоможно
можносделать
сделатьтакже
также из-под
из-под редактора
редактора Visual
нана
кнопку
запуска
69
кнопку
запускав вправом
правомверхнем
верхнем углу.
углу.
Это можно
также
из-под
редактора
VisualVisual
Studio Studio
Code, нажав
Это
можносделать
сделать
также
из-под
редактора
Code,на
кнопку
запуска
в правом
верхнем
углу. редактора
нажав
наможно
кнопку
запуска
в правом
верхнем Visual
углу. Studio Code, нажав на
Это
сделать
также
из-под
кнопку запуска в правом верхнем углу.
Так вы увидите результат работы программы во встроенном терминале.
Так вы увидите результат работы программы во встроенном терТак вы увидите результат работы программы во встроенном терминале.
минале.
Или нажмите в левом нижнем углу на иконки вывода ошибок и
предупреждений.
Или нажмите
нажмите вв левом
левом нижнем
нижнем углу
на иконки
иконки вывода
вывода ошибок
ошибок и
Или
углу на
предупреждений.
и предупреждений.
8. В открывшемся окне выберите вкладку «ТЕРМИНАЛ».
8. В 8.
открывшемся
окне
выберите
вкладку
«ТЕРМИНАЛ».
В открывшемся
открывшемся
окне
выберите
вкладку
«ТЕРМИНАЛ».
8.
В
окне
выберите
вкладку
«ТЕРМИНАЛ».
8. В открывшемся окне выберите вкладку «ТЕРМИНАЛ».
9. Перейдите в папку с расположением файла при помощи команды
cd <путь до папки с файлом>. Например, cd E:\temp_files
9. Перейдите
ввпапку
сс расположением
файла при
помощикоманды
команды
Перейдите
расположением
файла
помощи
9. Перейдите
в папку
с расположением
файлапри
при
помощи
команды
9.9.Перейдите
впапку
папку
с расположением
файла
при помощи
коcd
<путь
до
папки
с
файлом>.
Например,
cd
E:\temp_files
cd <путь
до папки
с файлом>.
Например,
cdcd
E:\temp_files
манды:
cdдо
<путь
до спапки
с файлом>.
Например,
cd E:\temp_files
cd
<путь
папки
файлом>.
Например,
E:\temp_files
10. Запустите Python-файл при помощи команды
py <название_файла>.py
10.
при
команды
10.Запустите
ЗапуститеPython-файл
Python-файл
при помощи
команды
или
10.
Запустите
Python-файл
при помощи
команды: py <назваpy
<название_файла>.py
py
<название_файла>.py
ние_файла>.py
или python <название_файла>.py
python
<название_файла>.py
10. Запустите Python-файл при помощи команды
или
или
py <название_файла>.py
или
python<название_файла>.py
<название_файла>.py
python
python <название_файла>.py
В результате запуска вы получите строку «Hello, World», прописанную в
содержимом файла HelloWorld.py. 70
В результате запуска
вы получите строку «Hello, World», прописанную в
указания
ВМетодические
результате запуска
вы получите строку «Hello, World», прописанную в
В результате запуска вы получите строку «Hello, World», прописанную в содержимом файла HelloWorld.py.
Методические указания
В Python операция вывода на экран тесно связана с функцией
print(). Эта функция является одним из наиболее часто используемых средств для вывода данных в стандартный вывод (обычно это
консоль).
Функция print() выводит заданные объекты в стандартный
поток вывода (консоль) или в другой текстовый поток. Она преобразует объекты в строки (используя встроенную функцию str())
и выводит их.
Функция
может
принимать
несколько
параметров:
Функция
может
принимать
несколько
параметров:
––*objects.
количество
объектов,
которые
нужнонужно
вывести.
*objects.Произвольное
Произвольное
количество
объектов,
которые
Объекты
будут
преобразованы
в строки и выведены;
вывести.
Объекты
будут преобразованы
в строки и выведены;
sep. Разделитель
между объектами
при выводе.
––sep.
Разделитель между
объектами при
выводе. Разделителем
Разделителем по
по умолчанию
является
умолчанию
является
пробел; пробел;
– end. Строка, которая будет добавлена после последнего объекта в выводе; по умолчанию символ новой строки (\n);
выводе; по умолчанию символ новой строки (\n);
– file. Объект файла, в который должен быть направлен вывод.
–
file. Объект– стандартный
файла, в который
направлен вывод. По
По умолчанию
потокдолжен
выводабыть
sys.stdout;
умолчанию
– стандартный
поток
вывода указывающее,
sys.stdout;
– flush.
Логическое
значение,
следует ли принудительно
поток вывода.
Если True,
поток
сбро– flush. «сбрасывать»
Логическое значение,
указывающее,
следует
ли будет
принудительно
шен
сразу
после
вывода.
«сбрасывать» поток вывода. Если True, поток будет сброшен сразу после
Существуют два способа взаимодействия с языком Python:
вывода.
– локальный способ. Предполагает установку Python на свой
Существуют два способа взаимодействия с языком Python:
компьютер. Пользователь может создавать и запускать программы
локальный
способ. Предполагает
установку
Python на
свой компьютер.
на –Python,
используя
установленное
ПО. Данный
подход
предоПользователь
может
создавать
и
запускать
программы
на
Python,
используя
ставляет полный контроль над окружением и доступ к различным
библиотекамПО.
и инструментам;
установленное
Данный подход предоставляет полный контроль над
–
использование
онлайн-сервисов.
В икачестве
альтернативного
окружением и доступ к различным
библиотекам
инструментам;
способа предлагается использование онлайн-сервиса Replit.
– end. Строка, которая будет добавлена после последнего объекта в
– использование онлайн-сервисов. В качестве альтернативного способа
предлагается использование онлайн-сервиса Replit.
71
Рассмотрим каждый из этих способов.
Основной способ. Локальная установка
Рассмотрим каждый из этих способов.
Основной способ. Локальная установка
Локальный способ подразумевает установку интерпретатора
Python, а также установку и настройку редактора кода. В качестве
редактора кода предлагается использование Visual Studio Code.
Скачайте и установите Python 3 для операционной системы
семейства Windows
https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe
https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe
https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe
https://www.python.org/ftp/python/3.11.1/python-3.11.1-amd64.exe
После
того
как
был
скачан
установочный
файл,
запустите
двойным
После
того
как
был
скачан
установочный
файл,
запустите
его его
двойным
После
того
как
был
скачан
установочный
файл,
запустите
его
кликом
мыши.
кликом
мыши.
двойным
кликом мыши.
После того как был скачан установочный файл, запустите его двойным
кликом мыши.
Отметьте галочкой пункт Add python.exe to PATH и нажмите Install Now.
Отметьте
галочкой
пункт
Add python.exe
to PATH
и нажмите
Install Now.
Отметьте
галочкой
пункт
Add python.exe
to PATH
и нажмите
Install Now.
Отметьте галочкой пункт Add python.exe to PATH и нажмите Install Now.
Дождитесь окончания установки.
Дождитесь
окончанияустановки.
установки.
Дождитесь
окончания
72
Дождитесь окончания установки.
Как Как
только
Python
установится,
нажмите
на кнопку
Close,Close,
чтобы
закрыть
только
Python
установится,
нажмите
на кнопку
что-
окно.
этим
убедитесь,
чтоэтим
в окне
появилась
wasчтобы
successful.
бы
закрыть
окно.установится,
Перед
убедитесь,
что
вкнопку
окне Setup
появилась
над- закрыть
КакПеред
только
Python
нажмите
нанадпись
Close,
пись Setup was successful.
окно. Перед этим убедитесь, что в окне появилась надпись Setup was successful.
Проверьте запуск Python. Для этого откройте меню «Пуск», напишите в
поиске «Командная строка» и откройте командную строку.
Проверьте запуск Python. Для этого откройте меню «Пуск», напишите в
поиске «Командная строка» и откройте командную строку.
73
Проверьте запуск Python. Для этого откройте меню «Пуск»,
напишите в поиске «Командная строка» и откройте командную
строку.
Напишите в командной строке команду python, чтобы убедиться, что
Напишите
строке
команду
python,
чтобы
убедитьНапишите вв командной
командной строке
команду
python,
чтобы
убедиться,
что
Pythonся,
нужной
версии
установлен.
что
Python
нужной
версии
установлен.
Python нужной версии установлен.
Напишите в командной строке команду python, чтобы убедиться, что
Python нужной версии установлен.
Командную строку можно закрыть. Python успешно установлен.
Командную
строку
можно
закрыть.
Python
успешно
установлен.
Командную
строку
можно
закрыть.
Python
успешно
установлен.
Альтернативным
вариантом
вызова
интерпретатора
является
команда py.
Альтернативным
вариантом
вызова
интерпретатора
Командную строку можно
закрыть.
Python успешно
установлен.является
Альтернативным вариантом вызова интерпретатора является команда py.
команда
py.
Альтернативным
вариантом вызова интерпретатора является команда py.
Скачайте и установите редактор кода Microsoft Visual Studio Code.
Для Windows:
Скачайте
и установитередактор
редактор кода
Visual
StudioStudio
Code. Code.
Скачайте
и установите
кодаMicrosoft
Microsoft
Visual
Скачайте
и установите редактор
кода Microsoft
Visual Studio
(https://code.visualstudio.com/sha/download?build=stable&os=win32-x64Для Windows:
Code.
Для
user) Windows:
(https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-
user)
(https://code.visualstudio.com/sha/download?build=stable&os=win32-x64user)
74
Для Windows: (https://code.visualstudio.com/sha/download?build=
stable&os=win32-x64-user)
75
Отметьте
галочками
пункты.
Отметьте галочками
всевсе
пункты.
Отметьте галочками все пункты.
76
Нажмите
на кнопку
«Установить».
Нажмите
на кнопку
«Установить».
Запустите установленный редактор.
Запустите установленный редактор.
Для Ubuntu-based ОС
Скачайте
77
установочный
пакет
по
ссылке
https://go.microsoft.com/fwlink/?LinkID=760868 и установите его командой sudo
Для Ubuntu-based ОС. Скачайте установочный пакет по ссылке
https://go.microsoft.com/fwlink/?LinkID=760868 и установите его
командой sudo apt install ./<file>.deb. Вместо <file> вставьте название скачанного файла.
После установки откроется интерфейс Visual Studio Code.
Установите из магазина расширений расширение Python.
Установите
измагазина
магазина
расширений
расширение
Установите из
расширений
расширение
Python. Python.
Дляэтого
этого слева
выберите
иконку
с расширениями
(1).
Для
слевав вменю
меню
выберите
иконку
с расширениями
(1).
Для этого слева в меню выберите иконку с расширениями (1).
В
строке
поиска
(2)
напишите
следующий
запрос
@id:ms-python.python.
В строке поиска (2) напишите следующий запрос @id:msВ строке поиска (2) напишите следующий запрос @id:ms-python.python.
python.python.
У необходимого расширения нажмите на кнопку Install (3).
необходимого расширения нажмите на кнопку Install (3).
УУнеобходимого
расширения
нажмите на кнопку
Install (3).
Альтернативный
способ. Использование
online-сервиса
Альтернативный способ. Использование online-сервиса
В качестве среды разработки используем сервис https://replit.com/
В качестве среды разработки используем сервис https://replit.com/
78
Альтернативный способ. Использование online-сервиса
В качестве среды разработки используем сервис https://replit.
com/
Необходимо зарегистрироваться
на сайте
Необходимо
зарегистрироваться
на(https://replit.com/signup).
сайте (https://replit.com/
Необходимо
зарегистрироваться
на
сайте
(https://replit.com/signup).
signup).
Необходимо зарегистрироваться на сайте (https://replit.com/signup).
После регистрации появляется интерфейс сервиса.
После регистрации появляется интерфейс сервиса.
После
регистрации
появляется
интерфейс
сервиса.
После регистрации
появляется
интерфейс
сервиса.
Необходимо нажать на кнопку Create Repl.
Необходимо нажать на кнопку Create Repl.
Необходимо нажать на кнопку Create Repl.
79
Необходимо нажать на кнопку Create Repl.
В открывшемся окне выберем Python.
В открывшемся
выберем
Python.
В открывшемсяокне
окне выберем
Python.
Затем в поле Title необходимо добавить название для создаваемого
Затем в поле Title необходимо добавить название для создаваемого
окружения.
Затем
в поле Title необходимо добавить название для создаваеокружения.
мого окружения.
Теперь необходимо создать окружение, нажав на кнопку Create Repl.
80
Теперь необходимо создать окружение, нажав на кнопку Create
Repl.
Теперь необходимо создать окружение, нажав на кнопку Create Repl.
Появляется редактор кода.
Появляется редактор кода.
В редакторе
редакторе кода
main.py.
Если
этого
В
кода должен
долженоткрыться
открытьсяфайл
файл
main.py.
Если
это-не
произошло,
выберите его
самостоятельно
в левой колонке редактора.
го не
выберите
самостоятельно
в левой
В произошло,
редакторе кода
должен его
открыться
файл main.py.
Если колонке
этого не
редактора.
произошло, выберите его самостоятельно в левой колонке редактора.
Напишите в файле main.py код для вывода текста «Hello, World!»:
print("Привет, Python!")
Напишите в файле main.py код для вывода текста «Hello, World!»:
81
и запустите, нажав кнопку Run.
print("Привет, Python!")
и запустите, нажав кнопку Run.
Напишите в файле main.py код для вывода текста «Hello, World!»:
Напишите в файле main.py код для вывода текста «Hello, World!»:
print(«Привет,
Python!»)
print("Привет, Python!")
запустите,
нажав
кнопку
иизапустите,
нажав
кнопку
Run. Run.
Появилась надпись
Python!".
ЭтоЭто
значит,
что что
код код
работает
Появилась
надпись"Привет,
«Привет,
Python!».
значит,
раправильно.
ботает правильно.
Задание 2. Напишите программу, которая запрашивает у польЗадание
2. Напишите
программу,
которая
запрашивает
у пользователя
зователя
два числа
и выводит
на экран
их сумму,
разность,
произвеЗадание
2.
Напишите
программу,
которая
запрашивает
пользователя
два числа
и выводит на экран их сумму, разность, произведение иу частное.
дение
и частное.
дваХод
числа
иработы
выводит на экран их сумму, разность, произведение и частное.
Ход
работы
работы
1.
Изучите
методические рекомендации.
1. Ход
Изучите
методические
рекомендации.
1.
Изучите
методические
рекомендации.
Создайте переменные,
которые
будут считывать
с консоли два
числа, а
2. 2.Создайте
переменные,
которые
будут считывать
с консоли
2.
Создайте
переменные,
которые
будут
считывать
с
консоли
два
числа, а
два
числа,
а
также
операции.
также операции.
также операции.
Выполните базовые
базовые математические
операции
с представленными
3. 3.Выполните
математические
операции
с представ3.
Выполните
базовые
математические
операции
с
представленными
числами и числами
запишите результаты
вычислений
в отдельные
переменные.
ленными
и запишите
результаты
вычислений
в отдельные
числами и запишите результаты вычислений в отдельные переменные.
переменные.
4. Выведите результаты вычислений, записанные в соответствующие
4. Выведите результаты вычислений, записанные в соответствующие
переменные.
переменные.
82
Методические указания
4. Выведите
результатывычислений,
вычислений, записанные
в соответствующие
4. Выведите
результаты
записанные
в соответствупеременные.
ющие переменные.
Методические
указания
Методические
указания
В программировании
переменные
важную
роль,
В программировании переменные
играютиграют
важную роль,
так как
они так
предназначены
для
хранения
данных.
В
языке
Python,
как
и
во
многих
других
как они предназначены для хранения данных. В языке Python, как
программирования,
наименование
переменной должно
начинаться с пеи во языках
многих
других языках
программирования,
наименование
буквы
алфавита
или
символа
подчеркивания,
а
далее
могут
следоватьподременной должно начинаться с буквы алфавита или символа
алфавитно-цифровые
символы
и
знак
подчеркивания.
Важно
помнить,
что имя
черкивания, а далее могут следовать алфавитно-цифровые
симвопеременной
не
может
совпадать
с
одним
из
ключевых
слов
языка
Python.
лы и знак подчеркивания. Важно помнить, что имя переменной
не может совпадать с одним из ключевых слов языка Python.
Несмотря на
ключевых слов
языке Python
Python немного,
Несмотря
на то,
то, что
что ключевых
слов вв языке
немного,ихихстоит
стозапомнить,
чтобычтобы
избежать
ошибок при
написании
ит
запомнить,
избежать
ошибок
при кода.
написании кода.
Несмотря на то, что ключевых слов в языке Python немного, их стоит
запомнить, чтобы избежать ошибок при написании кода.
Для того
того чтобы
переменную
в Python,
нужно выбрать
Для
чтобысоздать
создать
переменную
в Python,
нужноуникальное
выбрать
имя
переменной,
начинающееся
с
буквы
алфавита
или
символа
подчеркивания,
уникальное
начинающееся
с буквы
алфавита или
Дляимя
того переменной,
чтобы создать переменную
в Python, нужно
выбрать уникальное
и затемимя
присвоить
ей значение
помощью
оператора
присваивания
символа
подчеркивания,
исзатем
присвоить
значение
с"=".
помощью
переменной,
начинающееся
с буквы
алфавита
илией
символа
подчеркивания,
и
затем
присвоить
ей
значение
с
помощью
оператора
присваивания
"=".
оператора присваивания «=».
Например, чтобы создать переменную x и присвоить ей значение 1,
Например,
чтобы создать переменную x и присвоить ей значение 1,
необходимо написать следующую строку кода:
83
необходимо написать следующую строку кода:
Например, чтобы создать переменную x и присвоить ей значеНапример, чтобы создать переменную x и присвоить ей значение 1,
ние 1, необходимо
написать
следующую
строку кода:
необходимо написать
следующую
строку кода:
После этого значение 1 будет сохранено в переменной x и его можно
Послебудет
этого
значение 1 будет сохранено в переменной x и его
использовать в дальнейшем в программе. Если же переменная уже была
можно будет
использовать
дальнейшем
в программе.
Если же песоздана
и нужно изменитьв ее
значение, достаточно
присвоить ей новое
ременная значение:
уже была создана и нужно изменить ее значение, достаточно присвоить ей новое значение:
Теперь значение переменной x будет равно 2. Важно помнить, что в
Теперь Python
значение
переменной x будет равно 2. Важно помнить,
тип переменной определяется автоматически в зависимости от значения,
которое
было присвоено.
что в Python
типейпеременной
определяется автоматически в зависиВ Python есть несколько встроенных типов данных для переменных.
мости от значения,
которое ей было присвоено.
Целочисленный
данных (int)
– используется
для хранения
Теперь значение тип
переменной
x будет
равно 2. Важно
помнить, целых
что в
В Python
несколько встроенных типов данных для перечисел,есть
например:
Python
тип переменной определяется автоматически в зависимости от значения,
Теперь значение переменной x будет равно 2. Важно помнить, что в
менных. которое
ей было присвоено.
Python тип переменной определяется автоматически в зависимости от значения,
В Python есть несколько встроенных типов данных для переменных.
Целочисленный
тип данных (int) – используется для хранения
которое ей было присвоено.
Целочисленный тип данных (int) – используется для хранения целых
В Python
несколько
встроенных
типов
данных
для переменных.
Теперьесть
значение
переменной
x будет
равно
2. Важно
помнить, что в
целых чисел,
например:
чисел, например:
Python
тип переменной
определяется
автоматически
в зависимости
от значения,
Целочисленный
тип
данных (int)
– используется
для хранения
целых
Вещественный
тип данных (float) – используется для хранения дробных
которое
ей было присвоено.
чисел,
например:
чисел, например:
В Python есть несколько встроенных типов данных для переменных.
Целочисленный тип данных (int) – используется для хранения целых
чисел, например:
Вещественный тип данных (float) – используется для хранения дробных
Вещественный
тип данных (float) – используется для хранения
чисел, например:
Вещественный тип данных (float) – используется для хранения дробных
дробных чисел,
например:
Строковый
тип данных (str) – используется для хранения текстовых
чисел, например:
значений, заключенных в кавычки, например:
Вещественный тип данных (float) – используется для хранения дробных
чисел, например:
Строковый тип данных (str) – используется для хранения текстовых
значений, заключенных в кавычки, например:
Строковый тип данных (str) – используется для хранения текстовых
Строковый
тип
данных
(str)
используется
хранения текЛогический
тип данных
(bool)
––
используется
для хранениядля
логических
значений,
заключенных
в кавычки,
например:
Строковый тип данных (str) – используется для хранения текстовых
значений True
(истина) или False (ложь),
например:
стовых значений,
заключенных
в
кавычки,
например:
значений, заключенных в кавычки, например:
Логический тип данных (bool) – используется для хранения логических
значений True (истина) или False (ложь), например:
Логический тип данных (bool) – используется для хранения логических
типили
данных
– используется
значений Логический
True (истина)
False(bool)
(ложь),
например: для хранения логических
значений True (истина) или False (ложь), например:
84
Логический тип данных (bool) – используется для хранения логических значений True (истина) или False (ложь), например:
В Python можно выполнять различные операции с переменными, в
можно
различные
сспеременными,
их
типа данных. Рассмотрим
основныеоперации
операции.
ВВ Python
Pythonзависимости
можноотвыполнять
выполнять
различные
операции
переменными, в
В Python Операции
можно
выполнять
различные
операции
с переменными,
в
присваивания
позволяют
присваивать
значения
переменным.
в зависимости
от
их
типа
данных.
Рассмотрим
основные
операции.
В
Python
можно
выполнять
различные
операции
с
переменными,
в
зависимости от их типа данных. Рассмотрим основные операции.
Пример:
зависимости от их
типа данных. Рассмотрим основные операции.
Операции
присваивания
позволяют
присваивать
значения пезависимости
от их
типа данных.
Рассмотрим
основные
операции.
Операции
присваивания
позволяют
присваивать
значения
переменным.
Операции присваивания позволяют присваивать значения переменным.
ременным.
Операции
присваивания
позволяют
присваивать
значения
переменным.
Пример:
Пример:
Пример:
Пример:
Операции
арифметических
вычислений
позволяют
выполнять
арифметические операции над числовыми переменными. Пример:
Операции арифметических
арифметических
вычислений
позволяют
выполнять
Операции
вычислений
позволяютвыполнять
выполнять
Операции
арифметических
вычислений
позволяют
арифметические
операции
над
числовыми
переменными.
Пример:
Операции
арифметических
вычислений
позволяют
выполнять
арифметические
операции
над числовыми
переменными.
арифметические
операции
над числовыми
переменными.
Пример: Пример:
арифметические операции над числовыми переменными. Пример:
Операции сравнения позволяют сравнивать значения переменных.
Результатом такой операции является булево значение True или False.
Примеры:
Операции сравнения позволяют сравнивать значения переменных.
Результатом такой операции является булево значение True или False.
Операции
Операции сравнения
сравненияпозволяют
позволяют сравнивать
сравнивать значения
значения переменных.
переменПримеры:сравнения позволяют сравнивать значения переменных.
Операции
Результатом
такой операции
булево
значениебулево
True или
False.
ных. Результатом
такойявляется
операции
является
значение
True
Результатом
такой
операции
является
булево
значение
True
или
False.
илиПримеры:
False.
Примеры:
Примеры:
85
Операции конкатенации
значения
строковых
Операции
конкатенациипозволяют
позволяютобъединять
объединять
значения
строковыхОперации
переменных.
Пример:позволяют объединять значения строковых
переменных.
Пример:
конкатенации
переменных. Пример:
Операции конкатенации позволяют объединять значения строковых
В Python
PythonОперации
для
ии
вывода
данных
используются
стандартные
функции
конкатенации
позволяют
объединять
значения
строковых
В
дляввода
ввода
вывода
данных
используются
стандартные
переменных. Пример:
В
Python
для
ввода
и
вывода
данных
используются
стандартные
функции
переменных.
Пример:
input()
и print().
функции
input() и print().
input() и print().
Функция
input()позволяет
позволяет
получить
данные
от пользоватеФункция input()
получить
данные
от пользователя
через
Функция
input() позволяет
получить
данныеодин
от пользователя
через
ля
через
консольное
окно.
Она
принимает
необязательный
консольное окно. Она принимает один необязательный аргумент – строку
консольное–окно.
Онаприглашения,
принимает один
необязательный
аргумент
– строку
аргумент
строку
которая
выводится
пользователю
приглашения,
пользователю
перед
вводом данных.
Вкоторая
Python длявыводится
ввода и вывода
данных используются
стандартные
функции
приглашения,
пользователю
перед вводом
данных.
В которая
Python
длявыводится
ввода и вывода
данных используются
стандартные
функции
перед
вводом
данных.
input() и print().
Например:
input()
и
print().
Например:
Например:
Функция input() позволяет получить данные от пользователя через
Функция input() позволяет получить данные от пользователя через
консольное окно. Она принимает один необязательный аргумент – строку
консольное окно. Она принимает один необязательный аргумент – строку
приглашения, которая выводится пользователю перед вводом данных.
приглашения, которая выводится пользователю перед вводом данных.
Например:
Например:
ВВэтом
будетвыведено
выведеносообщение
сообщение
"Введите
ваше
этомпримере
примере пользователю
пользователю будет
"Введите
ваше
В этом примере пользователю будет выведено сообщение «Ввеимя:
", ",после
чего
он
ввести свое
свое имя через
черезконсоль.
консоль.Введенное
Введенное
имя:
после
чего
он сможет
сможет
дите ваше
имя:
», после
чеговвести
он сможет имя
ввести свое
имя через конВ значение
этом
примере
пользователю
будетвввыведено
сообщение
"Введите ваше
пользователем
будет
сохранено
переменной
name.
пользователем
значение
будет
сохранено
переменной
name.
соль.
Введенное
пользователем
значение
сохранено
В этом примере
пользователю будет
выведено будет
сообщение
"Введите вашев переимя: ", после чего он сможет ввести свое имя через консоль. Введенное
Запустим
код,
нажав
на
кнопку
Run.
Запустим
код,
нажав
на
кнопку
Run.
имя:
", после чего он сможет ввести свое имя через консоль. Введенное
меннойпользователем
name.
значение будет сохранено в переменной name.
пользователем
будет
сохранено
в переменной name.
Запустим
код,значение
нажав
накнопку
кнопку
Запустим
код,
нажав на
Run. Run.
Запустим код, нажав на кнопку Run.
Теперьпрограмма
программа выводит
выводит текст
Теперь
текст «Привет,
«Привет,{имя}».
{имя}».
программа выводит текст «Привет, {имя}».
Теперь Теперь
программа
выводит текст «Привет, {имя}».
Теперь программа выводит текст «Привет, {имя}».
В этом примере функция print() выведет на экран строку "Привет" и
этом примере
функцияprint()
print() выведет
выведет нана
экран
строку
"Привет"
и
В значение
этомВ примере
функция
экран
строку
"Привет"
и
переменной
name, разделенные
пробелом.
В
примере
функция
print()пробелом.
выведет
экран
строку
«При- и
В этом
этом
примере
функция
print()
выведет
нанаэкран
строку
"Привет"
значение
переменной
name, разделенные
вет» и значение переменной name, разделенные пробелом.
значение переменной name, разделенные пробелом.
Кроме того, функция print() поддерживает различные способы
форматирования вывода, например, использование специальных
символов или метода форматирования строк f-strings. Например:
значение переменной name, разделенные пробелом.
86
Кроме того, функция print() поддерживает различные способы
Кроме того, функция print() поддерживает различные способы
форматирования
вывода,функция
например,
использование
специальных
Кроме того,
print()
поддерживает
различныесимволов
способы или
форматирования вывода, например, использование специальных символов или
метода
форматирования
строк
f-strings.
Например: специальных символов или
форматирования
вывода,
например,
использование
метода форматирования строк f-strings. Например:
метода форматирования строк f-strings. Например:
Запустим
код,нажав
нажав на
кнопку
Run. Run.
Запустим
код,
на
кнопку
Запустим
код,
нажавна
накнопку
кнопку
Run.
Запустим
код,
нажав
Run.
Программа
выведет
Программа
выведетследующий
следующий текст:
текст:
Программа
выведет
следующий
Программа
выведет следующий
текст:текст:
В этом примере функция print() использует f-строку для вывода значения
В этом примере функция print() использует f-строку для вывода значения
переменной
name в дополнительной
формата.
Это позволяет
более гибко
В этом примере
функция print()строке
использует
f-строку
для вывода
значения
name в дополнительной
строке формата.
Это позволяет
более
гибко
Впеременной
этом
примере
функция print()
использует
f-строку
для
вывоуправлять форматированием вывода.
переменной name в дополнительной строке формата. Это позволяет более гибко
управлятьДля
форматированием
вывода.
да значения
переменной
name
в
дополнительной
строке
формата.
считывания числовых значений и логических значений (булевых) в
управлять форматированием вывода.
Для считывания
числовых
значений
и форматированием
логических
значений
(булевых)
в
Python
используется
функцияуправлять
input().
Однако
при считывании
таких значений
Это позволяет
более гибко
вывода.
Для считывания числовых значений и логических значений (булевых) в
Python
используется
функция
input().
Однако
приправильно
считывании
таких значений
необходимо
учитывать
их тип
данных,
чтобы
обработать
ихзначений
в
Для
считывания
числовых
значений
и логических
Python используется функция input(). Однако при считывании таких значений
дальнейшем.
необходимо
учитывать
их
тип
данных,
чтобы
правильно
обработать
их всчи(булевых)
в Python
используется
функция
input(). Однако
при
необходимо
их тип данных,
чтобыв Python
правильно
Для учитывать
считывания целочисленных
значений
можнообработать
использоватьих в
дальнейшем.
тывании
таких значений необходимо учитывать их тип данных,
дальнейшем.
функцию int(), которая преобразует введенную строку в целое число.
Для считывания целочисленных значений в Python можно использовать
чтобы правильно
обработать
их в значений
дальнейшем.
ДляНапример:
считывания
целочисленных
в Python можно использовать
функцию int(), которая преобразует введенную строку в целое число.
Для
считывания
целочисленных
значений
в Python
функцию int(), которая преобразует введенную
строку в целое
число. можно исНапример:
пользовать
функцию int(), которая преобразует введенную строку
Например:
в целое число.
Например:
Запустим код, нажав на кнопку Run.
Запустим
код,
накнопку
кнопку
Запустим
код,нажав
нажав на
Run. Run.
Введите возраст в первую строку.
Введите возраст в первую строку.
87
В этом примере функция input() считывает введенную пользователем
Запустим код, нажав на кнопку Run.
Запустим код, нажав на кнопку Run.
ВведитеВведите
возраст
первую
строку.
Запустим
код,внажав
на кнопку
Run.
возраст
в первую
строку.
Введите возраст в первую строку.
Введите возраст в первую строку.
В этом примере функция input() считывает введенную пользователем
В этом примере функция input() считывает введенную пользостроку, которая затем преобразуется в целое число с помощью функции int().
вателем строку,
которая
затем
преобразуется
в целое число с помоВ этом
примере
функция
input() считывает
введенную пользователем
Результат
сохраняется
в переменную
age.
щьюстроку,
функции
int().
Для проверки
типа значения визменим
код, обернув
переменную
в
которая
затем преобразуется
целое число
с помощью
функцииage
int().
В этом примере функция input() считывает введенную пользователем
Результат
сохраняется
в
переменную
age.
функцию
type()
в
выводе
print().
Результат
сохраняется
в переменную
строку,
которая
затем преобразуется
в целоеage.
число с помощью функции int().
Для проверки
типа
значения
изменим
код, переменную
обернув переменДляРезультат
проверки
типа значения
изменим
age в
сохраняется
в переменную
age. код, обернув
ную функцию
age в функцию
type()
в выводе
print().
Для
проверки
типа
значения
изменим
код, обернув переменную age в
type()
в выводе
print().
функцию type() в выводе print().
Запустим код, нажав на кнопку Run.
Запустим
код,
нажав
Run.
Запустим
код,
нажавна
накнопку
кнопку
Run. Run.
Запустим
код,
нажав
на
кнопку
В выводе
увидим,
появилась
строка
<class ‘int’>.
В выводе
увидим, что
что появилась
строка
<class 'int'>.
В выводе увидим, что появилась строка <class 'int'>.
Это означает, что переменная age является типом int(), то есть содержит
Это означает, что переменная age является типом int(), то есть
целочисленное значение.
Это означает, что переменная
age является типом int(), то есть содержит
содержит целочисленное
значение.
Для считывания
вещественных значений в Python можно использовать
целочисленное
значение.
Для считывания вещественных значений в Python можно исфункциюДля
float(),
котораявещественных
преобразует значений
введенную
строкуможно
в число
с плавающей
считывания
в Python
использовать
пользовать функцию float(), которая преобразует введенную строку
точкой.
Например:
функцию float(), которая преобразует введенную строку в число с плавающей
в числоточкой.
с плавающей
точкой. Например:
Например:
Запустим код, нажав на кнопку Run.
Запустим код, нажав на кнопку Run.
88
Вводить значения типа float необходимо через символ «.»
Запустим
код,
нажавнана
кнопку
Run. Run.
Запустим
код,
нажав
на
кнопку
Запустим
код,
нажав
кнопку
Run.
Вводить
значениятипа
типа float
необходимо
через символ
«.» символ «.»
Вводить
значения
float
необходимо
через
Вводить
значения типа
float
необходимо
через символ
«.»
В этом примере функция input() считывает введенную пользователем
строку,
которая
затем функция
преобразуется
в число
с плавающей
точкой пользователем
с помощью
В этом
примере
input()
считывает
введенную
В этом
примере функция input() считывает введенную пользофункции float(). Результат сохраняется в переменную value.
строку, которая затем преобразуется в число с плавающей точкой с помощью
вателем строку,
которая
затем изменим
преобразуется
число сvalue
плавающей
Для проверки
типа значения
код, обернуввпеременную
в
функции float(). Результат сохраняется в переменную value.
точкой функцию
с помощью
функции
type() в выводе
print(). float(). Результат сохраняется в переДля проверки типа значения изменим код, обернув переменную value в
менную value.
функцию type() в выводе print().
Для проверки типа значения изменим код, обернув переменную value в функцию type() в выводе print().
Запустим
код, нажавна
на кнопку
Run.
Запустим
код,код,
нажав
кнопку
Запустим
нажав на кнопку
Run. Run.
Запустим код, нажав на кнопку Run.
В выводе увидим, что появилась строка <class 'float'>. Это означает, что
В выводе
увидим,
что
появилась
строка
<class <class
'float'>. Это
означает,
что ознапеременная
value
стала
типапоявилась
float.
В выводе
увидим,
что
строка
‘float’>.
Это
переменная
value
стала
типа
float.
В выводе увидим,
что появилась
строкаfloat.
<class 'float'>. Это означает, что
чает, что переменная
value
стала типа
переменная value стала типа float.
Для считывания логических значений (булевых) в Python можно
использовать функцию bool(), которая преобразует введенную строку в
Для считывания логических значений (булевых) в Python можно
логическое значение True или False. Например:
использовать
функцию логических
bool(), которая
преобразует
введенную
Для считывания
значений
(булевых)
в Pythonстроку
можнов
Для
считывания
логических
значений
(булевых)
в
Python
логическое
значение
True или
False.
Например:
использовать
функцию
bool(),
которая
преобразует введенную строку в
можно использовать функцию bool(), которая преобразует введенную
логическое значение True или False. Например:
строку в логическое значение True или False. Например:
Запустим код, нажав на кнопку Run.
Run.
89
Запустим код, нажав на кнопку
В данном случае может вводиться только True или False, а также 1 или 0.
Запустим код, нажав на кнопку Run.
Для считывания логических значений (булевых) в Python можно
использовать функцию bool(), которая преобразует введенную строку в
Для считывания логических значений (булевых) в Python можно
логическое
значение
True или
False.которая
Например:
использовать
функцию
bool(),
преобразует введенную строку в
логическое значение True или False. Например:
Запустим код, нажав на кнопку Run.
Запустим
код, нажав на кнопку Run.
Запустим код, нажав на кнопку Run.
В данном случае может вводиться только True или False, а также 1 или 0.
В данном
случае
может вводиться
толькотолько
True или True
False, аили
такжеFalse,
1 или 0.а также
В данном
случае
может
вводиться
1 или 0.
Для
проверки типа
типа значения
изменим
код, обернув
переменную
is_valid
в
ДляДля
проверки
значения
изменим
код,переменную
обернув is_valid
переменДля
проверки типа
типа значения
значения
изменим
код, обернув
обернув
переменную
is_valid
проверки
изменим
код,
вв
функцию
type()
в
выводе
print().
ную
is_valid
в функцию
type() в выводе print().
функцию
type()
вв выводе
функцию
type()
выводе print().
print().
Запустим код, нажав на кнопку Run.
Запустим
код, нажав
нажав на
нана
кнопку
Run. Run.
Запустим
код,
нажав
кнопку
Run.
Запустим
код,
кнопку
В выводе увидим, что появилась строка <class 'bool'>.
В
увидим,
строка
<class
В выводе
увидим,
чтопоявилась
появилась
строка
<class ‘bool’>.
В выводе
выводе
увидим, что
что
появилась
строка
<class 'bool'>.
'bool'>.
В Python нельзя складывать между собой переменные разных типов
В
В Python
Python нельзя
нельзя складывать
складывать между
между собой
собой переменные
переменные разных
разных типов
типов
В Python
нельзя
складывать
междуи число.
собой переменные разных
данных.
Например,
нельзя
складывать строку
данных.
число.
данных. Например,
Например, нельзя
нельзя складывать
складывать строку
строку и
и число.
типов данных.
Например,
нельзя
складывать
строку и число.
Изменим код.
Изменим
Изменим код.
код.
90
В Python нельзя складывать между собой переменные разных типов
данных. Например, нельзя складывать строку и число.
Изменим
код.
Изменим
код.
Запустим, нажав на кнопку Run.
Запустим,
нажав на кнопку Run.
Если попытаться выполнить такую операцию, Python выдаст ошибку
Если
попытаться
выполнить
такую
операцию,
Python
выдаст
Если
попытаться выполнить
такую
операцию,
Python выдаст
ошибку
TypeError.
ошибку
TypeError.
TypeError.
Если попытаться выполнить такую операцию, Python выдаст ошибку
TypeError.
Стоит также упомянуть комментарии. В Python комментарий – это текст,
который игнорируется интерпретатором Python при выполнении программы.
Комментарии используются для описания кода, объяснения его работы,
Стоит
такжеупомянуть
упомянуть комментарии.
В Python
комментарий
– это текст, –
Стоит
также
комментарии.
В Python
комментарий
документирования функций, классов и других целей, которые помогают
игнорируется
интерпретатороминтерпретатором
Python при выполнении
программы.
этокоторый
текст,сделать
который
игнорируется
Python
при выкод более понятным и читабельным.
Комментарии
используются
для
описания
кода,
объяснения
его
работы,
полнении Стоит
программы.
Комментарии
используются
для
описания
Комментарии в Python
начинаются со знака
# и продолжаются до
конца
также упомянуть комментарии. В Python комментарий – это текст,
строки. Все символы
после классов
знака документирования
# дои конца
строкицелей,
будут игнорироваться
документирования
функций,
других
которые
помогают
кода,
объяснения
его
работы,
функций,
который игнорируется интерпретатором Python при выполнении программы. класинтерпретатором.
сделать
код более
понятным
и читабельным.
сов и других
целей,
которые
помогают
сделать
код более
понятным
Комментарии
используются
для
описания кода,
объяснения
его работы,
Например, вот как выглядят комментарии в Python.
Комментарии в Python
знака целей,
# и продолжаются
до конца
документирования
функций,начинаются
классов и со
других
которые помогают
и читабельным.
строки.
Все
символы
после
знака
#
до
конца
строки
будут
игнорироваться
сделать
код
более
понятным
и
читабельным.
Комментарии в Python начинаются со знака # и продолжаются
Комментарии
начинаются
со знака
знака # и#продолжаются
до конца будут
интерпретатором.
до конца
строки.
Всев Python
символы
после
до конца строки
строки.
Все
символы
после
знака
#
до
конца
строки
будут
игнорироваться
Например, вот
как выглядят комментарии в Python.
игнорироваться
интерпретатором.
интерпретатором.
Например, вот как выглядят комментарии в Python.
Например, вот как выглядят комментарии в Python.
Многострочные комментарии в Python – это особый тип комментариев,
который
позволяет
вставлять
комментарии
на
несколько
строк.
Они
используются для документирования кода и описания его функциональности.
Многострочные комментарии в Python – это особый тип комментариев,
комментарии
в Python – этона
особый
тип комментариев,
который Многострочные
позволяет вставлять
комментарии
несколько
строк. Они
который
позволяет
вставлять
комментарии
на
несколько
строк.
Они
используются для документирования кода и описания его функциональности.
кода
91
используются для документирования
и описания его функциональности.
Многострочные комментарии в Python – это особый тип комментариев, который позволяет вставлять комментарии на несколько строк. Они используются для документирования кода и описания его функциональности.
В Python
многострочные
комментарии
создаются
с тройных
помощью
В Python
многострочные комментарии
создаются
с помощью
В Python
Python многострочные
многострочные комментарии
комментарии создаются
создаются сс помощью
помощью тройных
тройных
В
тройных
(«»»Все,
иличто‘’’).
Все, что
находится
между двумя
кавычеккавычек
(""" или ''').
находится
между
двумя наборами
тройныхнакавычек ("""
(""" или
или ''').
'''). Все,
Все, что
что находится
находится между
между двумя
двумя наборами
наборами тройных
тройных
кавычек
борами
тройных
кавычек,
будет считаться
комментарием
и проигкавычек,
будет считаться
комментарием
и проигнорировано
интерпретатором
кавычек,
будет
считаться
комментарием
и
проигнорировано
интерпретатором
кавычек,
будет
считаться
комментарием
и
проигнорировано
интерпретатором
норировано
интерпретатором
Python при выполнении
программы.Python при выполнении программы.
Python при
при выполнении
выполнении программы.
программы.
Python
Ниже
представлен
пример
использования
многострочного
Ниже представлен пример
использования
многострочного
комментария в
Ниже
представлен
пример использования
использования многострочного
многострочного комментария
комментария вв
Ниже
представлен
пример
комментария
в Python:
Python:
Python:
Python:
Запустим файл, нажав кнопку Run.
Запустим
файл, нажав
нажав кнопку
кнопку
Run. Run.
Запустим
файл,
нажав
кнопку
Запустим
файл,
Run.
В результате получим следующий вывод в консоли:
В результате
результате
получим следующий
следующий
вывод
консоли:
В результате
получим
следующий
вывод
в консоли:
В
получим
вывод
вв консоли:
Строки, циклы и условия – это базовые концепции языка
Строки, циклы
циклы ии условия
условия –– это
это базовые
базовые концепции
концепции языка
языка
Строки,
Строки,
циклыPython,
и условия
– это
базовые
концепции
программирования
которые
используются
для
обработки языка
данных прои
программирования
Python,
которые
используются
для
обработки
данных
программирования Python, которые используются для обработки данных ии
граммирования
Python,
которые используются для обработки дануправления логикой
программы.
управления логикой
логикой программы.
программы.
управления
ных и управления логикой программы.
Строки
Строки
Строки
Строка (или строковый тип данных) – это последовательность символов,
Строка
(или
строковый
тип
данных)
это последовательность
последовательность символов,
символов,
Строки
Строка (или строковый тип данных) –– это
которая может содержать любые символы, включая буквы, цифры, знаки
которая
может
содержать
любые
символы,
включая
буквы,
цифры, знаки
знаки
Строкаможет
(илисодержать
строковый
типсимволы,
данных)
– это буквы,
последовательность
которая
любые
включая
цифры,
препинания и пробелы. В программировании строки широко используются для
препинания
и
пробелы.
В
программировании
строки
широко
используются
для
символов,
которая
может
содержать любые
включаядля
букпрепинания
и пробелы.
В программировании
строки символы,
широко используются
хранения и обработки текстовой информации.
хранения
обработки
текстовой информации.
информации.
вы,хранения
цифры,
знаки препинания
и пробелы. В программировании
ии обработки
текстовой
строки широко используются для хранения и обработки текстовой
информации.
92
В языке
программирования Python
являются
неизменяемыми
В языке
программирования
Pythonстроки
строки
являются
неизменяемыми
объектами,
то есть
после
создания
строки
нельзя
изменить
объектами,
то есть
после
создания
строки
нельзя
изменить
ее содержимое.
В языке
программирования
Python
строки
являются
неизменяемыми
ееСтроки
содержимое.
Строки
в
Python
могут
быть
созданы
с
помощью
в
Python
могут
быть
созданы
с
помощью
одинарных
('),
двойных
(") или
объектами, то есть после создания строки нельзя изменить ее содержимое.
одинарных
(‘),""")
двойных
или тройных
или «»»)
кавычек.
тройных
или
кавычек.
Строки('''
в Python
могут
быть(«)
созданы
с помощью (‘’’
одинарных
('), двойных
(") или
В языке программирования Python строки являются неизменяемыми
тройных (''' или """) кавычек.
объектами, то есть после создания строки нельзя изменить ее содержимое.
Строки в Python могут быть созданы с помощью одинарных ('), двойных (") или
тройных (''' или """) кавычек.
Например, следующий код создает строку, содержащую текст "Hello,
Например,
следующий код создает строку, содержащую текст
Например, следующий код создает строку, содержащую текст "Hello,
World!",
и
записывает
её в переменную
s:
«Hello,
World!», и записывает
её в переменную
s:
World!", и записывает её в переменную s:
Например, следующий код создает строку, содержащую текст "Hello,
World!", и записывает её в переменную s:
Рассмотрим теперь возможности работы с текстом. Допустим, что в текст
Рассмотрим теперь возможности работы с текстом. Допустим, что в текст
Рассмотрим
теперь возможности работы с текстом. Допустим,
нашей
программы
world
вставитьодинарную
одинарнуюкавычку.
кавычку.
нашей
программыHello,
worldнам
нам нужно
нужно вставить
что в текст нашейHello,
программы
Hello,
world нам нужно
вставить одиСтроки
операцийииметодов,
методов,которые
которые
Строкив вPython
Pythonподдерживают
поддерживают множество
множество операций
нарнуюРассмотрим
кавычку.
теперь возможности работы с текстом. Допустим, что в текст
позволяют
можно объединять
объединятьстроки
строкис спомощью
помощью
позволяютработать
работатьссними.
ними. Например,
Например, можно
Строки
в Python
множество
операций
нашей
программы
Hello,поддерживают
world нам нужно вставить
одинарную
кавычку. и метооператора"+"
"+"или
или умножать
умножать строку
строку на целое
оператора
целое число,
число, чтобы
чтобысоздать
создатьновую
новую
дов,
которые
позволяют
работать
с
ними.
Например,
можно
объСтроки в Python поддерживают множество операций и методов,
которые
строку,
содержащую
несколько
копий
исходной
строки.
строку,
содержащую
несколько
копий
исходной
строки.
единять
строки
с помощью
оператора
«+» или умножать
строку
позволяют
работать
с ними. Например,
можно объединять
строки с помощью
на целое
число,
чтобы
создать
новую
строку,
содержащую
нескольоператора "+" или умножать строку на целое число, чтобы создать новую
ко копий
исходной несколько
строки. копий исходной строки.
строку, содержащую
Запустим, нажав на кнопку Run.
Запустим, нажав на кнопку Run.
Запустим, нажав на кнопку Run.
93
Запустим, нажав на кнопку Run.
В Python многострочные комментарии создаются с помощью тройных
кавычек (""" или '''). Все, что находится между двумя наборами тройных
Строки
также
поддерживают
индексацию,
то есть можно
получить
доступ
кавычек,
будет
считаться
комментарием
и проигнорировано
интерпретатором
Строки
также
поддерживают
индексацию,
то есть
можно
полуотдельным
строки
по их индексу
(начинающемуся
с 0).
при выполнении
программы.
читькPython
доступ
ксимволам
отдельным
символам
строки
по можно
их индексу
(начинаСтроки также
поддерживают
индексацию,
то есть
получить
доступ
Строки
также
поддерживают
индексацию,
то есть
можно
получить
доступ
Кроме
того,
можно
использовать
срезы
(slice),
чтобы
получить
подстроку
Ниже
представлен пример использования многострочного комментария
в
ющемуся
с
0).
к отдельным символам строки по их индексу (начинающемуся с 0).
к отдельным
символам строки по их индексу (начинающемуся с 0).
из
строки.
Python:
Кроме
можно
использовать
(slice),
чтобыподстроку
получить
Кроме того,
того, можно
использовать
срезы срезы
(slice), чтобы
получить
Кроме того, можно использовать срезы (slice), чтобы получить подстроку
подстроку
из
строки.
из строки.
из строки.
Запустим, нажав на кнопку Run.
Запустимнажав
файл,на
нажав
кнопку
Запустим,
нажав
на
кнопку
Run.
Запустим,
кнопку
Run.Run.
Запустим, нажав на кнопку Run.
В результате получаем первый и последний символ строки.
В результате получаем первый и последний символ строки.
В результате
получим следующий
вывод
в консоли:
В результате
получаем
первый
и последний
В результате
получаем
первый
и последний
символсимвол
строки. строки.
Строки в Python также имеют множество методов, которые позволяют
выполнять различные операции с ними. Например, методы upper() и lower()
Строки, циклы и условия – это базовые концепции языка
позволяют преобразовывать строку в верхний или нижний регистр
Строки
в PythonPython,
также которые
имеют множество методов,
которые данных
позволяют
программирования
для обработки
и
Строки в Python
также имеют используются
множество методов,
которые позволяют
Строкиразличные
в Pythonоперации
также имеют множество методов, которые повыполнять
управления
логикой программы. с ними. Например, методы upper() и lower()
выполнять
различные различные
операции с ними.
Например,
методы
upper() и lower()
зволяют
выполнять
операции
с ними.
Например,
метопозволяют преобразовывать строку
в верхний или нижний регистр
Строки
позволяют
преобразовывать
строку
в
верхний
или
нижний
регистр
ды upper() и lower() позволяют преобразовывать строку в верхний
Строка (или строковый тип данных) – это последовательность символов,
или нижний регистр соответственно, метод strip() удаляет пробекоторая может содержать любые символы, включая буквы, цифры, знаки
лы спрепинания
начала ии конца
строки, метод replace() заменяет часть строки
пробелы. В программировании строки широко используются для
на другую
строку
и
т.
д.
хранения и обработки текстовой информации.
94
соответственно, метод strip() удаляет пробелы с начала и конца строки, метод
соответственно, метод strip() удаляет пробелы с начала и конца строки, метод
соответственно,
пробелы
си
начала
replace() заменяетметод
частьstrip()
строкиудаляет
на другую
строку
т. д. и конца строки, метод
replace() заменяет часть строки на другую строку и т. д.
replace() заменяет часть строки на другую строку и т. д.
Запустим,
нажав на
кнопку
Run.
Запустим,
нажав
накнопку
кнопку
Запустим,
нажав на
Run.Run.
Запустим, нажав на кнопку Run.
Стоит заметить, что пробелы во второй строке остались.
Стоит
заметить, что
пробелы
во второй
строке остались.
Стоит
заметить,
чтопробелы
пробелы
во второй
строке остались.
Стоит
заметить,
что
во второй
строке
Применение
методов
осуществляется
через остались.
точку после строки или
Применение методов осуществляется через точку после строки или
Применение
методов
осуществляется
через
точку
Применение
методов
осуществляется
через
точку
после после
строки строки
или
переменной.
переменной.
илипеременной.
переменной.
Выделяют
следующие методы
для работы
со строками
Выделяют
следующие
методы
работы
со строками
Выделяют
следующие методы
для для
работы
со строками
Выделяют
методы для работыНазначение
со строками
Функция
илиследующие
метод
Функция или метод
Назначение
Функция
или
метод
Назначение
илиS метод
Назначение
Литералы
строк
S =Функция
'str'; S = "str";
= '''str''';
S = 'str'; S = "str"; S = '''str''';
Литералы строк
S = 'str'; S = "str";
Литералы строк
S = S = '''str''';
S = ‘str’; S = “str”;
S = S = ‘’’str’’’; Литералы строк
S=
"""str"""
S=
«»»str»»»
"""str"""
"""str"""
=«s\np\ta\nbbb»
"s\np\ta\nbbb"
Экранированные
последовательности
SSS==
Экранированные
последовательности
"s\np\ta\nbbb"
Экранированные
последовательности
S
=
"s\np\ta\nbbb"
Экранированные
последовательности
S
=
r"C:\temp\new"
Неформатированные
строки
(подавляют
SS==r»C:\temp\new»
Неформатированные
(подавляr"C:\temp\new"
Неформатированные
строкистроки
(подавляют
S = r"C:\temp\new"
Неформатированные
строки (подавляют
ют экранирование)
S = b»byte»
S1 + S2
S1 * 3
S[i]
S[i:j:step]
Строка байтов
Конкатенация (сложение строк)
Повторение строки
Обращение по индексу
Извлечение среза
95
Функция или метод
len(S)
Назначение
Длина строки
S.find(str, [start],[end])
Поиск подстроки в строке.
Возвращает номер первого
вхождения или -1
S.rfind(str, [start],[end])
Поиск подстроки в строке. Возвращает
номер последнего вхождения или -1
S.index(str, [start],[end])
Поиск подстроки в строке.
Возвращает номер первого
вхождения или вызывает ValueError
S.rindex(str, [start],[end])
Поиск подстроки в строке.
Возвращает номер последнего
вхождения или вызывает ValueError
S.replace(шаблон, замена[,
maxcount])
Замена шаблона на замену. maxcount
ограничивает количество замен
S.split(символ)
Разбиение строки по разделителю
S.isdigit()
Состоит ли строка из цифр
S.isalpha()
Состоит ли строка из букв
S.isalnum()
Состоит ли строка из цифр или букв
S.islower()
Состоит ли строка из символов
в нижнем регистре
S.isupper()
Состоит ли строка из символов
в верхнем регистре
S.isspace()
Состоит ли строка из неотображаемых
символов (пробел, символ перевода
страницы (‘\f’), «новая строка» (‘\n’),
«перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная
табуляция» (‘\v’))
S.istitle()
Начинаются ли слова в строке
с заглавной буквы
S.upper()
Преобразование строки к верхнему
регистру
S.lower()
Преобразование строки к нижнему
регистру
S.startswith(str)
Начинается ли строка S с шаблона str
96
Функция или метод
Назначение
S.endswith(str)
Заканчивается ли строка S шаблоном str
S.join(список)
Сборка строки из списка
с разделителем S
ord(символ)
Символ в его код ASCII
chr(число)
S.capitalize()
S.center(width, [fill])
Код ASCII в символ
Переводит первый символ строки
в верхний регистр, а все остальные
в нижний
Возвращает отцентрованную строку,
по краям которой стоит символ fill
(пробел по умолчанию)
S.count(str, [start],[end])
Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки
по умолчанию)
S.expandtabs([tabsize])
Возвращает копию строки, в которой
все символы табуляции заменяются
одним или несколькими пробелами,
в зависимости от текущего столбца.
Если TabSize не указан, размер табуляции полагается равным 8 пробелам
S.lstrip([chars])
Удаление пробельных символов
в начале строки
S.rstrip([chars])
Удаление пробельных символов
в конце строки
S.strip([chars])
Удаление пробельных символов
в начале и в конце строки
S.partition(шаблон)
S.rpartition(sep)
Возвращает кортеж, содержащий
часть перед первым шаблоном,
сам шаблон и часть после шаблона.
Если шаблон не найден, возвращается
кортеж, содержащий саму строку,
а затем две пустые строки
Возвращает кортеж, содержащий
часть перед последним шаблоном,
сам шаблон и часть после шаблона.
Если шаблон не найден, возвращается
кортеж, содержащий две пустые строки,
а затем саму строку
97
Функция или метод
Назначение
S.swapcase()
Переводит символы нижнего регистра
в верхний, а верхнего – в нижний
S.title()
Первую букву каждого слова переводит
в верхний регистр, а все остальные
в нижний
S.zfill(width)
Делает длину строки не меньшей width,
по необходимости заполняя первые
символы нулями
S.ljust(width, fillchar=» «)
Делает длину строки не меньшей width,
по необходимости заполняя последние
символы символом fillchar
S.rjust(width, fillchar=» «)
Делает длину строки не меньшей width,
по необходимости заполняя первые
символы символом fillchar
S.format(*args, **kwargs)
Форматирование строки
Задание 3. Напишите программу, которая принимает на вход список целых чисел и выводит на экран только четные числа из списка.
Ход работы
1. Изучитеметодические
методические рекомендации.
1. Изучите
рекомендации.
2. Создайтесписок
список my_list,
который
содержит
последовательность
целых
2. Создайте
my_list,
который
содержит
последователь1. Изучите методические рекомендации.
чисел
от 1 дочисел
10.
ность
целых
от 1 до 10.
2. Создайте список my_list, который содержит последовательность целых
чисел от 1 до 10.
3. Инициируйте цикл for, который будет итерировать по каждому
3. Инициируйте цикл for, который будет итерировать по каждо-
элементу в списке my_list, присваивая текущее значение элемента переменной
му элементу
в списке my_list,
текущее
значение
элемен3. Инициируйте
цикл for,присваивая
который будет
итерировать
по каждому
num. В теле цикла используйте условный оператор if для проверки, является ли
та переменной
num.
В
теле
цикла
используйте
условный
оператор
элементу в списке my_list, присваивая текущее значение элемента переменной
текущее число num чётным. Для этого используйте оператор деления по
if для
лиусловный
текущее
числоifnum
чётным.
Для этого
num.проверки,
В теле циклаявляется
используйте
оператор
для проверки,
является
ли
модулю %, который возвращает остаток от деления num на 2.
используйте
оператор
деления
по
модулю
%,
который
возвращает
текущее число num чётным. Для этого используйте оператор деления по
остаток
num на 2.остаток от деления num на 2.
модулюот
%,деления
который возвращает
Методические указания
Циклы
Методические указания
В Python есть два основных вида
циклов:
цикл for и цикл while.
98
Циклы
Цикл for
В Python есть два основных вида циклов: цикл for и цикл while.
Методические указания
Методические указания
Циклы
Циклы
В Python есть два основных вида циклов: цикл for и цикл while.
В Python есть два основных вида циклов: цикл for и цикл while.
Цикл for
Цикл for
используется для перебора элементов в итерируемом
Цикл for используется для перебора элементов в итерируемом объекте,
объекте,
таком
как список,
или строка.
Синтаксис
цикла for
таком как список,
кортеж или кортеж
строка. Синтаксис
цикла for
в Python выглядит
в Python
выглядит
следующим образом:
следующим
образом:
Например, следующий код выводит все элементы списка:
Например, следующий код выводит все элементы списка:
В результате выполнения кода будут построчно выведены символы из
В результате
выполнения
кода
будут
построчно
выведены
В результате
будут
построчно
выведены
символы симиз
В результатевыполнения
выполнения кода
кода будут построчно выведены символы из
строки "Яблоко".
волы
из
строки
«Яблоко».
строки
"Яблоко".
строки
"Яблоко".
Цикл while
Цикл
while
Цикл
while используется для выполнения блока кода до тех пор, пока
Цикл
while
Цикл
while
используется
выполнения
допока
тех
Цикл while
используется для
для выполнения
блока блока
кода до кода
тех пор,
указанное условие истинно. Синтаксис цикла while в Python выглядит
пор,
Цикл whileусловие
используется
для
выполнения
блока кода
доwhile
тех
пор,
пока
пока указанное
истинно.
Синтаксис
в Python
указанное условие
истинно.
Синтаксис
цикла while цикла
в Python
выглядит
следующим образом:
указанное
условие
истинно.
Синтаксис цикла while в Python выглядит
следующим
образом:
выглядит
следующим
образом:
следующим образом:
Например, следующий код выводит числа от 1 до 5 с помощью цикла
Например, следующий код выводит числа от 1 до 5 с помощью цикла
Например,
следующий код выводит числа от 1 до 5 с помощью
while:
while:
Например, следующий код выводит числа от 1 до 5 с помощью цикла
цикла while:
while:
Вложенные циклы
Вложенные циклы
В Python можно использовать вложенные циклы – циклы, которые
99
В Python можно использовать
вложенные
циклы – циклы, которые
находятся внутри других циклов. Вложенные циклы используются, когда
находятся
внутри
других циклов. Вложенные циклы используются, когда
Вложенные
циклы
Вложенные циклы
В Python можно использовать вложенные циклы – циклы, которые находятся внутри других циклов. Вложенные циклы используются,
когда
требуется
обработать
которые имеют
многотребуется
обработать
данные,
которыеданные,
имеют многомерную
структуру,
мерную
структуру,
например,
или
матрицы.
например, или матрицы.
требуется
обработать данные,циклов
которые имеютпростой
многомерную
структуру,
Синтаксис
– вцикла
теле
одного
Синтаксисвложенных
вложенных циклов очень очень
простой – в теле одного
можно
например,
или
матрицы.
цикла
можно
разместить
другой
цикл:
разместить другой цикл:
Синтаксис вложенных циклов очень простой – в теле одного цикла можно
разместить
другой
цикл: данные, которые имеют многомерную структуру,
требуется
обработать
например, или матрицы.
Синтаксис вложенных циклов очень простой – в теле одного цикла можно
разместить другой цикл:
В этом
примере выводятся
два столбца
из 9 элементов,
и для вывода всех
В этом
примере
выводятся
два столбца
из 9 элементов,
и для
его элементов
вложенные циклы.вложенные
Внешний цикл
перебирает
вывода
всех егоиспользуются
элементов используются
циклы.
ВнешВ этом примере выводятся два столбца из 9 элементов, и для вывода всех
(i),перебирает
а внутренний цикл
– столбцы
(j)внутренний
массива.
нийстроки
цикл
строки
(i),
а
цикл
–
столбцы
(j)
его элементов используются вложенные циклы. Внешний цикл перебирает
Операторы
break
и
continue
массива.
строки (i),Ваэтом
внутренний
цикл – столбцы
(j) массива.
примере
выводятся
два столбца
из 9 элементов,
для вывода всех
Внутри циклов
можно
использовать
операторы
break ии continue.
Операторы
break
и иcontinue
Операторы
break
continue
его элементов используются вложенные циклы. Внешний цикл перебирает
Оператор
breakможно
используется
для прерывания
выполнения
если
Внутри
циклов
использовать
операторы
breakцикла,
и continue.
Внутри
можно
использовать
строки
(i), ациклов
внутренний
цикл
– столбцы (j)операторы
массива. break и continue.
выполняется
определенное
условие.
Например,
следующий
код
выводит
числа
Оператор
break
используется
для прерывания выполнения цикОператоры
и continue для прерывания выполнения цикла, если
Оператор
breakbreak
используется
от
1
до
5,
но
прерывает
цикл,
если
число
3: условие. Например, следуюла, выполняется
если выполняется
определенное
Внутри
циклов можно
использовать
операторы
break и continue.
определенное
условие.
Например,
следующий
код выводит числа
щий
выводит
числа
отесли
1 дочисло
5,
прерывает
цикл,цикла,
если если
число 3:
Оператор
break
используется
дляно
прерывания
выполнения
от код
1 до 5,
но прерывает
цикл,
3:
выполняется определенное условие. Например, следующий код выводит числа
от 1 до 5, но прерывает цикл, если число 3:
Оператор continue используется для пропуска текущей итерации цикла и
перехода к следующей. Например, следующий код выводит только нечетные
Операторcontinue
continue используется
для пропуска
текущей итерации
цикла
и
Оператор
используется
для пропуска
текущей
итерачисла от 1 до 5:
Оператор
continue
используется
для
пропуска
текущей
итерации
цикла
и
перехода
к
следующей.
Например,
следующий
код
выводит
только
нечетные
ции цикла и перехода к следующей. Например, следующий код
перехода
Например, следующий код
числа
оттолько
1 док5:следующей.
выводит
нечетные
числа от 1 до 5:
числа от 1 до 5:
Условия
Условия
Условия
100
выводит только нечетные
Условия
Условные конструкции в Python используются для выполнения
различныхУсловные
действий
в зависимости
выполнения
определенных
конструкции
в Python от
используются
для выполнения
различных
действий
в зависимости
от выполнения
определенных
условий.
условий.
ВУсловные
Python
есть
два основных
оператора
условия:
if и Вelse.
конструкции в Python используются для выполнения
Python естьifдва основных оператора условия: if и else.
Оператор
различных действий в зависимости от выполнения определенных условий. В
Оператор
if
Оператор
if основных
позволяет
выполнить
определенный блок кода,
Python есть два
оператора
условия: if и else.
Оператор if позволяет выполнить определенный блок кода, если
если определенное
условие
истинно.
Синтаксис
оператора if
Оператор
if
Условные конструкции в Python используются
для выполнения
определенное условие истинно. Синтаксис оператора if выглядит следующим
Оператор
if
позволяет
выполнить
определенный
блок
кода,
если
выглядит
следующим
различных
действий в образом:
зависимости от выполнения определенных условий.
В
образом:
определенное
истинно.
Синтаксис
Python есть дваусловие
основных
оператора
условия:оператора
if и else. if выглядит следующим
образом:
Оператор if
Оператор if позволяет выполнить определенный блок кода, если
определенное условие истинно. Синтаксис оператора if выглядит следующим
образом:
Оператор if-else
Оператор
if-else
Оператор if-else позволяет выполнить один блок кода, если условие
Оператор
if-elseпозволяет выполнить один блок кода, если
Оператор
if-else
истинно, и другой блок кода, если условие ложно. Синтаксис оператора if-else
Оператор
позволяет
выполнить
один блок
кода, ложно.
если условие
условие истинно,if-else
и другой
блок
кода, если
условие
Синтаквыглядит следующим образом:
истинно,
и
другой
блок
кода,
если
условие
ложно.
Синтаксис
оператора
if-else
сис оператора if-else выглядит следующим образом:
выглядит
следующим
Оператор
if-elseобразом:
Оператор if-else позволяет выполнить один блок кода, если условие
истинно, и другой блок кода, если условие ложно. Синтаксис оператора if-else
выглядит следующим образом:
Оператор if-elif-else
Оператор if-elif-else позволяет проверить несколько условий и выполнить
Оператор if-elif-else
Оператор
if-elif-else
соответствующий
блок кода для первого истинного условия. Синтаксис
Оператор if-elif-else позволяет проверить несколько условий и выполнить
оператора
if-elif-else
выглядит
следующим образом:
Оператор
if-elif-else
позволяет
проверить несколько условий
соответствующий блок кода для первого истинного условия. Синтаксис
и выполнить
соответствующий
блок
кода для первого истиннооператора
if-elif-else
выглядит следующим образом:
Оператор
if-elif-else
го условия.
Синтаксис
оператора
if-elif-else
следующим
Оператор
if-elif-else позволяет
проверить
нескольковыглядит
условий и выполнить
образом:
соответствующий блок кода для первого истинного условия. Синтаксис
оператора if-elif-else выглядит следующим образом:
Коллекции объектов в Python – это структуры данных, которые
позволяют хранить и организовывать группы объектов. В Python
101
есть несколько
коллекций
включая
списки,
кортеКоллекциитипов
объектов
в Pythonобъектов,
– это структуры
данных,
которые
Коллекции объектов в Python – это структуры данных, которые
жи,позволяют
словарихранить
и множества
(sets). Каждый
из них
имеетесть
свои
особени организовывать
группы объектов.
В Python
несколько
позволяют хранить и организовывать группы объектов. В Python есть несколько
ности
и подходит
для определенных
задач.
типов
коллекций объектов,
включая списки,
кортежи, словари и множества
типов коллекций объектов, включая списки, кортежи, словари и множества
Списки
(list)
упорядоченные
объектов,
кото(sets).
Каждый
из –
нихэто
имеет
свои особенностиколлекции
и подходит для
определенных
(sets). Каждый из них имеет свои особенности и подходит для определенных
рыезадач.
могут содержать элементы разных типов. Списки могут измезадач.
няться (mutable),
есть
вы можетеколлекции
добавлять,
удалять
и изменять
Списки (list) то
– это
упорядоченные
объектов,
которые
могут
Списки (list) – это упорядоченные коллекции объектов, которые могут
элементы.
содержать элементы разных типов. Списки могут изменяться (mutable), то есть
содержать элементы разных типов. Списки могут изменяться (mutable), то есть
Вможете
Pythonдобавлять,
спискиудалять
можнои изменять
создавать
двумя способами: с помощью
вы
элементы.
вы можете добавлять, удалять и изменять элементы.
квадратных
скобок
[] и можно
с помощью
функции
list(). Обасспособа
В Python
списки
создавать
двумя способами:
помощьюисВ Python списки можно создавать двумя способами: с помощью
пользуются
создания
списка,
но есть
некоторые
квадратных для
скобок
[] и с помощью
функции
list().
Оба способаотличия.
используются
квадратных скобок [] и с помощью функции list(). Оба способа используются
Индексация
начинается
с 0. отличия.
для
создания списка,
но есть некоторые
для создания списка, но есть некоторые отличия.
Создание
списка
черезс квадратные
скобки [] более компактное
Индексация
начинается
0.
Индексация начинается с 0.
и простое.
Например,
для
создания
списка
использовать
Создание
списка через
квадратные
скобки
[] болееможно
компактное
и простое.
Создание списка через квадратные скобки [] более компактное и простое.
следующий
код:
Например, для
создания списка можно использовать следующий код:
Например, для создания списка можно использовать следующий код:
Доступ к элементам списка осуществляется через указание индекса
Доступ
к элементам
осуществляется
через
указание
инДоступ
к элементам списка
списка осуществляется
через
указание
индекса
элемента.
декса
элемента.
элемента.
Например:
Например:
Например:
Создание списка через функцию list() требует передачи итерируемого
Созданиесписка
списка через
через функцию
list()list()
требует
передачи
итерируемого
Создание
функцию
требует
передачи
итериобъекта в качестве аргумента. Итерируемый объект может быть любым
объекта
в
качестве
аргумента.
Итерируемый
объект
может
быть любым
руемого
объекта
в
качестве
аргумента.
Итерируемый
объект
может
объектом, который можно перебирать поэлементно, например, строкой,
объектом,
который
можно
перебирать
поэлементно,
например,
строкой,
быть
любым объектом, который можно перебирать поэлементно,
кортежем или другим списком. Например, чтобы создать список из строки,
кортежем строкой,
или другимкортежем
списком. Например,
чтобысписком.
создать список
из строки,
например,
или другим
Например,
чтоможно использовать следующий код:
можно
использовать
следующий
код:
бы создать список из строки, можно использовать следующий код:
В качестве примера рассмотрим первый список.
В качестве
рассмотрим
первый
В качествепримера
примера рассмотрим
первый
список. список.
Обратимся к списку my_list по индексу 0. Получим в результате число 1.
Обратимся к списку my_list по индексу 0. Получим в результате число 1.
102
В качестве
качестве примера рассмотрим
рассмотрим первый список.
список.
В
В качестве примера
примера рассмотрим первый
первый список.
В качестве примера рассмотрим первый список.
Обратимся к списку my_list по индексу 0. Получим в результате
к списку my_list
по индексу
0. Получим
в результате число
1.
число 1.Обратимся
Обратимся
Обратимся кк списку
списку my_list
my_list по
по индексу
индексу 0.
0. Получим
Получим вв результате
результате число
число 1.
1.
Обратимся к списку my_list по индексу 0. Получим в результате число 1.
Запустим, нажав на кнопку Run.
Запустим,
нажав
Run.
Запустим,нажав
нажав на
на
кнопку
Run.Run.
Запустим,
накнопку
кнопку
Запустим, нажав на кнопку Run.
Получили первый элемент списка.
Получили
первый
списка.
Получилипервый
первый элемент
элемент
списка.
Получили
элемент
списка.
Получили первый элемент списка.
Кортежи
(tuple) –– это
упорядоченные коллекции
объектов, которые
также
Кортежи
Кортежи (tuple)
(tuple) – это
это упорядоченные
упорядоченные коллекции
коллекции объектов,
объектов, которые
которые также
также
Кортежи
(tuple)
– разных
это
упорядоченные
коллекции
объектов,
Кортежи
(tuple)
– это
упорядоченные
коллекции
объектов,
которые
также
могут
содержать
элементы
типов.
Кортежи
неизменяемы
(immutable),
то
могут
содержать
элементы
разных
типов.
Кортежи
неизменяемы
(immutable),
могут содержать элементы разных типов. Кортежи неизменяемы (immutable), то
то
которые
также
могут
содержать
элементы
разных
типов.
Кортежи
могут
содержать
элементы
разных
типов.
Кортежи
неизменяемы
(immutable),
то
есть
вы не
можете добавлять,
удалять или
изменять элементы
после их
есть
есть вы
вы не
не можете
можете добавлять,
добавлять, удалять
удалять или
или изменять
изменять элементы
элементы после
после их
их
неизменяемы
(immutable),
то
есть
выили
не
можете
добавлять,
удалять
есть вы не
можете
добавлять,
изменять
элементы
после
их
создания.
Кортежи
создаются
с удалять
помощью
круглых
скобок
(), и
элементы
создания.
создания. Кортежи
Кортежи создаются
создаются сс помощью
помощью круглых
круглых скобок
скобок (),
(), и
и элементы
элементы
илиразделяются
изменять
элементы
после
их
создания.
Кортежи
создаются
создания.
Кортежи
создаются
с
помощью
круглых
скобок
(),
и
элементы
запятой.
разделяются
разделяются запятой.
запятой.
с помощью
разделяютсякруглых
запятой. скобок (), и элементы разделяются запятой.
В качестве
рассмотрим
первый список. через указание индекса
Доступ
к примера
элементам
также осуществляется
Доступ
Доступ кк элементам
элементам также
также осуществляется
осуществляется через
через указание
указание индекса
индекса
Доступ
к элементам
также
осуществляется
через
указание
индекса
элемента.
Обратимся
к
кортежу
my_tuple
по
индексу
1.
Получим
вв результате
элемента.
кк кортежу
my_tuple
по
ДоступОбратимся
к элементам
также
осуществляется
через указание
элемента.
Обратимся
кортежу
my_tuple
по индексу
индексу 1.
1. Получим
Получим
в результате
результатеинэлемента.
Обратимся
к
кортежу
my_tuple
по
индексу
1.
Получим
в
результате
число
2.
число
2.
декса
элемента.
Обратимся к кортежу my_tuple по индексу 1. Получисло
2.
число 2.
чим в результате
число 2.
Обратимся к списку my_list по индексу 0. Получим в результате число 1.
Запустим,
нажав на
на кнопку
Run.
Запустим,нажав
Запустим,
нажав
Run.
Запустим,
накнопку
кнопку
Run.
Получиливторой
первыйэлемент
элемент
списка.
Получили
второй
элемент
кортежа.
Получили
элемент
кортежа.
Получили
второй
кортежа.
Словари
(dictionary)
– упорядоченные
это неупорядоченные
неупорядоченные
коллекции
объектов,
которые
Кортежи(dictionary)
(tuple) – это–
коллекции
объектов,
которые
также
Словари
это
коллекции
объектов,
которые
хранятся
в
виде
пар
«ключ-значение».
Ключи
должны
быть
уникальными
и
могут содержать
разных типов.Ключи
Кортежи
неизменяемы
(immutable), тои
хранятся
в виде элементы
пар «ключ-значение».
должны
быть уникальными
103
неизменяемыми
(частодобавлять,
используются
строкиили
илиизменять
числа), аа значения
значения
могут
быть
есть вы не можете
удалять
элементымогут
послебыть
их
неизменяемыми
(часто
используются
строки
или
числа),
любого
типа.
Словари
могут сизменяться
изменяться
(mutable),скобок
то есть
есть
выэлементы
можете
создания.типа.
Кортежи
создаются
помощью круглых
(), ивы
любого
Словари
могут
(mutable),
то
можете
Получили
Получили второй
второй элемент
элемент кортежа.
кортежа.
Словари (dictionary) – это неупорядоченные коллекции объектов, которые
хранятся в–виде
пар «ключ-значение».объектов,
Ключи должны
Словари
Словари (dictionary)
(dictionary) – это
это неупорядоченные
неупорядоченные коллекции
коллекции объектов, которые
которые
быть
уникальными
и
неизменяемыми
(часто
используются
строки
хранятся
в
виде
пар
«ключ-значение».
Ключи
должны
быть
уникальными
хранятся в виде пар «ключ-значение». Ключи должны быть уникальными и
и
илинеизменяемыми
числа), а значения
могут быть любого
типа. Словари
могут изнеизменяемыми (часто
(часто используются
используются строки
строки или
или числа),
числа), аа значения
значения могут
могут быть
быть
меняться
(mutable), то могут
есть вы можете(mutable),
добавлять, есть
удалять можете
и измелюбого
любого типа.
типа. Словари
Словари могут изменяться
изменяться (mutable), то
то есть вы
вы можете
нять
элементы. Словари
создаются с помощью
фигурных скобок {}
добавлять,
добавлять, удалять
удалять и
и изменять
изменять элементы.
элементы. Словари
Словари создаются
создаются сс помощью
помощью
илифигурных
при помощи
встроенной
функции
dict().
Элементы
записываскобок
{}
или
при
помощи
встроенной
функции
dict().
Элементы
фигурных скобок {} или при помощи встроенной функции dict(). Элементы
ются
в формате
«ключ «ключ
: значение»,
разделенные
запятой.
записываются
в формате
: значение»,
разделенные запятой.
записываются в формате «ключ : значение», разделенные запятой.
В качестве примера рассмотрим первый список.
Доступ
кк элементам
осуществляется
по
Доступ
к элементам
словаря
осуществляется
по ключу.
Доступ
элементам словаря
словаря
осуществляется
по ключу.
ключу.
Обратимся к списку my_list по индексу 0. Получим в результате число 1.
Запустим, нажав на кнопку Run.
Run.Run.
Запустим,нажав
нажав на
Запустим,
накнопку
кнопку
Получили первый элемент списка.
Получили
элемент
по
'key1'.
Получили
словаря
по ключу
Получилиэлемент
элемент словаря
словаря
по ключу
ключу
'key1'. ‘key1’.
Кортежи
(tuple)
–
это
упорядоченные
коллекции объектов,
которые
также
Множества
(sets)
–
это
неупорядоченные
коллекции
уникальных
Множества
(sets)
–
это
неупорядоченные
коллекции
уникальМножества (sets) – это неупорядоченные
коллекции
уникальных
могут
содержать
элементы
разных
типов.
Кортежи
неизменяемы
(immutable),
то
объектов,
которые
могут
содержать
элементы
разных
типов.
Множества
ныхобъектов,
объектов,
которые
могут содержать
элементы
разных могут
типов.
которые
могут содержать
элементы разных
типов. Множества
могут
есть
вы не (mutable),
можетеизменяться
добавлять,
удалять
или изменять
последобавих
изменяться
то
можете
удалять
элементы.
Множества
то естьииэлементы
вы
можете
изменяться могут
(mutable),
то есть
есть вы
вы(mutable),
можете добавлять
добавлять
удалять
элементы.
создания.
Кортежи
создаются
с
помощью
круглых
скобок
(),
и
элементы
Множества
создаются
с
помощью
фигурных
скобок
{}
или
функции
set(),
и
лять
и удалять
элементы.
Множества
создаются
с помощью
фигурМножества
создаются
с помощью
фигурных
скобок {} или
функции set(),
и
запятой.
элементы
разделяются
запятой.
ныхразделяются
скобок
{}
или
функции
set(),
и
элементы
разделяются
запятой.
элементы разделяются запятой.
Доступ к элементам также осуществляется через указание индекса
Создание
множества
функцию
set()
передачи
итерируемого
Созданиемножества
множества через
через
функцию
set() требует
требует
передачи
итерируемого
Создание
через
функцию
set()
требует
передачи
элемента.
Обратимся
к
кортежу
my_tuple
по
индексу
1.
Получим
в результате
объекта
вв качестве
аргумента.
Операция
аналогична
функции
list().
Например,
объекта
качестве
аргумента.
Операция
аналогична
функции
list().
Например,
итерируемого объекта в качестве аргумента. Операция аналогиччисло 2.
создать
множество
из
можно
следующий
код:
чтобы
создать
множество
из строки,
строки,чтобы
можно использовать
использовать
следующий из
код:строки,
на чтобы
функции
list().
Например,
создать множество
можно использовать следующий код:
104
Стоит
Стоит заметить,
заметить, что
что при
при использовании
использовании функции
функции list()
list() каждый
каждый символ
символ вв
Создание множества через функцию set() требует передачи итерируемого
объекта в качестве аргумента. Операция аналогична функции list(). Например,
чтобы создать множество из строки, можно использовать следующий код:
Стоит
заметить, что
что при
функции
list() каждый
в
Стоит
заметить,
прииспользовании
использовании
функции
list()символ
каждый
строке вдобавляется
в список в томвпорядке,
они встречаются.
При
символ
строке добавляется
списокв котором
в том порядке,
в котором
этом
повторяющиеся
элементы
добавляются
в
список
несколько
раз,
так
как
они встречаются. При этом повторяющиеся элементы добавляютможет
содержать повторяющиеся
результате
получается
ся всписок
список
несколько
раз, так какэлементы.
список Вможет
содержать
посписок,
содержащий
все
символы
исходной
строки
в
том
порядке,
в
котором
вторяющиеся элементы. В результате получается список, содерони встречаются.
жащий
все символы исходной строки в том порядке, в котором
Однако
порядок элементов в множестве не сохраняется, поскольку
они встречаются.
множество
– это коллекция
элементов,
которые не упорядочены.
Порядок
Однако порядок
элементов
в множестве
не сохраняется,
поэлементов
множества
зависит
от
хэш-функций,
которые
используются
для
скольку множество – это коллекция элементов, которые не упоряхранения
и поиска элементов
внутри
множества, зависит
и может меняться
от запуска к
дочены.
Порядок
элементов
множества
от хэш-функций,
запуску.
которые используются для хранения и поиска элементов внутри
множества, и может меняться от запуска к запуску.
Получить
методы из
из множества
можно путем
преобразования
Получить
Получить методы
методы из множества
множества можно
можно путем
путем преобразования
преобразования вв список
список
в список
через
встроенную
функцию
list().
через встроенную функцию list().
через встроенную функцию list().
Запустим,нажав
нажав на
на
кнопку
Run.Run.
Запустим,
накнопку
кнопку
Запустим,
нажав
Run.
Получили значение из множества по индексу 0.
Получилизначение
значение изиз
множества
по индексу
0.
Получили
множества
по индексу
0.
В Python
Python каждый
каждый тип
тип коллекции
коллекции объектов
объектов (списки,
(списки, кортежи,
кортежи, словари,
В
В Python каждый тип коллекции объектов (списки, словари,
кортежи,
множества) имеет
имеет свой
свой набор
набор методов
методов для работы
работы сс ними.
ними. Рассмотрим
Рассмотрим наиболее
наиболее
множества)
словари,
множества)
имеет свой для
набор методов
для работы с ними.
распространенные методы
методы каждой
каждой коллекции.
коллекции.
распространенные
Рассмотрим
наиболее распространенные
методы каждой коллекции.
Методы для
для списков
списков
Методы
append(x)
–
добавляет
элемент xx вв конец
конец списка;
списка;
append(x) – добавляет элемент
extend(iterable) –– добавляет
добавляет элементы
элементы из
из итерируемого
итерируемого объекта
объекта вв конец
конец
extend(iterable)
списка;
списка;
insert(i, x)
x) –– добавляет
добавляет элемент
элементxx105
на позицию
позицию
списке;
insert(i,
на
ii вв списке;
remove(x) –– удаляет
удаляет первый
первый найденный
найденный элемент
элемент xx из
из списка;
списка;
remove(x)
pop([i]) – удаляет и возвращает элемент на позиции i (или последний
Методы для списков
append(x) – добавляет элемент x в конец списка;
extend(iterable) – добавляет элементы из итерируемого объекта
в конец списка;
insert(i, x) – добавляет элемент x на позицию i в списке;
remove(x) – удаляет первый найденный элемент x из списка;
pop([i]) – удаляет и возвращает элемент на позиции i (или последний элемент, если i не указан);
index(x) – возвращает индекс первого найденного элемента x
в списке;
count(x) – возвращает количество вхождений элемента x
в списке;
sort() – сортирует элементы списка по возрастанию;
reverse() – изменяет порядок элементов списка на обратный.
Пример метода append() для списка:
Методы
для
кортежей
Методы
для
кортежей
Так
как
кортежи
являются
неизменяемыми
объектами, то их
методы
Так как кортежи
являются
неизменяемыми
объектами,
Методы
для
кортежей
ограничены
операциями:
то их
методыбазовыми
ограничены
базовыми операциями:
Так
как –кортежи
являются
неизменяемыми
объектами,
то их методы
count(x)
возвращает
количество
вхождений
элемента
xэлемента
в кортеже;
count(x) – возвращает
количество
вхождений
x в корограничены
базовыми
операциями:
index(x)
–
возвращает
индекс
первого
найденного
элемента
x
в
кортеже.
теже;
count(x) – возвращает количество вхождений элемента x в кортеже;
index(x) – возвращает индекс первого найденного элемента x
index(x) – возвращает индекс первого найденного элемента x в кортеже.
в кортеже.
Методы для словарей
keys() – возвращает список всех ключей словаря;
Методы
словарейсписок всех значений словаря. items() – возвращает
Методы
словарей
values()для
–для
возвращает
keys()
–ключей
возвращает
список
всехвсех
ключей
словаря;
keys()
– возвращает
список
ключей
словаря;
список
всех
и значений
словаря
в виде
кортежей
(key, value);
values()
возвращает
список
всехзначение
значений
словаря.key
items()
возвращает
values()
– –возвращает
список
всех
значений
словаря.
items()
get(key[,
default])
– возвращает
ключа
или –значение
по –
список
всех default,
ключейесли
и всех
значений
словаря
виде кортежей
(key, value);
возвращает
список
ключей
ив значений
словаря
в виде кортеумолчанию
ключа
не
существует;
get(key[,
ключа
key или
значение
по
жей (key,
value);default])
pop(key[,
default]) –– возвращает
удаляет и значение
возвращает
значение
ключа
key или
умолчанию
если–
ключа
не
существует;
get(key[,
default])
возвращает
ключа key или значезначение
по default,
умолчанию
default,
если
ключазначение
не существует;
pop(key[,
default])
–
удаляет
и
возвращает
значение
ключа key
или
ние по умолчанию
default,
если ключа
существует;
update(other_dict)
– обновляет
словарь не
значениями
из другого
словаря
значение
other_dict;по умолчанию default, если ключа не существует;
словаря.
106
значениями из другого словаря
update(other_dict)
– элементы
обновляет
словарь
clear() – удаляет все
other_dict;
Например:
список всех ключей и значений словаря в виде кортежей (key, value);
get(key[, default]) – возвращает значение ключа key или значение по
умолчанию default, если ключа не существует;
pop(key[,default])
default]) –
– удаляет
удаляет и ивозвращает
значение
ключа ключа
key илиkey
pop(key[,
возвращает
значение
по умолчанию
default, если
ключа если
не существует;
илизначение
значение
по умолчанию
default,
ключа не существует;
update(other_dict)
–
обновляет
словарь
значениями
из другогоизсловаря
update(other_dict) – обновляет словарь
значениями
другого
other_dict;
словаря other_dict;
clear()
удаляет все
словаря.
clear()
– –удаляет
всеэлементы
элементы
словаря.
Например:
Например:
В данном
примере получаем
получаем все
словаря
my_dict
и выводим
В данном
примере
всезначения
значения
словаря
my_dict
и вычерез
print().
водим через print().
Методы
для
множеств
(sets)
Методы
для
множеств (sets)
(sets)
Методы
для
множеств
add(x)
–
добавляет
элемент
xx вв множество;
add(x)
–
добавляет
элемент
множество;
add(x) – добавляет элемент
x в множество;
update(iterable)
–
добавляет
из итерируемого объекта
вв
update(iterable) –– добавляет
добавляет элементы
элементы
объекта
update(iterable)
элементыизизитерируемого
итерируемого
объекта
множество;
множество;
в множество;
remove(x)
удаляет
xx из
Если
не
remove(x)––– удаляет
удаляет элемент
элемент
из xмножества.
множества.
Если элемент
элемент
не найден,
найден,
remove(x)
элемент
из множества.
Если
элемент
возникает
исключение;
возникает
исключение;
не найден, возникает исключение;
discard(x)
удаляет
xx из
множества.
Если
не
discard(x)––– удаляет
удаляет элемент
элемент
из x
множества.
Если элемент
элемент
не найден,
найден,
discard(x)
элемент
из множества.
Если
элемент
ничего
не
происходит;
ничего
не
происходит;
не найден, ничего не происходит;
pop()
–
и
возвращает
элемент
из
Если
pop()
– удаляет
удаляет и
и возвращает
возвращает произвольный
произвольный
элементэлемент
из множества.
множества.
Если
pop()
– удаляет
произвольный
из множемножество
пустое,
возникает
исключение;
множество
пустое, возникает
исключение;
ства.
Если множество
пустое,
возникает исключение;
clear()
–– удаляет
все
элементы
множества.
clear()
удаляет
все
элементы
множества.
clear() – удаляет все элементы
множества.
Все
представленные
методы
для
списков, множеств,
словарей
Все
представленные
методы
для
словарей
Все представленные методы для списков,
списков,множеств,
множеств,
словаприменяются
по
следующему
принципу:
применяются
по
следующему
принципу:
рей применяются по следующему принципу: *название_элемен*название_элемента*.*метод_элемента*.
*название_элемента*.*метод_элемента*.
та*.*метод_элемента*.
Например:
Например:
Например:
В данном
данном
примередобавляем
добавляем целочисленный
целочисленный
элемент
«6» вв«6»
конец
В данном
примере
целочисленный
элемент
в коВ
примере
добавляем
элемент
«6»
конец
множества
my_set
и
выводим
его
через
print().
нецмножества
множества
my_set
и выводим
его через print().
my_set
и выводим
его через print().
107
Крометого,
того, для
коллекций
в Python есть
встроенные
функции,
такие
Кроме
длявсехвсех
коллекций
в Python
есть
встроенные
как len(),
max(),
min(),
sum(),
которые
позволяют
получить
информацию
о
функции,
такие
len(),
max(),
sum(),
которые
позволяют
Кроме
того, как
для всех
коллекций
в min(),
Python
есть
встроенные
функции,
такие
Кроме того, для всех коллекций в Python есть встроенные функции, такие
количестве
элементов
коллекции,
максимальном
иполучить
минимальном
значении
получить
о количестве
элементов
в коллекции,
маккак
len(),информацию
max(),
min(),в sum(),
которые
позволяют
информацию
о
как len(), max(), min(), sum(), которые позволяют получить информацию о
элементов
и
сумме
элементов
соответственно.
симальном
минимальном
значении
элементов
и сумме элементов
количестве иэлементов
в коллекции,
максимальном
и минимальном
значении
количестве элементов в коллекции, максимальном и минимальном значении
соответственно.
элементов и сумме элементов соответственно.
элементов и сумме элементов соответственно.
В данном примере добавляем к списку my_list в конец значение 4 и
выводим
через print()
длину
списка,к максимальное
значение,
минимальное
В данном
примере
добавляем
my_list
в конец
значение
4 и
В данном
примере
добавляем
ксписку
списку
my_list
в конец
значение
В данном примере добавляем к списку my_list в конец значение 4 и
значение
и
сумму
элементов.
выводим
через
print()print()
длину длину
списка, списка,
максимальное
значение, минимальное
4 ивыводим
выводим
через
максимальное
значение,
через print() длину списка, максимальное значение, минимальное
значение
и
сумму
элементов.
минимальное
значение и сумму элементов.
значение и сумму элементов.
Задания для самостоятельного выполнения
1.
Задания для самостоятельного выполнения
Напишите
программу,
которая создает
список из 10 случайных
Задания
для самостоятельного
выполнения
Задания
для самостоятельного
выполнения
1.
Напишите
программу,
которая
создает
список
из случайных
10 случайцелых1.чиселНапишите
и выводит программу,
только те числа,
которые
больше
5. из 10
которая
создает
список
1. чисел
Напишите
программу,
которая
создает
список
из 10
случайных
ных
целых
и
выводит
только
те
числа,
которые
больше
5.
целых чисел и выводит только те числа, которые больше 5.
целых
чисел
и
выводит
только
те
числа,
которые
больше
5.
2. Создайте словарь для хранения информации о студентах (имя
студента и его оценка). Заполните словарь данными, введенными
пользователем, и выведите среднюю оценку всех студентов.
3. Напишите программу, которая принимает два списка чисел
от пользователя, преобразует их в множества и выводит список
уникальных элементов, которые встречаются в обоих списках.
108
4. Создайте кортеж из нескольких различных типов данных
(строки, числа, списки), затем напишите функцию, которая принимает этот кортеж и печатает каждый элемент в новой строке.
5. Напишите программу, которая принимает строку от пользователя и выводит эту же строку, где каждое слово начинается с большой буквы, а остальные буквы маленькие.
6. Используя списковое включение, создайте список всех чисел
от 1 до 100, которые делятся на 7.
7. Напишите программу, которая принимает строку от пользователя и использует словарь для подсчета количества каждой буквы
в строке. Выведите результат в формате «буква : количество».
8. Создайте программу, которая принимает от пользователя несколько слов через запятую (в одной строке), затем разделяет строку по запятым в список слов. После этого программа должна вывести слова в обратном порядке, каждое на новой строке.
9. Напишите программу, которая создает список из 10 чисел.
Затем программа должна найти и вывести на экран максимальное
число, минимальное число и сумму всех чисел в списке.
10. Напишите программу, которая принимает два списка чисел
от пользователя, преобразует их в множества и выводит на экран
следующие результаты:
а) элементы, которые присутствуют в обоих множествах (пересечение);
б) элементы, которые присутствуют в первом множестве, но отсутствуют во втором (разность);
в) элементы, которые присутствуют во втором множестве, но отсутствуют в первом (разность);
г) все уникальные элементы из обоих списков (объединение).
Тема «Файлы, модули и функции в Python»
Задание 1. Напишите программу, которая открывает файл, считает количество строк в нем и выводит результат на экран.
Ход работы
1. Изучите методические рекомендации.
2. Создайте переменную filename и присвойте ей имя файла,
например, ‘example.txt’, который необходимо открыть. Инициали 109
количество строк в нем и выводит результат на экран.
Тема «Файлы, модули и функции в Python»
Ход работы
Задание 1. Напишите программу, которая открывает файл, считает
1. Изучите методические рекомендации.
количество строк в нем и выводит результат на экран.
2. Создайте переменную filename и присвойте ей имя файла, например,
Ход работы
зируйте
переменную
значением
0, чтобыпеременную
использовать
'example.txt',
который line_count
необходимо открыть.
Инициализируйте
1. Изучите методические рекомендации.
значением
0, чтобы использовать её для подсчёта строк.
её дляline_count
подсчёта
строк.
2. Создайте переменную filename и присвойте ей имя файла, например,
'example.txt', который необходимо открыть. Инициализируйте переменную
line_count значением 0, чтобы использовать её для подсчёта строк.
3. Откройте файл для чтения. Используйте контекстный менеджер with
3. Откройте
файл для чтения. Используйте контекстный менеддля открытия файла, на который указывает filename. Мод 'r' означает, что файл
жер with
длядляоткрытия
файла, на
который
указывает
открыт
чтения. Подсчитайте
количество
строк.
Организуйтеfilename.
цикл for, Мод
3. Откройте файл для чтения. Используйте контекстный менеджер with
‘r’ означает,
что файл
открыт
для чтения.
Подсчитайте
который будет
проходиться
по каждой
строке открытого
файла. Для количество
каждой
для открытия файла, на который указывает filename. Мод 'r' означает, что файл
цикл увеличивает
счётчик
line_count набудет
единицу.
строк.строки
Организуйте
цикл
for, который
проходиться по каждой
открыт для чтения. Подсчитайте количество строк. Организуйте цикл for,
строке открытого файла. Для каждой строки цикл увеличивает
который будет проходиться по каждой строке открытого файла. Для каждой
счётчик
line_count
на единицу.
строки
цикл увеличивает
счётчик line_count на единицу.
4. После завершения цикла используйте функцию print(), чтобы
После завершения
цикла строк.
используйте
функцию print(),f-строку
чтобы вывести
вывести на4. экран
количество
Используйте
для форна экран количество строк. Используйте f-строку для форматирования вывода,
матирования вывода, включив в неё значения переменных filename
включив в неё значения переменных filename и line_count.
и line_count.
4. После завершения цикла используйте функцию print(), чтобы вывести
на экран количество строк. Используйте f-строку для форматирования вывода,
включив в неё значения переменных filename и line_count.
Этот код открывает файл 'example.txt' для чтения и автоматически
Этот
код открывает файл ‘example.txt’ для чтения и автомазакрывает его после того, как выполнение кода выйдет из блока with.
тически закрывает
после того, как выполнение кода выйдет
Методическиеего
указания
из блока with.
Для работы с файлами в Python используются встроенные функции
open(), read(), write() и close().
Методические указания
Функция open() используется для открытия файла. Она принимает два
Для
работы с файлами в Python используются встроенные
аргумента: имя файла и режим открытия файла. Режим открытия файла может
функции
read(),"w"write()
и close().
быть:open(),
"r" – для чтения,
– для записи,
"a" – для добавления (дописывания) в
Функция
open()
дляи открытия
файла.
Она приконец файла,
"x" – дляиспользуется
создания нового файла
записи в него, "b"
– для работы
нимаетв бинарном
два аргумента:
и режим
открытия файла. Режим
режиме и "t"имя
– для файла
работы в текстовом
режиме.
для чтения.
открытия Пример
файлаоткрытия
можетфайла
быть:
«r» – для чтения, «w» – для записи,
Функция
read()
используется
для чтения
данных из
файла. Она
«a» – для добавления (дописывания)
в конец
файла,
«x» может
– для созбыть вызвана после открытия файла. Метод read() читает файл и возвращает его
дания нового файла и записи в него, «b» – для работы в бинарном
содержимое в виде строки.
режиме и «t» – для работы в текстовом режиме.
Функция write() используется для записи данных в файл. Она может быть
вызвана после открытия файла с режимом "w", "a" или "x". Метод write()
записывает данные в файл.
110
Функция close() используется для закрытия файла, когда работа с ним
Пример открытия файла для чтения
Функция read() используется для чтения данных из файла. Она
может быть вызвана после открытия файла. Метод read() читает
файл и возвращает его содержимое в виде строки.
Функция write() используется для записи данных в файл. Она
может быть вызвана после открытия файла с режимом «w», «a» или
«x». Метод write() записывает данные в файл.
Функция close() используется для закрытия файла, когда работа
с ним завершена.
Также для работы с файлами в Python можно использовать конструкцию with, которая автоматически закрывает файл после окончания работы с ним. With – это контекстный менеджер в Python, который позволяет автоматически управлять ресурсами в блоке кода.
Задание 2. Напишите программу, которая создает файл и запиЗадание
2. Напишите
программу,
которая создает
файл и записывает в
сывает в него
список
чисел,
разделенных
запятыми.
него
список чисел, разделенных запятыми.
Ход
работы
Задание 2. Напишите программу, которая создает файл и записывает в
Ход работы
1. Изучите
методические
рекомендации.
него список чисел,
разделенных запятыми.
1. Изучите методические рекомендации.
Ход работы
2. Создайте
переменную numbers и присвойте ей список чисел,
2. Создайте переменную numbers и присвойте ей список чисел, который
1. Изучите
который вы
хотитеметодические
записатьрекомендации.
в файл. Создайте переменную filename
вы хотите записать в файл. Создайте переменную filename и присвойте ей
2. Создайте переменную numbers и присвойте ей список чисел, который
и присвойте
ей
строку
с
названием
файла, например, «numbers.txt».
строку с названием файла, например, "numbers.txt".
вы хотите записать в файл. Создайте переменную filename и присвойте ей
строку с названием файла, например, "numbers.txt".
3. Используйте контекстный менеджер with и функцию open() для
3. Используйте контекстный менеджер with и функцию open()
открытия файла с именем, указанным в переменной filename, в режиме 'w', что
3. Используйте
менеджер with ви переменной
функцию open() filename,
для
для открытия
файла с контекстный
именем, указанным
указывает на запись в файл. Инициируйте цикл for, который будет проходить
открытия файла с именем, указанным в переменной filename, в режиме 'w', что
в режиме
‘w’, что указывает на запись в файл. Инициируйте цикл
по каждому элементу списка numbers. Внутри цикла используйте метод write()
указывает на запись в файл. Инициируйте цикл for, который будет проходить
for, который
будет
проходить
по каждому
списка
numbers.
для записи
каждого
числа в файл.
Поскольку элементу
write() требует
строкового
по каждому элементу списка numbers. Внутри цикла используйте метод write()
Внутри
циклапреобразуйте
используйте
write()
для записи
значения,
числометод
в строку,
используя
функцию каждого
str(). После числа
для записи каждого числа в файл. Поскольку write() требует строкового
каждого
числа добавьте
запятую
и пробел,
чтобы числа
были разделены
в
в файл.значения,
Поскольку
write()
требует
строкового
значения,
преобразуйте
преобразуйте число в строку, используя функцию str(). После
файле.
число каждого
в строку,
функцию
str().
каждого
числа
дочислаиспользуя
добавьте запятую
и пробел,
чтобыПосле
числа были
разделены
в
бавьтефайле.
запятую и пробел, чтобы числа были разделены в файле.
4. После выхода из контекстного менеджера with (то есть после записи
всех чисел) используйте print() для вывода подтверждения, что список чисел
4. После выхода из контекстного менеджера with (то есть после записи
был записан в файл. Сообщение также форматируется с использованием fвсех чисел) используйте print() для вывода подтверждения, что список чисел
строки для включения имени файла.
был записан в файл. Сообщение также форматируется с использованием f-
строки для включения имени файла.
111
Работа с файлами в Python очень важна для обработки и хранения
4. После
выхода
менеджера
with
есть
после
4. После
выходаиз
из контекстного
контекстного менеджера
with (то
есть(то
после
записи
записи
всех чисел)
используйте
print()подтверждения,
для вывода что
подтверждения,
всех чисел)
используйте
print() для вывода
список чисел
чтобыл
список
чисел
былСообщение
записан также
в файл.
Сообщение
также форматизаписан
в файл.
форматируется
с использованием
fруется
с использованием
для включения имени файла.
строки
для включения имени f-строки
файла.
Работа
с файламив вPython
Python очень
очень важна
и хранения
Работа
с файлами
важнадля
дляобработки
обработки
и хранеPython
предоставляет
удобный иудобный
простой интерфейс
дляинтерфейс
чтения и
нияданных.
данных.
Python
предоставляет
и простой
файлов
на диске.файлов на диске.
длязаписи
чтения
и записи
Методические
указания
Методические указания
Функция read() используется для чтения данных из файла. Она
может быть вызвана после открытия файла. Метод read() читает
файл и возвращает его содержимое в виде строки.
Функция write() используется для записи данных в файл. Она
может быть вызвана после открытия файла с режимом «w», «a» или
«x». Метод write() записывает данные в файл.
Функция close() используется для закрытия файла, когда работа
с ним завершена.
Также для работы с файлами в Python можно использовать конструкцию with, которая автоматически закрывает файл после окончания работы с ним. With – это контекстный менеджер в Python, который позволяет автоматически управлять ресурсами в блоке кода.
Задание 3. Напишите функцию с именем divide_numbers, которая принимает два аргумента – числа a и b. Функция должна делить
число a на число b и возвращать результат деления. Однако функция должна быть защищена от возможных исключений, таких как
деление на ноль или передача аргументов неправильного типа.
Ход работы
1. Изучите методические рекомендации.
2. Создайте функцию с названием divide_numbers, которая принимает два параметра: a и b. Используйте блок try, чтобы попытаться
выполнить операцию деления. Внутри блока try преобразуйте аргументы a и b в тип float и выполните операцию деления a на b. Если
деление проходит без ошибок, верните результат деления. В слу 112
чае возникновения ошибки ZeroDivisionError (деление на ноль)
верните строку «Ошибка». Для обработки ошибок неправильного
типа аргументов (если a или b не могут быть преобразованы в float)
или если передано значение, которое не поддерживается операцией деления (например, строка), используйте except для перехвата
исключений ValueError и TypeError. В этом случае также верните
строку «Ошибка».
3. Вызовитефункцию
функцию divide_numbers
с различными
аргументами
для
3. Вызовите
divide_numbers
с различными
аргуменпроверки
корректности
работы:
с двумя
числами,
результат
тами
для
проверки
корректности
работы:
с чтобы
двумяувидеть
числами,
чтобы
3. Вызовите
функцию
divide_numbers
с различными
аргументами
для
деления;
с
числом
и
нулем,
чтобы
проверить
обработку
ZeroDivisionError;
сообувидеть
результат
деления;
и нулем,
чтобы
проверить
проверки
корректности
работы:с счислом
двумя числами,
чтобы
увидеть
результат
3. Вызовите функцию divide_numbers с различными аргументами для
строкой
исчислом,
проверить
обработку
иZeroDivisionError;
TypeError.
работку
со строкой
и
числом,
чтобы проверить
деления;ZeroDivisionError;
числомчтобы
и нулем,
чтобы
проверить ValueError
обработку
со
проверки корректности работы: с двумя числами, чтобы увидеть результат
обработку
ValueError
TypeError.
строкой и числом,
чтобыипроверить
обработку ValueError и TypeError.
деления; с числом и нулем, чтобы проверить обработку ZeroDivisionError; со
строкой и числом, чтобы проверить обработку ValueError и TypeError.
Методические указания
Методические
Функции
– этоуказания
именованные блоки кода, которые можно вызывать из
Методические
указания
Функции
–
это именованные
блокискода,
которые можно
других
частей
программы.
Функции создаются
помощью
словавызыdef,
Функции – это именованные
блоки кода,
которые ключевого
можно вызывать
из
указания
вать
из Методические
других
частей
программы.
Функции
создаются
с Функция
помощью
за
которым
следует
имя
функции
и
в
скобках
–
аргументы
функции.
других частей программы. Функции создаются с помощью ключевого слова def,
Функции
– это
блоки
кода,имя
которые
можно и
вызывать
из –
ключевого
слова
def,именованные
за которым
следует
функции
в скобках
может
возвращать
с помощью
ключевого
слова
return.
за которым
следуетзначение
имя функции
и в скобках
– аргументы
функции. Функция
других
частей
программы.
Функции
создаются
с
помощью
ключевого
слова
def,
аргументы
функции.
Функция
может
возвращать
значение
с помоопределения
функции
включевого
Python
выглядит
следующим
образом:
можетСинтаксис
возвращать
значение с помощью
слова return.
за
которым
следует
имя
функции
и
в
скобках
–
аргументы
функции.
Функция
щью ключевого слова return.
Синтаксис определения функции в Python выглядит следующим образом:
может
возвращать
значение с помощью
ключевого
слова return.
Синтаксис
определения
функции
в Python
выглядит следуюСинтаксис
определения
функции
в
Python
выглядит
следующим
образом:
щим образом:
где имя_функции – это имя функции, аргументы – это список аргументов,
которые
принимает– это
функция,
блок кода
– это код,
который
быть
где имя_функции
имя функции,
аргументы
– это
списокдолжен
аргументов,
выполнен
при
вызове
функции,
и
значение
–
это
значение,
которое
должна
которые принимает функция, блок кода – это код, который должен быть
где имя_функции – это имя функции, аргументы – это список аргументов,
вернуть
функция.
выполнен
при вызове функции, и значение – это значение, которое должна
которые принимает функция, блок кода – это код, который должен быть
вернуть функция.
113
выполнен при вызове функции, и значение – это значение, которое должна
вернуть функция.
где имя_функции – это имя функции, аргументы – это список аргументов, которые принимает функция, блок кода – это код, который должен быть выполнен при вызове функции, и значение – это
значение, которое должна вернуть функция.
Функциимогут
могут также использоваться
без возвращаемых
значений. знаВ
Функции
использоваться
без возвращаемых
Функции могут также
также использоваться
без возвращаемых
значений. В
этом случае
действия,
но не возвращает
чений.
В этомфункция
случаевыполняет
функциянеобходимые
выполняет
необходимые
действия,
этом случае
функция
выполняет
необходимые
действия,
но не возвращает
никаких
значений.
Например,
следующая
функция
выводит
на
экран
но никаких
не возвращает
следующая
функзначений.никаких
Например,значений.
следующаяНапример,
функция выводит
на экран
сообщение:
ция
выводит
на
экран
сообщение:
сообщение:
Функцияможет
может быть
из другой
части части
программы
следующим
Функция
бытьвызвана
вызвана
из другой
программы
слеФункция может быть
вызвана
из другой
части программы
следующим
образом:
дующим
образом:
образом:
Модули – это файлы, содержащие определения функций и других
Модули–– это
это файлы,
содержащие
определения
функций и функций
других
Модули
файлы,
содержащие
определения
объектов. Чтобы использовать определения из модуля, его нужно
объектов.
Чтобы Чтобы
использовать
определения
из модуля, изего
нужноего
и других
объектов.
использовать
определения
модуля,
импортировать в текущий файл с помощью ключевого слова import.
импортировать
в
текущий
файл
с
помощью
ключевого
слова
import.
нужно импортировать в текущий файл с помощью ключевого слова
Например, модуль math содержит функции для математических
import. Например, модуль math содержит функции для математических
вычислений, модуль os содержит функции для работы с операционной
вычислений,
модуль
os math
содержит
функции
для работы
с операционной
Например,
модуль
содержит
функции
для математических
системой, а модуль datetime содержит функции для работы с датами и
системой,
а
модуль
datetime
содержит
функции
для
работы
и
вычислений, модуль os содержит функции для работыс сдатами
операцивременем.
временем.
онной
системой, а модуль datetime содержит функции для работы
Для использования модуля в программе нужно сначала импортировать
Для
использования модуля в программе нужно сначала импортировать
с датами
и временем.
его с помощью ключевого слова import. Например, чтобы использовать
его
с использования
помощью ключевого
слова вimport.
Например,
чтобы
использовать
Для
модуля
программе
нужно
сначала
импорфункцию sqrt из модуля math, нужно написать следующий код:
функцию
sqrt
из
модуля
math,
нужно
написать
следующий
код:
тировать его с помощью ключевого слова import. Например, чтобы
использовать функцию sqrt из модуля math, нужно написать следующий код:
114
Можно
также импортировать
импортировать отдельные
функциифункции
из модуля,из
чтобы
не
Можно
также
отдельные
модуля,
загружать
в также
памятьимпортировать
весь
модуль.весь
Например,
чтобы
использовать
только
Можно
отдельные
функции
из модуля, чтобы
чтобы
неисчтобы
не
загружать
в память
модуль.
Например,
функцию sqrt
модуля
math,модуль.
можно
написать
такой
код:
загружать
в из
память
весь
Например,
чтобы
использовать
только
пользовать
только
функцию
sqrt
из модуля
math,
можночтобы
написать
Можно
также
импортировать
отдельные
функции
из модуля,
не
Можно также импортировать отдельные функции из модуля, чтобы не
функцию
модулявесь
math,модуль.
можно написать
такой
код: использовать только
такой
код:sqrt
загружать
в из
память
Например,
чтобы
загружать в память весь модуль. Например, чтобы использовать только
функцию sqrt из модуля math, можно написать такой код:
функцию sqrt из модуля math, можно написать такой код:
Обратите внимание, если мы используем ключевое слово from, то при
использовании
модуля
библиотеки
не
нужно
вызывать
функцию
через
точку,
Обратитевнимание,
внимание,
если
используем
ключевое
слово from,
то
при
Обратите
еслимымы
используем
ключевое
слово
from,
например
math.sqrt(),
достаточно
использовать
импортированную
функцию.
модуля
библиотеки
нужно вызывать
функцию
через
точку,
то использовании
при Обратите
использовании
модуля
библиотеки
не
нужно
вызывать
внимание,
если
мы не
используем
ключевое
слово
from,
то
при
Обратите
внимание,
если
мы
используем
ключевое
слово
from,модули.
то при
В
Python
также
есть
возможность
создавать
свои
собственные
например
math.sqrt(),
достаточно
использовать
импортированную
функцию.
функцию
черезмодуля
точку,библиотеки
например
достаточно
использоиспользовании
не math.sqrt(),
нужно вызывать
функцию через
точку,
использовании
библиотеки
не нужно «.py»
вызывать
функциюв через
точку,
Для
этого
нужномодуля
создать
файл
с расширением
исвои
определить
нем модули.
нужные
В Python
также
есть
возможность
создавать
собственные
вать
импортированную
функцию.
например
math.sqrt(),
достаточно
использовать
импортированную
функцию.
например
math.sqrt(),
использовать
импортированную
функцию. в
функции,
классы
и достаточно
переменные.
Затем этот«.py»
файли определить
можно
импортировать
Для
этого
нужно
создать
файл
с расширением
всобственные
нем модули.
нужные
В Python
также
есть
возможность
создавать
свои
В Python
также
есть
возможность
создавать
свои собственные
В
Python
также
есть
возможность
создавать
свои
собственные
модули.
других
программах.
функции,
классы
инужно
переменные.
Затем
этот«.py»
можно импортировать
в
модули.
Для
этого
файл
с файл
расширением
и опреДля этого
нужно
создать
файлсоздать
с расширением
и определить
в«.py»
нем нужные
Для этого
нужно создать
файл с расширением
«.py»
и определить
в нем нужные
Например,
предположим,
что
у
нас
есть
файл
my_module.py
со
других
программах.
делить
в нем
нужные
функции,
классы
и переменные.
Затем этот
функции,
классы
и переменные.
Затем
этот файл
можно импортировать
в
функции,
классы
и переменные. Затем этот файл можно импортировать в
следующим
содержимым:
Например,
предположим, вчто
у нас
есть файл my_module.py со
файл
можно
импортировать
других
программах.
других
программах.
других программах.
следующим
содержимым:
Например,
предположим,
чтоу унас
насесть
естьфайл
файл
my_module.py
Например,
предположим, что
my_module.py
со
Например, предположим, что у нас есть файл my_module.py со
со следующим
содержимым:
следующим содержимым:
следующим содержимым:
Чтобы использовать эту функцию в другой программе (другом файле),
нужноЧтобы
импортировать
модуль
использовать
этуmy_module:
функцию в другой программе (другом файле),
нужноЧтобы
импортировать
модуль
my_module:в другой программе (другом файле),
использовать
эту
Чтобы
использовать
этуфункцию
функцию
в другой
программе
(другом
Чтобы
использовать эту
функцию
в другой
программе
(другом файле),
нужно нужно
импортировать
модуль my_module:
файле),
импортировать
модуль
my_module:
нужно импортировать модуль my_module:
115
В Python
можно
исключения
– это ошибки,
возВ Python
можно обрабатывать
обрабатывать исключения
– это ошибки,
возникающие
никающие
во время программы.
выполнения
программы.
Обработка
исключево время выполнения
Обработка
исключений
позволяет избежать
ний
позволяет
избежать
прерывания
программы
и
предоставить
прерывания программы и предоставить пользователю более информативное
пользователю
более информативное сообщение об ошибке.
сообщение об ошибке.
Когда
возникает
ошибкав впрограмме,
программе,
интерпретатор
Python
Когда возникает ошибка
интерпретатор
Python создает
создает
исключения,
который
содержит
информацию
объект объект
исключения,
который содержит
информацию
об ошибке.
Затем
об интерпретатор
ошибке. Затем
интерпретатор
ищет
блок
try-except,
который
ищет блок try-except, который может обработать этоможетисключение.
обработать это исключение.
Блок
try-except
Pythonпредназначен
предназначен
для обработки
исклюБлок
try-except вв Python
для обработки
исключений.
Он
чений.
Онизсостоит
из блока
двух частей:
блока
try, в котором
содержится
состоит
двух частей:
try, в котором
содержится
код, который
может
код,
могущий
вызвать
исключение,
и блока
except,
содервызвать
исключение,
и блока
except, который
содержит
кодкоторый
для обработки
жит
код для обработки исключения.
исключения.
В этом
примере используется
используется блок
try-except
для обработки
исключенияисВ этом
примере
блок
try-except
для обработки
ZeroDivisionError,
которое может которое
возникнуть,
если пользователь
введет
ноль
в
ключения
ZeroDivisionError,
может
возникнуть,
если
полькачествевведет
делителя.
Есливисключение
программа
выводит сообщение
зователь
ноль
качестве возникает,
делителя.
Если исключение
возниоб
ошибке.
кает, программа выводит сообщение об ошибке.
Кроме
того,в Python
в Python есть
есть ключевое
ключевое слово
finally,
которое
позволяет
Кроме
того,
слово
finally,
которое
позвовыполнить
код,
независимо
от
того,
произошло
исключение
или
нет.
Блок
ляет выполнить код, независимо от того, произошло исключение
finally
используется,
например,
для
освобождения
ресурсов,
которые
были
или нет. Блок finally используется, например, для освобождения
заняты в блоке
try. были заняты в блоке try.
ресурсов,
которые
В этом примере используем блок try-except-finally для чтения файла. Если
файл не удается открыть, программа выводит сообщение об ошибке. В блоке
finally закрываем файл, чтобы освободить ресурсы.
116
Задания для самостоятельного выполнения
В этом примере используем блок try-except-finally для чтения
файла. Если файл не удается открыть, программа выводит сообщение об ошибке. В блоке finally закрываем файл, чтобы освободить
ресурсы.
Задания для самостоятельного выполнения
1. Напишите функцию, которая читает текстовый файл и выводит его содержимое на экран.
2. Создайте функцию, которая принимает строку от пользователя и записывает её в текстовый файл.
3. Напишите программу, которая читает файл и подсчитывает
количество слов в каждой строке, затем записывает результат в новый файл в формате «Строка 1: 5 слов».
4. Создайте собственный модуль, который содержит функции
для выполнения основных математических операций (сложение,
вычитание, умножение, деление) и импортируйте этот модуль
в другой Python скрипт для использования этих функций.
5. Напишите функцию say_hello, которая просто печатает «Привет, мир!» при её вызове.
6. Создайте скрипт, который запрашивает у пользователя его
имя и сохраняет его в текстовый файл.
7. Напишите скрипт, который открывает текстовый файл и выводит все его строки на экран, добавляя номер строки перед текстом каждой строки.
8. Создайте текстовый файл с несколькими числами, каждое
из которых находится на новой строке. Напишите функцию, которая читает файл и выводит сумму этих чисел.
9. Импортируйте модуль math и используйте функцию sqrt
для вычисления квадратного корня числа, полученного от пользователя.
10. Напишите функцию convert_to_upper, которая принимает имя файла как аргумент. Функция должна открыть указанный
файл, прочитать его содержимое, преобразовать все текстовые данные в верхний регистр и затем сохранить преобразованный текст
в новом файле.
117
как аргумент. Функция должна открыть указанный файл, прочитать его
содержимое, преобразовать все текстовые данные в верхний регистр и затем
сохранить преобразованный текст в новом файле.
Тема «Объектно ориентированное
программирование
на Python» на Python»
Тема «Объектно
ориентированное программирование
Задание 1. Напишите программу для хранения информации
о книгах
в библиотеке.
Создайтедля
класс
Book
(книга),о имеющий
Задание
1. Напишите программу
хранения
информации
книгах в
атрибуты
titleСоздайте
(название),
author
(автор)
и year
(год издания),
а такбиблиотеке.
класс Book
(книга),
имеющий
атрибуты
title (название),
жеauthor
метод(автор)
display_book_info
информации
о книге).
и year (год (отображение
издания), а также
метод display_book_info
Метод display_book_info
должен выводить на экран информа(отображение
информации о книге).
цию о книге
формате «Название:
<название>,
<автор>,
Метод вdisplay_book_info
должен выводить
на экран Автор:
информацию
о книгеГод
издания:
<год"Название:
издания>».
в формате
<название>, Автор: <автор>, Год издания: <год
Ход работы
издания>".
1. Изучите
методические рекомендации.
Ход работы
2. Создайте
класс Book,рекомендации.
который будет служить шаблоном для
1. Изучите методические
создания
объектов-книг.
__init__,
ини2. Создайте
класс Book,Определите
который будетметод
служить
шаблономкоторый
для создания
циализирует
атрибуты
title (название
книги), author
(автор
объектов-книг.
Определитекласса:
метод __init__,
который инициализирует
атрибуты
книги)
year
(год издания
книги).
класса:иtitle
(название
книги), author
(автор книги) и year (год издания книги).
3. Добавьте метод display_book_info в класс Book. Этот метод будет
3. Добавьте
метод display_book_info в класс Book. Этот метод
будет выводить информацию о книге, используя атрибуты объекта. Внутри метода display_book_info используйте функцию print для
вывода
информации
о книге
в формате:
«Название:
<название>,
display_book_info
используйте
функцию
print для вывода
информации
о книге в
Автор:
<автор>,
Год<название>,
издания:Автор:
<год<автор>,
издания>».
формате:
"Название:
Год издания: <год издания>".
выводить информацию о книге, используя атрибуты объекта. Внутри метода
Методические указания
Методические
Класс
в Python указания
– это некий «шаблон» для создания объектов.
Класс
в
Python
– это некий
«шаблон»
дляданные
создания будут
объектов.
Класс
Класс определяет набор
свойств
(какие
храниться
определяет и
набор
свойств (какие
(какие данные
будут храниться
объекте) и методов
в объекте)
методов
операции
можно ввыполнить
с объ(какие
операции
можно
выполнить
с
объектом),
которые
можно
использовать
ектом), которые можно использовать для создания конкретных
для создания конкретных
экземпляров этого класса.
экземпляров
этого класса.
Создание
класса
в
Python
начинается
с ключевого
слова class, за
которым
Создание класса в Python
начинается
с ключевого
слова
class,
следует
имя
класса
и
двоеточие.
Затем
в
теле
класса
определяются
атрибуты
и
за которым следует имя класса и двоеточие. Затем в теле класса
методы класса. атрибуты и методы класса.
определяются
118
Создание класса в Python начинается с ключевого слова class, за которым
следует имя класса и двоеточие. Затем в теле класса определяются атрибуты и
методы класса.
Конструктор класса
класса определяется
методом
__init__, который
вызывается
Конструктор
определяется
методом
__init__,
который
при создании
класса. В конструкторе
класса определяются
вызывается
приэкземпляра
создании экземпляра
класса. В конструкторе
класса
атрибуты класса,
которые могут
быть использованы
в других
методах
класса.
определяются
атрибуты
класса,
которые могут
быть
использованы
В
Python
нет
строгой
поддержки
приватных
и
публичных
полей,
как в
в других методах класса.
некоторых
других
программирования,
таких как Java и
илипубличных
C++. Однако впоВ Python
нет языках
строгой
поддержки приватных
Python
есть
соглашение
об
использовании
двойных
подчеркиваний
передкак
лей, как в некоторых других языках программирования, таких
именами
атрибутов
класса,
чтобы указать,
что они являются
приватными.
Java
или C++.
Однако
в Python
есть соглашение
об использовании
Атрибут,
который
начинается
с
двух
подчеркиваний,
будет
скрыт
от внешнего
двойных подчеркиваний перед именами атрибутов класса,
чтобы
доступа,что
и егоони
имя будет
изменено,
чтобы начинаться
с имени который
класса и одного
указать,
являются
приватными.
Атрибут,
начинается с двух подчеркиваний, будет скрыт от внешнего доступа,
и его имя будет изменено, чтобы начинаться с имени класса и одподчеркивания. Например, атрибут с именем __foo в классе MyClass будет
ного подчеркивания. Например, атрибут с именем __foo в классе
переименован
в атрибут
_MyClass__foo
и будет _MyClass__foo
доступен только внутри
MyClass будет
переименован
в атрибут
и будеткласса
доMyClass.
ступен только внутри класса MyClass.
Методы
в втеле
Методыкласса
классаопределяются
определяются
телекласса
классаи имогут
могутиспользовать
использоатрибуты
класса для
выполнения
задач. Методы
могут
возвращать
вать атрибуты
класса
для выполнения
задач.
Методы
могут значения,
возвраиспользуя
оператор return.
щать значения,
используя оператор return.
Например, можно создать класс «Человек», который будет иметь
свойства «имя» и «возраст» и метод
«приветствие»,
который будет выводить на
119
экран приветствие с именем и возрастом человека.
Чтобы создать класс в Python, нужно использовать ключевое слово class,
Методы класса определяются в теле класса и могут использовать
атрибуты класса для выполнения задач. Методы могут возвращать значения,
используя оператор return.
Например, можно создать класс «Человек», который будет иметь
свойства «имя» и «возраст» и метод «приветствие», который будет
свойства «имя» и «возраст» и метод «приветствие», который будет выводить на
выводить на экран приветствие с именем и возрастом человека.
экран приветствие
с именем
и возрастом
человека.
Чтобы создать
класс
в Python,
нужно использовать ключевое
Чтобы
создать
класс указать
в Python, имя
нужно
использовать
ключевоеего
слово
class,
слово
class,
а затем
класса
и определить
свойства
а затем
указать
имя
класса
и
определить
его
свойства
и
методы.
Например,
вот
и методы. Например, вот как может выглядеть определение класса
как«Человек»:
может выглядеть определение класса «Человек»:
Например, можно создать класс «Человек», который будет иметь
Здесь
метод
__init__
– это специальный
метод, который
будет
вызываться
Здесь
метод
__init__
– это специальный
метод,
который
будет
при класса
создании
объекта класса
и инициализирует
его
привызываться
создании объекта
и инициализирует
его свойства
(в данном случае
свойства (в данном случае имя и возраст). А метод say_hello будет
выводить приветствие на экран с использованием этих свойств.
имя и возраст). А метод say_hello будет выводить приветствие на экран с
Задание 2. Напишите программу для хранения информации
использованием этих свойств.
о студентах в университете. Создайте класс Student (студент), имеющий атрибуты name (имя), stud_id (номер студенческого билеЗадание 2. Напишите программу для хранения информации о студентах в
та), а также метод display_student_info (отображение информации
университете. Создайте класс Student (студент), имеющий атрибуты name
о студенте).
(имя), stud_id (номер студенческого билета), а также метод display_student_info
Метод display_student_info должен выводить на экран инфор(отображение информации о студенте).
мацию о студенте в формате «Имя: <имя>, Номер студенческого
Метод display_student_info должен выводить на экран информацию о
билета: <номер>».
студенте в формате "Имя: <имя>, Номер студенческого билета: <номер>".
Ход работы
Ход работы
1. Изучите методические рекомендации.
1. Изучите методические рекомендации.
2. Создайте класс Student, который будет представлять студента
2. Создайте класс Student, который будет представлять студента с
с атрибутами и методами для хранения и отображения его инфоратрибутами и методами для хранения и отображения его информации.
мации.
3. Определите конструктор класса (метод __init__()) с параметрами self,
name (имя студента), stud_id (номер студенческого билета). Добавьте атрибут
120
speciality (специальность) в определение класса, если он должен быть общим
для всех студентов, или в метод __init__, если он должен быть уникальным для
атрибутами и методами для хранения и отображения его информации.
3. Определите конструктор класса (метод __init__()) с параме3. Определите конструктор класса (метод __init__()) с параметрами self,
трами self, name (имя студента), stud_id (номер студенческого биname (имя студента), stud_id (номер студенческого билета). Добавьте атрибут
лета). Добавьте атрибут speciality (специальность) в определение
speciality (специальность) в определение класса, если он должен быть общим
класса,
если он должен быть общим для всех студентов, или в метод
для всех студентов, или в метод __init__, если он должен быть уникальным для
__init__,
если
он должен быть уникальным для каждого студента.
каждого
студента.
4. Внутри
класса
Student определите
методметод
display_student_info,
который
4. Внутри
класса
Student
определите
display_student_info,
выводит информацию о студенте, используя атрибуты объекта.
который выводит информацию о студенте, используя атрибуты
объекта.
5. Создайтеэкземпляры
экземпляры класса
Student,
передав
соответствующие
5. Создайте
классаStudent,
Student,
передав
соответству5. Создайте экземпляры класса
передав
соответствующие
аргументы
в
конструктор
класса
(name
и
stud_id).
Вызовите
метод
ющие
аргументы
в конструктор
и stud_id).
аргументы
в конструктор
класса класса
(name и(name
stud_id).
Вызовите Вызовите
метод
display_student_info
для
каждого
экземпляра
класса
Student,
чтобы
отобразить
метод
display_student_info
дляэкземпляра
каждогокласса
экземпляра
класса
Student,
display_student_info
для каждого
Student, чтобы
отобразить
информацию
о
студенте.
чтобы
отобразить
информацию о студенте.
информацию
о студенте.
Методические
указания
Методические указания
Методические
указания
Объект
класса
который
нами на
создается
на осноОбъект класса–– компонент,
компонент, который
нами создается
основе шаблона,
Объект
класса
–
компонент,
который
нами
создается
на
основе
шаблона,
ве шаблона,
называемого
Класс каким
описывает,
каким
должен
который называется
классом.классом.
Класс описывает,
должен быть
объект,
который
называется
классом.
Класс
описывает,
каким
должен
быть объект,
какие данные
он должен
содержать
и какие
действия
он может
выполнить.
121 действия он может выполнить.
какие данные
он должен
и какие
Создавая
объект содержать
класса, мы
создаем конкретный экземпляр этого
Создавая
объект
класса,
создаем значения
конкретный
экземпляр
этого
шаблона,
который
может
хранитьмы
конкретные
данных
и выполнить
быть объект, какие данные он должен содержать и какие действия
он может выполнить.
Создавая объект класса, мы создаем конкретный экземпляр
этого шаблона, который может хранить конкретные значения данных и выполнить определенные действия, которые были определены в классе. Например, если класс – это «Человек», то объект
класса «Человек» может содержать информацию о конкретном человеке, такую как имя, возраст и адрес, и может выполнить определенные действия, например, печатать свои данные.
Например, при создании объекта класса «Человек» с именем
«Алексей» и возрастом «30» создается конкретный объект, который
представляет собой одного человека.
информацию
о конкретномчеловеке,
человеке, такую
такую как
и адрес,
и может
информацию
о конкретном
какимя,
имя,возраст
возраст
и адрес,
и может
выполнить
определенныедействия,
действия, например,
например, печатать
данные.
выполнить
определенные
печататьсвои
свои
данные.
Задание Например,
3.Например,
Напишите
программу
для хранения
информации
при создании
объекта класса «Человек»
с именем "Алексей"
и
при создании объекта класса «Человек» с именем "Алексей" и
возрастом
"30"
создается
конкретный
объект,
который
представляет
собой
о фрукте.возрастом
Создайте
класс Fruit
(фрукт)
атрибутами
класса
"30" создается
конкретный
объект,с который
представляет
собой category
одного человека.
одногоичеловека.
(категория)
color (цвет), а также атрибутами объекта name (на3. Напишите
программу
дляобъекта
хранения информации
фрукте. – «fruit1»
звание) и priceЗадание
(цена).
Создайте
два
этого окласса
Задание
3. Напишите
длякласса
хранения
информации
фрукте.
Создайте
класс
Fruit (фрукт)программу
category
(категория) ио color
и «fruit2». Выведите
на
экранс атрибутами
информацию
о каждом
фрукте.
Создайте
(фрукт)объекта
с атрибутами
класса иcategory
(категория)
и color
(цвет), класс
а такжеFruit
атрибутами
name (название)
price (цена).
Создайте два
Ход работы
объекта
этого
класса – "fruit1"
и "fruit2".
Выведите инаprice
экран
информацию
(цвет),
а также
атрибутами
объекта
name (название)
(цена).
Создайтео два
каждом
фрукте.
объекта
этого
класса – "fruit1" рекомендации.
и "fruit2". Выведите на экран информацию о
1. Изучите
методические
Ход работы
каждом
фрукте.
2. Определите
класс с именем Fruit. В классе Fruit объявите атри1. Изучите методические рекомендации.
Ход работы
буты класса: category,
который
обозначает
категорию
и изначально
2. Определите
класс с именем
Fruit. В классе Fruit
объявите атрибуты
1. Изучите методические рекомендации.
класса:
category,
который
обозначает
категорию
и
изначально
установлен
в
установлен в2. «Фрукты»,
который
цвет
фрукта
Определите классис color,
именем Fruit.
В классе обозначает
Fruit объявите атрибуты
"Фрукты", и color, который обозначает цвет фрукта и изначально имеет
и изначально
имеет
значение
«не
указан».
класса:
category,
который
обозначает
категорию
и
изначально
установлен
в
значение "не указан".
"Фрукты", и color, который обозначает цвет фрукта и изначально имеет
значение "не указан".
3. В методе __init__ класса Fruit инициализируйте атрибуты объекта:
3. В методе
__init__
класса
инициализируйте
атрибуты
name, который
хранит название
фрукта,Fruit
и price, который
хранит цену фрукта.
объекта: name, который хранит название фрукта, и price, который
3. В методе __init__ класса Fruit инициализируйте атрибуты объекта:
хранит цену
фрукта.
name, который
хранит название фрукта, и price, который хранит цену фрукта.
122
4. Создайте метод display_fruit_info, который выводит инфор4. Создайте метод должен
display_fruit_info,
который название
выводит информацию
мацию 4.
о фрукте.
выводить
ценуо фрукта,
Создайте Метод
метод display_fruit_info,
который выводит и
информацию
о
фрукте. Метод должен выводить название и цену фрукта, используя значения
используя
значения
соответствующих
атрибутов
объекта.
фрукте. Метод должен выводить название и цену фрукта, используя значения
соответствующих атрибутов объекта.
соответствующих атрибутов объекта.
5. Создайте два объекта: fruit1 и fruit2 класса Fruit, передав в конструктор
5. Создайте два объекта: fruit1 и fruit2 класса Fruit, передав
название и цену для каждого фрукта. Для каждого объекта вызовите метод
в конструктор
иfruit1
цену
для класса
каждого
фрукта.
Для каждо5.display_fruit_info
Создайтеназвание
два для
объекта:
и fruit2
Fruit,Отдельно
передаввыведите
в конструктор
отображения
информации
о фрукте.
го название
объекта
метод
display_fruit_info
для отображения
инатрибуты
класса
и color
для каждого
ивызовите
цену
дляcategory
каждого
фрукта.
Дляобъекта.
каждого объекта
вызовите метод
формации
о
фрукте.
Отдельно
выведите
атрибуты
класса
category
display_fruit_info для отображения информации о фрукте. Отдельно выведите
и color
длякласса
каждого
объекта.
атрибуты
category
и color для каждого объекта.
Методические указания
Каждый объект класса имеет свои уникальные значения свойств
(атрибутов), которые были инициализированы при создании объекта.
Например, объект "Алексей" имеет свойство «имя» со значением
"Алексей" и свойство «возраст» со значением "30".
Методические
указания
Методические
указания
Чтобы создать
объект класса «Человек», нужно вызвать конструктор
Каждый
класса
имеет
значения
свойств
класса,объект
передав
ему
нужные
параметры
(имяуникальные
иуникальные
возраст). Например,
вот каксвойств
Каждый
объект
класса
имеетсвои
свои
значения
можно создать
два объекта
класса «Человек»:
(атрибутов),
которые
были
инициализированы
при
создании
(атрибутов), которые были инициализированы при создании объекта.
объекта.Например, объект "Алексей" имеет свойство «имя» со значением
Например,
объект
«Алексей»
имеет"30".
свойство «имя» со значени"Алексей"
и свойство
«возраст»
со значением
ем «Алексей»
и свойство
со значением
«30». конструктор
Чтобы создать
объект«возраст»
класса «Человек»,
нужно вызвать
Чтобы
создать
объект
класса
«Человек»,
нужно
вызвать
конкласса, передав ему нужные параметры (имя и возраст). Например,
вот как
структор
класса,
ему«Человек»:
нужные параметры (имя и возраст).
можно создать
два передав
объекта класса
Например, вот как можно создать два объекта класса «Человек»:
Теперь можно вызывать метод say_hello для каждого объекта, чтобы
123 ивозрастом:
вывести на экран приветствие с их именем
Теперь можно вызывать метод say_hello для каждого объекта,
Теперь можно вызывать метод say_hello для каждого объекта, чтобы
чтобы вывести на экран приветствие с их именем и возрастом:
вывести на экран приветствие с их именем и возрастом:
Кроме того, класс может иметь общие свойства (атрибуты), которые
Кроме того, класс может иметь общие свойства (атрибуты), кобудут использоваться всеми объектами этого класса.
торые будут
использоваться всеми объектами этого класса.
Атрибуты – это переменные, которые хранят значения для определенного
Атрибуты
– это
переменные,
которые
хранят
значения
для
объекта. В Python
атрибуты
могут быть определены
как на
уровне класса,
так и
определенного
объекта. В Python атрибуты могут быть определены
на уровне объекта.
как на уровне
класса,
так ипримеров.
на уровне объекта.
Рассмотрим
несколько
Атрибуты
на
уровне
класса
Рассмотрим несколько примеров.
Например,
класс «Человек»
Атрибуты
на уровне
класса может иметь общее свойство «пол», которое
будет одинаковым для всех созданных объектов этого класса.
Например,
класс «Человек» может иметь общее свойство
«пол», которое будет одинаковым для всех созданных объектов
этого класса.
В этом
примере класс
Person
имеетимеет
общий общий
атрибут gender,
который
будеткоВ этом
примере
класс
Person
атрибут
gender,
одинаковым
для всех объектов,
созданных
на основе этого
класса. Атрибуты
торый
будет одинаковым
для
всех объектов,
созданных
на основе
name
и
age
определены
на
уровне
объекта
и
будут
уникальными
для каждого
этого класса. Атрибуты name и age определены на уровне
объекта
созданного
объекта.
и будут уникальными для каждого созданного объекта.
Атрибуты
уровнеобъекта
объекта
Атрибуты
на на
уровне
Атрибуты объекта и общие атрибуты класса могут быть использованы в
Атрибуты
объекта и общие атрибуты класса могут быть испольметодах класса для выполнения различных операций. Например, метод
зованы в методах класса для выполнения различных операций.
«приветствие» класса «Человек» использует свойства объекта «имя» и
Например,
метод «приветствие» класса «Человек» использует свойдля вывода на экран персонализированного приветствия.
ства«возраст»
объекта
«имя» и «возраст» для вывода на экран персонализированного приветствия.
124
Атрибуты объекта и общие атрибуты класса могут быть использованы в
методах класса для выполнения различных операций. Например, метод
«приветствие» класса «Человек» использует свойства объекта «имя» и
«возраст» для вывода на экран персонализированного приветствия.
Здесь класс Person имеет конструктор, который инициализирует атрибуты
Здесь класс Person имеет конструктор, который инициализируname, age на уровне объекта. Создаются два объекта – person1 и person2,
ет атрибуты
name, age на уровне объекта. Создаются два объекта –
каждый из которых имеет уникальные значения своих атрибутов. Мы можем
person1
и
person2,
каждый
из которых
имеет
уникальные
значения
обращаться к атрибутам
объектов,
используя имя
объекта
и имя атрибута,
своих
атрибутов.
Мы получив
можем
обращаться
атрибутам
объектов,
например,
person1.name,
значение
поля name кобъекта
person1 или
используя
имя
объекта
имя
атрибута,
person2.age,
получив
значениеиполя
age объекта
person2.например, person1.name,
получив значение поля name объекта person1 или person2.age, полуМетодыполя
классаage
в Python
чив значение
объекта person2.
Методы класса в Python
Методы класса в Python – это функции, которые определены внутри класса и могут быть вызваны на объектах этого класса.
МетодыМетоды
могуткласса
изменять
состояние
объекта,
работать
с его внутри
атрибув Python
– это функции,
которые
определены
тами
и выполнять
различные
действия
в зависимости
отизменять
требовакласса
и могут быть вызваны
на объектах
этого класса.
Методы могут
ний
программы.
состояние объекта, работать с его атрибутами и выполнять различные действия
и обычные
функции,
методы могут принимать аргументы
в Как
зависимости
от требований
программы.
и возвращать
значения.
Однако
в отличие
от обычных
функций
Как и обычные функции, методы
могут принимать
аргументы
и
методы
могут
иметьОднако
доступ
к атрибутам
объекта
через
ключевое
возвращать
значения.
в отличие
от обычных
функций
методы
могут
слово
Это
позволяет
методам
работать
с данными
объекта
иметьself.
доступ
к атрибутам
объекта
через ключевое
слово
self. Это позволяет
и изменять
их. с данными объекта и изменять их.
методам работать
Пример
класса
Person
с методом
say_hello():
Пример
класса Person
с методом
say_hello():
Здесь класс Person содержит метод say_hello, который выводит на экран
приветствие с именем объекта.
125
Чтобы вызвать метод объекта, нужно указать его имя после имени
объекта и передать необходимые аргументы, если они есть. Например, чтобы
Здесь класс Person содержит метод say_hello, который выводит
на экран приветствие с именем объекта.
Чтобы вызвать метод объекта, нужно указать его имя после
имени объекта и передать необходимые аргументы, если они есть.
Например, чтобы вызвать метод say_hello для объекта person1, можно использовать следующий код:
Наследование является
является одним
одним из
ключевых концепций
объектно
Наследование
из ключевых
концепций
объекпрограммирования
(ООП). Оно позволяет
новые
тноориентированного
ориентированного
программирования
(ООП). создавать
Оно позволяет
классы нановые
основе классы
уже существующих
или базовых(родительклассов),
создавать
на основе(родительских
уже существующих
наследуя
их
свойства
и
методы.
ских или базовых классов), наследуя их свойства и методы.
Новый
класс,созданный
созданный нана
основе
родительского
класса, класса,
называется
Новый
класс,
основе
родительского
надочерним
классом
или
производным
классом.
Он
наследует
все
атрибуты
и
зывается дочерним классом или производным классом. Он наслеродительского
класса, ародительского
также может добавлять
свои
собственные
дуетметоды
все атрибуты
и методы
класса,
а также
может
атрибуты
и
методы,
переопределять
методы
родительского
класса
и
расширять
добавлять свои собственные атрибуты и методы, переопределять
их функциональность.
методы
родительского класса и расширять их функциональность.
В
Python
наследование реализуется
через ключевое
слово class слово
и указание
В Python
наследование
реализуется
через ключевое
class
базового
класса
в
скобках.
и указание базового класса в скобках.
Дочернийкласс
класс наследует
наследует атрибуты
и методы
родительского
класса,
Дочерний
атрибуты
и методы
родительского
используя
ключевое
слово
super().
класса, используя ключевое слово super().
Например,если
если уу вас
вас есть
«Фрукты»,
вы можете
создать создать
новый
Например,
естькласс
класс
«Фрукты»,
вы можете
класс
«Яблоки»,
который
наследует
свойства
и
методы
класса
«Фрукты».
новый класс «Яблоки», который наследует свойства и методы класТаким образом,
вы можете
определить
уникальные
свойства и уникальные
методы для
са «Фрукты».
Таким
образом,
вы можете
определить
класса
«Яблоки»,
не
повторяя
код,
который
уже
есть
в
классе
«Фрукты».
свойства и методы для класса «Яблоки», не повторяя код, который
уже есть в классе «Фрукты».
126
В этом примере нами был создан базовый класс Fruit, который имеет
В этом
этом
примеренами
нами был
был
создан
базовый
класскласс
Fruit, Fruit,
которыйкоторый
имеет
В этом
примере
былсоздан
создан
базовый
В
примере
нами
базовый
класс
Fruit,
который
имеет
свойства name (название) и color (цвет), а также метод describe, который
свойства
name
(название)
и
color
(цвет),
а
также
метод
describe,
который
имеет
свойства
name
(название)
и
color
(цвет),
а
также
метод
describe,
свойства name (название) и color (цвет), а также метод describe, который
выводит информацию о фрукте. Затем создали класс Apple, который наследует
выводит
информацию
оо фрукте.
создали
Apple,
который
наследует
который
информацию
о фрукте.
Затем
создали
класс
Apple,
выводитвыводит
информацию
фрукте. Затем
Затем
создали класс
класс
Apple,
который
наследует
свойства и методы класса Fruit. Класс Apple имеет дополнительное свойство
свойства
и
методы
класса
Fruit.
Класс
Apple
имеет
дополнительное
свойство
который
наследует
свойства
и
методы
класса
Fruit.
Класс
Apple
имесвойства и методы класса Fruit. Класс Apple имеет дополнительное свойство
taste (вкус) и переопределяет метод describe, чтобы добавить информацию о
taste
(вкус)
и
переопределяет
метод
describe,
чтобы
добавить
информацию
оо
ет taste
дополнительное
свойство
taste
(вкус)
и переопределяет
метод
(вкус) и переопределяет
метод
describe,
чтобы
добавить информацию
вкусе
яблока.
вкусе
describe,
чтобы добавить информацию о вкусе яблока.
вкусе яблока.
яблока.
Далее
мы
создали
экземпляр
класса
Apple сс названием
названием
Apple, красным
Далее
мы
создали
класса
Apple
Apple,
Далее
мы
экземпляр
класса
с названием
Apple,
Далее
мысоздали
создали экземпляр
экземпляр
класса
Apple Apple
с названием
Apple, красным
красным
цветом
и
сладким
вкусом,
а
затем
вызвали
метод
describe.
Результатом
цветом
и
сладким
вкусом,
а
затем
вызвали
метод
describe.
Результатом
красным
цветом
и
сладким
вкусом,
а
затем
вызвали
метод
describe.
цветом и сладким вкусом, а затем вызвали метод describe. Результатом
выполнения
кода
будет вывод
информации
яблоке,
включая его название,
выполнения
кода
информации
ооо яблоке,
включая
Результатом
кода
будет вывод
информации
оназвание,
яблоке,
выполнения выполнения
кода будет
будет вывод
вывод
информации
яблоке,
включая его
его название,
цвет
и
вкус.
цвет и
и вкус.
вкус.
включая
его название, цвет и вкус.
цвет
Запустим
код
через
кнопку
Run
Запустим
код
через
Run
Запустим
код
кнопку
Запустим
кодчерез
через кнопку
кнопку
RunRun
ии
получим
следующий
результат:
и получим
следующий
результат:
иполучим
получимследующий
следующий результат:
результат:
Декораторы – это способ добавления дополнительной функциональности к уже существующему коду, без изменения самого кода.
Так вы можете создать функцию, которая добавляет проверку наличия файла перед выполнением другой функции. Декораторы могут
быть довольно сложными, но для понимания базовых принципов
127
достаточно знать, что они позволяют добавлять «навороты» к уже
существующему коду.
Теперь давайте создадим класс «Собаки», который наследует
свойства и методы класса «Животные». Также добавим декоратор,
который будет выводить сообщение о том, что собака начинает
и заканчивает лай.
Возьмем за пример декоратор @staticmethod. Он используется для создания методов внутри класса, которые можно вызывать
без создания объекта класса. Это значит, что статические методы
не зависят от свойств объекта и могут быть использованы для выполнения простых действий, которые не связаны с конкретным
объектом класса. Например, статический метод может использоваться для выполнения математических операций над числами.
Декоратор @staticmethod устанавливает метод класса как статический, что позволяет вызывать его без создания объекта класса. Это
упрощает код и ускоряет его выполнение.
Запустим код через кнопку Run
128
Далее мы создали экземпляр класса Apple с названием Apple, красным
цветом и сладким вкусом, а затем вызвали метод describe. Результатом
выполнения кода будет вывод информации о яблоке, включая его название,
цветкод
и вкус.
Запустим
через кнопку Run
Запустим
кодкод
через
Запустим
черезкнопку
кнопку RunRun
и получим
следующий
результат:
и получим
следующий
результат:
и получим
следующий
результат:
В этом примере нами был создан класс «Собаки», который наследует свойства и методы класса «Животные». Также добавили методы eat, sleep в классе «Животные», которые выводят сообщение
о том, что собака лает. Наконец, мы переопределили методы bark
и play, добавив дополнительный функционал, который выводит сообщение о начале и конце лая, а также о том, что собака играет.
Применяем декоратор bark к методу play, используя символ @.
Теперь в момент вызова метода play на экземпляре класса Dog декоратор bark будет выводить сообщения о начале и конце лая.
Далее создаем экземпляр класса Dog, и от этого экземпляра
класса вызываем методы eat(), play(), sleep().
Задания для самостоятельного выполнения
1. Создайте класс Book, который будет иметь два атрибута: title
и author. Добавьте метод, который печатает информацию о книге
в формате Title by Author.
2. Определите класс Student с атрибутами name и age. Добавьте
метод introduce, который выводит “Hello, my name is [name] and I
am [age] years old”.
3. Создайте класс BankAccount с атрибутами account_number
и balance. Добавьте методы deposit и withdraw для управления балансом счёта.
4. Определите базовый класс Pet с атрибутами name и age, а также метод speak, который печатает «I don’t know what to say». Создайте производный класс Dog, который переопределяет метод speak
для вывода «Bark».
129
4. Создайте абстрактный класс Shape с абстрактным методом
area. Определите производные классы, такие как Circle и Rectangle,
которые реализуют метод area.
6. Определите класс Point с атрибутами x и y. Переопределите
оператор «+» и метод __str__() так, чтобы они позволяли складывать два объекта класса Point и корректно выводили координаты
точек.
7. Создайте класс Rectangle с закрытыми атрибутами width
и height и методами доступа к этим атрибутам (геттеры и сеттеры),
обеспечивая проверку, что ширина и высота больше нуля.
8. Определите класс Engine, который содержит метод start. Затем
создайте класс Car, который содержит объект Engine как атрибут
и метод drive, который запускает двигатель, когда машина начинает
движение.
9. Определите класс FileWrapper, который открывает файл
в конструкторе и закрывает его в деструкторе __del__(). Создайте
экземпляр этого класса и убедитесь, что файл корректно закрывается при удалении объекта.
10. Создайте класс Product, представляющий товар в интернет-магазине. У товара должны быть атрибуты name (название),
price (цена) и quantity (количество на складе). Реализуйте методы
для установки цены и количества товара, а также метод для вычисления общей стоимости всех единиц товара на складе.
130
Модуль 2. ОСНОВЫ WEB-РАЗРАБОТКИ
НА PYTHON С ИСПОЛЬЗОВАНИЕМ DJANGO
Тема 4. Создание веб-приложения на Python
с использованием Django
Основные понятия в web-разработке
Web-разработка – процесс создания веб-сайтов и веб-приложений, которые доступны через Интернет.
Основными понятиями в web-разработке являются:
• HTML (HyperText Markup Language) – язык разметки, который
используется для создания содержимого веб-страниц;
• CSS (Cascading Style Sheets) – язык стилей, который используется для оформления веб-страниц;
• JavaScript – язык программирования, который позволяет создавать интерактивные элементы на веб-страницах;
• базы данных – системы, которые используются для хранения
и организации данных, которые могут быть доступны через
веб-приложения;
• серверные языки программирования – языки программирования, которые используются для создания серверной части
веб-приложений, такие как Python, PHP, Ruby и другие.
Python популярен в web-разработке благодаря своей простоте
и удобству использования. Он может быть использован как для
создания серверной части веб-приложений, так и для создания
скриптов и утилит для автоматизации процессов веб-разработки.
Для разработки веб-приложений используются популярные
фреймворки Python: Django, Flask, Pyramid и Bottle. Django предоставляет всестороннюю инфраструктуру для создания веб-приложений, включая ORM (Object-Relational Mapping) для работы с базами данных, аутентификацию и авторизацию пользователей, а также
многое другое. Flask и Bottle являются более легковесными фреймворками, которые позволяют создавать простые веб-приложения
с минимальным количеством настроек. Pyramid предоставляет
более гибкую и настраиваемую архитектуру для разработки вебприложений.
131
Основные принципы веб-разработки в Python включают использование фреймворков и библиотек для ускорения и упрощения
процесса разработки, использование ORM для работы с базами данных, использование MVC (Model-View-Controller) архитектуры для
разделения логики приложения, представлений и моделей, а также
использование шаблонов для создания динамических веб-страниц.
Виртуальное окружение в Python
Это изолированная среда, в которой можно устанавливать и использовать различные версии пакетов и модулей Python без влияния на другие проекты.
Рассмотрим пошаговое руководство по работе с виртуальным
окружением при создании программы на языке Python.
• Установите модуль virtualenv, выполнив команду pip install
virtualenv в терминале.
• Создайте новое виртуальное окружение, выполнив команду
virtualenv venv.
• Активируйте виртуальное окружение, выполнив команду
source venv/bin/activate.
• После активации виртуального окружения в командной строке появится префикс (venv), указывающий на то, что вы находитесь
внутри виртуального окружения.
• Установите необходимые пакеты в виртуальное окружение,
выполнив команду pip install package_name.
• Создайте файл requirements.txt для хранения списка всех зависимостей вашего проекта. Вы можете создать этот файл самостоятельно либо автоматически с помощью команды pip freeze >
requirements.txt.
• При работе над проектом в будущем вы можете активировать
виртуальное окружение, выполнив команду, после которой вы можете запустить свой код в активированном виртуальном окружении, чтобы использовать установленные пакеты.
• Если вы переносите свой проект на другую систему, вам нужно будет создать новое виртуальное окружение и установить все
необходимые зависимости из файла requirements.txt. Для этого введите фрагмент кода
132
source venv/bin/activate
pip install -r requirements.txt
• По завершении работы с виртуальным окружением вы можете его деактивировать deactivate. Это вернет вас в глобальное пространство Python.
Таким образом, создание и использование виртуального окружения в Python позволяет изолировать проекты друг от друга и управлять версиями пакетов и зависимостей. Это особенно полезно для
проектов, которые требуют разных версий одного и того же пакета
или зависимости, которые могут конфликтовать между проектами.
Библиотеки Python
Библиотеки – это наборы модулей и пакетов, предназначенные для решения определенных задач. Библиотеки могут содержать
функции, классы, методы, константы и другие объекты, которые могут быть использованы в приложениях Python. Могут быть установлены с помощью менеджера пакетов pip или других инструментов.
Рассмотрим наиболее популярные библиотеки Python и их функциональность.
• NumPy – это библиотека для работы с массивами данных.
Она предоставляет быстрые и эффективные операции с массивами,
такие как матричные операции, операции с линейной алгеброй,
Фурье-преобразования и многое другое.
• Pandas – библиотека для работы с данными, которая предоставляет высокоуровневые структуры данных и инструменты для
анализа и манипулирования данными. Она позволяет работать
с таблицами данных (так называемыми DataFrame) и выполнять
различные операции с ними, такие как фильтрация, сортировка,
группировка и агрегирование.
• Matplotlib – библиотека для визуализации данных. Она позволяет создавать графики, диаграммы и другие виды визуализации
данных. Она также предоставляет множество опций для настройки
внешнего вида графиков.
• Scikit-learn – библиотека для машинного обучения. Она предоставляет инструменты для классификации, регрессии, класте 133
ризации и других задач машинного обучения. Она также включает
инструменты для предобработки данных и выбора признаков.
• Django – библиотека для создания веб-приложений. Она предоставляет мощный набор инструментов для создания веб-сайтов
и веб-приложений. Она также включает в себя встроенную административную панель, которая упрощает управление базой данных.
• Flask – библиотека для создания микровеб-приложений. Она
предоставляет минимальный набор инструментов для создания
простых веб-приложений. Она также легко расширяема и имеет
большое количество плагинов и расширений.
• Кроме того, в Python существует множество других библиотек, которые можно использовать для различных задач, таких как
обработка изображений, работа с базами данных, парсинг веб-страниц и многое другое.
Для того чтобы начать работать с библиотекой, ее нужно установить. Установка библиотек в Python – процесс установки пакетов,
которые предоставляют дополнительные функции и возможности для языка программирования Python. В Python для установки
библиотек используется менеджер пакетов pip, который входит
в стандартную поставку Python.
Рассмотрим пошаговое руководство по установке библиотек
в Python с помощью менеджера пакетов pip.
Откройте командную строку или терминал на своем компьютере.
Установите необходимую библиотеку с помощью команды
pip install library_name, где library_name – имя библиотеки, которую
вы хотите установить.
Если вы устанавливаете библиотеку для определенного проекта, рекомендуется установить ее в виртуальное окружение (virtual
environment), чтобы изолировать зависимости проекта от других
проектов и упростить управление зависимостями.
Дождитесь завершения установки. pip автоматически загрузит и установит все зависимости библиотеки.
После установки библиотеки вы можете импортировать
ее в свой код Python с помощью оператора import.
134
Если вы хотите обновить уже установленную библиотеку,
выполните команду pip install --upgrade library_name, где library_
name – имя библиотеки, которую нужно обновить.
Если вы хотите удалить библиотеку, выполните команду pip
uninstall library_name, где library_name – имя библиотеки, которую
нужно удалить.
Вот некоторые дополнительные параметры, которые вы можете использовать при установке библиотек с помощью pip:
– user – устанавливает пакеты в домашний каталог пользователя, а не в системный каталог. Это может быть полезно, если у вас
нет прав администратора на компьютере;
– proxy – позволяет установить прокси-сервер для загрузки пакетов. Это может быть полезно, если вы находитесь за корпоративной сетью;
– no-cache-dir – запрещает использование кэша pip, что может
помочь решить проблемы с зависимостями.
Django
Рассмотрим более подробно библиотеку, предназначенную для
создания веб-приложений.
Django – бесплатная и открытая библиотека для Python, предназначенная для создания веб-приложений.
Django предоставляет разработчикам мощный набор инструментов для создания веб-приложений, включая следующие:
– ORM (Object-Relational Mapping) – инструмент для работы
с базами данных, который позволяет разработчикам работать с данными в виде объектов Python, а не SQL-запросов. Django ORM автоматически создает таблицы в базе данных и обрабатывает связи
между таблицами;
– административная панель – встроенный инструмент в Django,
который позволяет управлять данными в базе данных через вебинтерфейс. Разработчики могут настроить административную
панель для своих моделей данных, чтобы пользователи могли легко
добавлять, удалять и редактировать данные;
– URL-маршрутизация – позволяет разработчикам определять, какие URL-адреса должны обрабатываться, какие функции.
135
Django автоматически обрабатывает URL-адреса и вызывает соответствующие функции;
– шаблонизация – позволяет разработчикам создавать динамические HTML-страницы, используя шаблоны. Шаблоны Django
позволяют разработчикам создавать повторно используемый код
для отображения данных на веб-страницах;
– Middleware – инструмент, который позволяет разработчикам
добавлять дополнительную функциональность к запросам и ответам, обрабатываемым Django;
– фреймворк для тестирования – позволяет разработчикам
создавать и запускать автоматические тесты для своего приложения. Django предоставляет множество инструментов для тестирования, включая тестирование моделей, представлений
и URL-маршрутизации;
– безопасность – Django включает в себя множество инструментов для обеспечения безопасности приложений, таких как защита от CSRF-атак, защита от SQL-инъекций и многое другое.
В целом Django предоставляет разработчикам все необходимые
инструменты для создания мощных веб-приложений на Python.
Она обладает множеством преимуществ, таких как быстрое развертывание, масштабируемость, безопасность и многие другие, что
делает ее популярным выбором для веб-разработки.
Создание проекта в Django
Процесс создания проекта – это первый шаг в создании
веб-приложения с использованием библиотеки Django.
Рассмотрим пошаговое руководство, которое поможет вам создать новый проект в Django.
• Установите Django на свой компьютер, если она еще не установлена. Для этого выполните команду pip install django в терминале
или командной строке.
• Откройте командную строку или терминал на своем компьютере.
• Создайте новую папку для проекта, в которой будут храниться все файлы проекта. Для этого выполните команду mkdir project_
name, где project_name – имя вашего проекта.
136
• Перейдите в созданную папку, используя команду cd project_
name.
• Создайте новый проект Django, используя команду djangoadmin startproject project_name. Эта команда создаст новый проект
Django в текущей папке с именем project_name.
После выполнения команды структура проекта будет создана
в вашей папке. Она будет выглядеть примерно так, как показано
на рис. 56, где:
– manage.py – файл, который используется для управления проектом. Он позволяет выполнять различные задачи, такие как запуск
сервера,
создание–миграций
и многое
другое;все файлы, связанные с
– project_name/
пакет, который
содержит
– project_name/ – пакет, который содержит все файлы, связанные
проектом Django;
с проектом Django;
– __init__.py – пустой файл, который указывает Python, что это пакет;
– __init__.py
– пустой файл, который указывает Python, что это
–settings.py – файл, который содержит настройки проекта Django, такие
пакет;
как
данных,
безопасности
и многое
другое;проекта Django,
– базы
settings.py
– настройки
файл, который
содержит
настройки
такие
как
базы
данных,
настройки
безопасности
и многое другое;
– urls.py – файл, который содержит маршруты (URL-адреса)
вашего
–
urls.py
–
файл,
который
содержит
маршруты
(URL-адреса)
вашеприложения;
го приложения;
– asgi.py и wsgi.py – файлы, используемые для обслуживания вашего
– asgi.py и wsgi.py – файлы, используемые для обслуживания вашеприложения с помощью ASGI (Asynchronous Server Gateway Interface) и WSGI
го приложения с помощью ASGI (Asynchronous Server Gateway
(WebInterface)
Server Gateway
Interface)
соответственно.
и WSGI
(Web Server
Gateway Interface) соответственно.
Рис.56.
56.Структура
Структурапроекта
проекта
Рис.
После создания проекта вы можете создать новые приложения внутри
После создания проекта вы можете создать новые приложе-
проекта,
используя
команду
python manage.py
app_name. Эта
команда
ния внутри
проекта,
используя
командуstartapp
python manage.py
startapp
создаст
новоеЭта
приложение
папке проекта
именем app_name
и необходимыми
app_name.
командавсоздаст
новоесприложение
в папке
проекта
с именем
и необходимыми файлами для работы прилофайлами
для app_name
работы приложения.
жения.
Создание веб-страницы на языке Python – это процесс создания страницы,
которая может отображаться в веб-браузере.
137шагов
Рассмотрим последовательность
для создания веб-страницы в
Django.
Создание веб-страницы на языке Python – это процесс создания страницы, которая может отображаться в веб-браузере.
Рассмотрим последовательность шагов для создания веб-страницы в Django.
Шаг 1. Создание проекта Django. Для создания проекта нужно
выполнить в командной строке команду django-admin startproject
project_name, где project_name – название вашего проекта.
Шаг 2. Создание приложения Django. Для его создания нужно выполнить
Шаг 2. Создание приложения Django. Для его создания нужно
в выполнить
командной строке
командустроке
python
manage.py
startapp
app_name,
в командной
команду
python
manage.py
startapp где
app_name
– название
вашего приложения.
app_name,
где app_name
– название вашего приложения.
Шаг
3.
Определение
моделей
данных.
Для определения
модеШаг 3. Определение моделей
данных.
Для определения
моделей
данных
лей
данных
нужно
создать
файл
models.py
в
приложении
и
опреденужно создать файл models.py в приложении и определить модели данных,
лить модели данных, используя классы моделей Django. Например,
используя классы моделей Django. Например, как представлено на рис. 57.
как представлено на рис. 57.
Рис.
Рис. 57.
57.Определение
Определение класса
класса модели
модели
Шаг 4. Создание миграций, то есть модуля, созданного на основе
определенной
и предназначенного
формирования
Шаг
4. Созданиемодели
миграций,
то есть модуля, для
созданного
на основе
в
базе
данных
всех
требуемых
этой
моделью
структур.
определенной модели и предназначенного для формирования в базе данных
Для создания миграций нужно выполнить в командной стровсех требуемых этой моделью структур.
ке команду python manage.py makemigrations, которая создаст файлы
Для создания миграций нужно выполнить в командной строке команду
миграций на основе определенных моделей данных.
pythonШаг
manage.py
makemigrations,
которая создаст
файлы миграций
на основе
5. Применение
миграций.
Для применения
миграций
определенных
моделей данных.
нужно выполнить
в командной строке команду python manage.py
migrate,
создаст таблицы
на основе
опредеШаг которая
5. Применение
миграций.в базе
Для данных
применения
миграций
нужно
ленных
моделей
данных.
выполнить в командной строке команду python manage.py migrate, которая
Шаг 6. Создание представлений. Для создания представлений
создаст таблицы в базе данных на основе определенных моделей данных.
нужно создать файл views.py в приложении и определить функцииШаг 6. Создание представлений. Для создания представлений нужно
представления, которые будут обрабатывать запросы и возвращать
создать
файл
views.py так,
в приложении
и определить
ответы.
Например,
как представлено
на рис.функции-представления,
58.
которые будут обрабатывать запросы и возвращать ответы. Например, так, как
представлено на рис. 58.
138
которые будут обрабатывать запросы и возвращать ответы. Например, так, как
представлено на рис. 58.
Рис. 58. Создание представлений
Рис. 58. Создание представлений
Рис. 58. Создание представлений
Шаг 7. Создание шаблонов. Для создания шаблонов нужно создать
Шаг
Создание шаблонов.
создания
шаблонов
Шаг7.7.
Создание
шаблонов.иДля
Для
создания
шаблоновнужно
нужносоздать
содиректорию
templates
в приложении
создать
файлы шаблонов.
Шаблоны
– это
здать директорию
в приложении
и создать
файлы
шаблодиректорию
templates вtemplates
приложении
и создать файлы
шаблонов.
Шаблоны
– это
файлы HTML, которые определяют внешний вид веб-страницы. Например,
нов.
Шаблоны
–
это
файлы
HTML,
которые
определяют
внешний
файлы HTML, которые определяют внешний вид веб-страницы. Например,
файл my_template.html может выглядеть так, как представлено на рис. 59.
вид веб-страницы. Например, файл my_template.html может выгляфайл my_template.html может выглядеть так, как представлено на рис. 59.
деть так, как представлено на рис. 59.
Рис. 59. Файл HTML
Рис. 59.
59. Файл
Файл HTML
HTML
Рис.
Шаг
ДляДля
создания
маршрутов
нужно
создать
Шаг8.8.Создание
Созданиемаршрутов.
маршрутов.
создания
маршрутов
нужно
Шаг
8.
Создание
маршрутов.
Для
создания
маршрутов
нужно
создать
создать
urls.py в приложении
и определить
маршруты,
котофайл
urls.pyфайл
в приложении
и определить маршруты,
которые
указывают,
какой
файл
urls.py
в приложении
иURL
определить
маршруты,
которые указывают,
какой
рые
указывают,
какой
должен
обрабатываться
каким
предURL должен обрабатываться каким представлением. Например, файл urls.py
ставлением.
Например, файл
urls.py
может выглядеть
так, как
предURL
должен обрабатываться
каким
представлением.
Например,
файл
urls.py
может выглядеть так, как представлено на рис. 60.
ставлено
на
рис.
60.
может выглядеть так, как представлено на рис. 60.
Рис. 60.
60. Создание
Создание маршрута
маршрута
Рис.
Рис. 60. Создание маршрута
Шаг 9. Подключение приложения к проекту. Для подключе9. Подключение
к проекту. файл
Для settings.py
подключения
нияШаг
приложения
к проектуприложения
нужно отредактировать
Шаг 9. Подключение приложения к проекту. Для подключения
приложения
нужно
отредактировать
файлINSTALLED_APPS.
settings.py в проекте и
в проектек ипроекту
добавить
приложение
в список
приложения
к
проекту
нужно
отредактировать
файл
settings.py в проекте и
Например,
как представлено
на рис.
61.
добавить
приложение
в список
INSTALLED_APPS.
Например, как
добавить приложение
представлено на рис. 61.
представлено на рис. 61.
в
список
INSTALLED_APPS.
139
Например,
как
Рис.
Рис.61.
61. Код
Кодподключения
подключения
Шаг 10. Запуск сервера Django. Для запуска сервера Django
Шаг 10.
Запуск сервера
Django.строке
Для запуска
сервера
нужно
нужно
выполнить
в командной
команду
pythonDjango
manage.py
выполнить
в командной
строке команду
manage.py
runserver,
python manage.py
runserver,python
которая
запуститrunserver,
сервер наpython
локальном
хосте.
Например:
python
manage.py
runserver.
manage.py runserver, которая запустит сервер на локальном хосте. Например:
После выполнения
python manage.py
runserver. всех этих шагов вы сможете открыть
веб-страницу, указанную в маршрутах, и увидеть результат.
После выполнения всех этих шагов вы сможете открыть веб-страницу,
указанную в маршрутах, и увидеть
результат.
Шаблоны
в Django
Это файлы, которые содержат HTML-разметку и дополнительШаблоны
в Django Django, позволяющие создавать динамические
ные
теги шаблонов
веб-страницы.
Например,
вы можете
использовать
теги шаблонов
Это файлы, которые
содержат
HTML-разметку
и дополнительные
теги
Django
для
вставки
переменных
Python
в
HTML-код
или
для
создашаблонов Django, позволяющие создавать динамические веб-страницы.
ния циклов для отображения списков данных.
Например, вы можете использовать теги шаблонов Django для вставки
Шаблон определяет, как будет выглядеть ваша веб-страница,
переменных Python в HTML-код или для создания циклов для отображения
включая HTML-разметку, CSS-стили и JavaScript-скрипты.
списков1.данных.
Чтобы создать шаблон, создайте новый файл home.html в папопределяет,
как будет выглядеть
ваша чтобы
веб-страница,
кеШаблон
templates
в вашем приложении.
Например,
создатьвключая
простой шаблонCSS-стили
для отображения
текста, вы можете добавить следуюHTML-разметку,
и JavaScript-скрипты.
щий
код
в
файл
home.html
(рис.
62). новый файл home.html в папке
1.
Чтобы создать шаблон, создайте
templates в вашем приложении. Например, чтобы создать простой шаблон для
отображения текста, вы можете добавить следующий код в файл home.html (рис.
62).
Рис. 62.
62.Простой
Простой шаблон
шаблон
Рис.
2.
Подключение шаблона к функции представления. Чтобы функция
140
представления знала, какой шаблон использовать для отображения страницы,
необходимо добавить имя шаблона в вызов функции render. Например, чтобы
Рис. 62. Простой шаблон
2.
Подключение шаблона к функции представления. Чтобы функция
2. Подключение шаблона к функции представления. Чтобы
представления знала, какой шаблон использовать для отображения страницы,
функция представления знала, какой шаблон использовать для
необходимо добавить имя шаблона в вызов функции render. Например, чтобы
отображения страницы, необходимо добавить имя шаблона в вызов
использовать
шаблонНапример,
home.html для
отображения
главной
страницы,
вы можете
функции render.
чтобы
использовать
шаблон
home.html
изменить
функцию home
в файле
views.py так,
как представлено
рис. 63.
для отображения
главной
страницы,
вы можете
изменитьнафункцию
home в файле views.py так, как представлено на рис. 63.
Рис.63.
63.Изменение
Изменение шаблона
шаблона
Рис.
3. Запуск сервера. Чтобы увидеть свою веб-страницу, запусти3.
Запуск сервер
сервера.
Чтобыс помощью
увидеть свою
веб-страницу,
запустите
те локальный
Django
команды
python manage.
py runserver.
Затем
откройте
браузер
и перейдите
на адрес runserver.
http://
локальный
сервер
Django
с помощью
команды
python manage.py
localhost:8000
(или другой
порт,на
если
выhttp://localhost:8000
указали другой порт
Затем
откройте браузер
и перейдите
адрес
(или при
другой
запуске сервера).
Создание веб-страницы в Django – это процесс создания инСоздание веб-страницы в Django – это процесс создания интерфейса
терфейса пользователя, который отображается в веб-браузере.
пользователя,
который
отображается
в веб-браузере.
Django это
делается с
В Django это
делается
с помощью
шаблонов,Вкоторые
содержат
помощью
шаблонов, которые
содержат
HTML-разметку, CSS-стили и JavaScriptHTML-разметку,
CSS-стили
и JavaScript-скрипты.
Для создания веб-страницы в Django нужно сделать следующее.
скрипты.
• Создать
файл шаблона
в папке
templates
вашего приДля
созданияновый
веб-страницы
в Django нужно
сделать
следующее.
ложения. Например, вы можете создать файл home.html, который
Создать новый файл шаблона в папке templates вашего приложения.
будет содержать HTML-разметку для вашей главной страницы.
Например, вы можете создать файл home.html, который будет содержать HTMLвашего
• Создать
Создатьфункцию
функцию представления
представления в вфайле
файлеviews.py
views.py
вашего
разметку
для вашей
главной страницы.
приложения.
Функция
представления
определяет,
какой
контент
приложения. Функция представления определяет, какой контент будет
будет отображаться на странице. Например, вы можете создать
отображаться на странице. Например, вы можете создать функцию
функцию представления home, которая будет отображать вашу
представления home, которая будет отображать вашу главную страницу.
главную страницу.
• Подключить
Подключитьшаблон
шаблонк кфункции
функциипредставления.
представления. Чтобы
Чтобы функфункция
представления
знала, какой
шаблон
использовать
для отображения
страницы,
ция представления
знала,
какой
шаблон использовать
для отображения
страницы,
необходимо
добавить
имя
шаблона
в
вызов
необходимо добавить имя шаблона в вызов функции render (рис. 64). функции render (рис. 64).
порт, если вы указали другой порт при запуске сервера).
Рис. 64.
64. Подключение
Подключение шаблона
шаблона кк функции
Рис.
функции представления
представления
141
Создать маршрут в файле
urls.py
вашего приложения. Маршрут
определяет, какой URL будет отображаться, какая функция представления будет
Рис. 64. Подключение шаблона к функции представления
• Создать
Создатьмаршрут
маршрутв файле
в файлеurls.py
urls.py
вашегоприложения.
приложения. МаршМаршрут
вашего
рут определяет,
какой
будет отображаться,
какая функция
определяет,
какой URL
будет URL
отображаться,
какая функция представления
будет
представления
Например,
чтобы создать
маршрут
вызвана.
Например, будет
чтобы вызвана.
создать маршрут
для отображения
главной
страницы
для отображения
главной
страницы
вашего
сайта,
можете
добавашего
сайта, вы можете
добавить
следующий
код (рис.
65)вы
в файл
urls.py.
вить следующий код (рис. 65) в файл urls.py.
Рис.
Рис. 65.
65. Создание
Создание маршрута
маршрута
Здесь path (‘’, views.home, name=’home’) указывает на вызов
Здесь path
('', views.home,
name='home')
указывает
вызов функции
home
функции
home
в файле views.py
при переходе
нанаглавную
страницу
в файле
views.py
переходе на –
главную
страницу
вашего
сайта.вы
name='home'
вашего
сайта.при
name=’home’
это имя
маршрута,
которое
може– это
имя маршрута,для
которое
вы можете
использовать
для генерации URLте использовать
генерации
URL-адресов
в шаблонах.
адресов•вЗапустить
шаблонах. сервер, чтобы увидеть свою веб-страницу. Чтобы
увидеть свою веб-страницу, запустите локальный сервер Django
Запустить сервер, чтобы увидеть свою веб-страницу. Чтобы увидеть
с помощью команды python manage.py runserver. Затем откройте
свою веб-страницу, запустите локальный сервер Django с помощью команды
браузер и перейдите на адрес http://localhost:8000 (или другой порт,
python
Затем
и перейдите на адрес
если manage.py
вы указалиrunserver.
другой порт
приоткройте
запуске браузер
сервера).
Создание веб-страницы в Django включает в себя не только
создание шаблона и функции представления, но и другие задачи,
такие как настройка статических файлов (например, CSS-стилей
и JavaScript-скриптов), использование форм и обработка данных,
валидация данных и многое другое. Однако эти шаги могут быть
выполнены по мере необходимости в соответствии с вашими потребностями в разработке веб-страницы.
Шаблоны веб-страниц в Python – повторно используемые блоки HTML-кода, которые позволяют создавать динамические
веб-страницы. Шаблоны – это файлы, которые определяют, как
информация должна быть представлена на веб-странице в Django.
Они содержат HTML-разметку и специальные теги и фильтры
Django, которые позволяют вставлять динамические данные
в HTML-шаблон. Использование шаблонов позволяет разделять
логику приложения и представление данных на веб-странице,
упрощая разработку и поддержку кода.
142
разделять логику приложения и представление данных на веб-странице,
упрощая разработку и поддержку кода.
Шаблоны Django состоят из HTML-кода и специальных тегов шаблонного
Django состоят
и специальных
языка,Шаблоны
которые позволяют
включатьизв HTML-кода
шаблон динамические
данные тегов
и другие
шаблонного языка, которые позволяют включать в шаблон динамические данные и другие элементы.
Рассмотрим несколько наиболее распространенных тегов шаблонного
Рассмотрим несколько наиболее распространенных тегов шаязыка
Djangoязыка
и их описание.
блонного
Django и их описание.
Тег
длядля
указания
шаблона,
который
Тег {%
{% extends
extends%}
%}(рис.
(рис.66)
66)используется
используется
указания
шаблона,
который
будет
применяться
в
качестве
основы
для
текущего
шабудет применяться в качестве основы для текущего шаблона. Он позволяет
блона. Онкод
позволяет
код из другихотдельные
шаблонов
и перенаследовать
из других наследовать
шаблонов и переопределять
блоки
кода.
определять отдельные блоки кода.
элементы.
Тег {% block %} (рис. 67) используется для определения блока кода,
который может быть переопределен в наследуемом шаблоне. Он позволяет
создавать универсальные шаблоны, которые могут быть адаптированы к
Рис. 66.
Тег {%
{%extends
extends%}
%}
Рис.
66. Тег
Тег {% block %} (рис. 67) используется для определения блока кода,
различным
страницам.
который
быть
в наследуемом
шаблоне. Он блока
позволяет
Тег может
{% block
%}переопределен
(рис. 67) используется
для определения
кода, который
может быть
переопределен
наследуемом
шаблоне. к
создавать
универсальные
шаблоны,
которые вмогут
быть адаптированы
Он
позволяет
создавать
универсальные
шаблоны,
которые
могут
различным страницам.
быть адаптированы к различным страницам.
Рис. 67. Тег {% block %}
Тег {{ переменная }}Рис.
(рис.
68)
используется
для включения значения
Рис.
67. Тег
Тег{%
{%
block%}
%}
67.
block
переменной в шаблон. Значение переменной может быть получено из
Тег {{ переменная }} (рис. 68) используется для включения знаТег {{ переменная }} (рис. 68) используется для включения значения
представления.
чения
переменной в шаблон. Значение переменной может быть попеременной
в шаблон. Значение переменной может быть получено из
лучено из представления.
представления.
Рис.
переменная
Рис.68.
68. Тег
Тег {{{{переменная
}} }}
Тег {% for %} (рис. 69) используется для создания цикла, который
Тег {% for %} (рис.
для }}
создания цикла, коРис.69)
68.используется
Тег {{ переменная
повторяет
определенный
блок
кода
для
каждого
элемента
в списке.
торый
повторяет
определенный
блок
кода
для
каждого
элемента
Тег {% for %} (рис. 69) используется для создания
цикла,
который
в списке.
Тег {% if %} (рис. 70) используется для создания условия, которое
определяет, будет ли определенный блок кода включен в шаблон.
повторяет определенный блок кода для каждого элемента в списке.
143
Рис. 69. Тег {% for %}
Рис. 69. Тег {% for %}
Тег {% for %} (рис. 69) используется для создания цикла, который
повторяет определенный блок кода для каждого элемента в списке.
Рис. 69. Тег {% for %}
Тег {% if %} (рис. 70) используется для создания условия, которое
Рис. 69.блок
Тег кода
{% for
%}
определяет, будет ли определенный
в шаблон.
Рис. 69. Тег {%
for включен
%}
Тег {% if %} (рис. 70) используется для создания условия, которое
определяет, будет ли определенный блок кода включен в шаблон.
Рис.
Тег{%
{%if %}
if %}
Рис. 70.
70. Тег
При
использовании шаблонов важно следить за тем, чтобы
При использовании шаблонов важно следить за тем, чтобы не усложнять
Рис. 70.
Тег {% иifубедиться,
%}
не усложнять код ненужными
деталями
что код остаеткод ненужными деталями и убедиться, что код остается легко читаемым и
ся легко читаемым и поддерживаемым.
поддерживаемым.
Рассмотрим пример программного кода, демонстрирующего
Рассмотрим
пример
программного
кода,
демонстрирующего
использование шаблонов Django. Есть модель BlogPost, которая
использование шаблонов Django. Есть модель BlogPost, которая представляет
представляет статью блога, и нужно отобразить список статей блога
статью блога, и нужно отобразить список статей блога на странице с помощью
на странице с помощью шаблона. Для этого можно использовать
шаблона. Для этого можно использовать следующий код файла views.py,
следующий код файла views.py, представленный в табл. 2.
представленный в табл. 2.
Таблица 2
Использование
шаблонов
Использование шаблонов
views.py
from django.shortcuts import render
from .models import BlogPost
def blog_post_list(request):
posts = BlogPost.objects.all()
context = {'posts': posts}
return render(request,
'blog_post_list.html', context)
Таблица 2
blog_post_list.html
{% extends 'base.html' %}
{% block content %}
<h1>Blog Posts</h1>
<ul>
{% for post in posts %}
<li><a href="{% url 'blog_post_detail' post.pk
%}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}
Эта
представления
получает
все объекты
Этафункция
функция представления
получает
все объекты
BlogPost BlogPost
из базы
изданных
базы данных
и
передает
их
в
шаблон.
Затем
она
возвращает
ответ
и передает их в шаблон. Затем она возвращает ответ с использованием
render(), который отображает шаблон blog_post_list.html с переданным
контекстом.
144
Этот шаблон наследует базовый шаблон base.html и определяет блок
content, который содержит заголовок страницы и список статей блога. Тег {%
с использованием render(), который отображает шаблон blog_post_
list.html с переданным контекстом.
Этот шаблон наследует базовый шаблон base.html и определяет блок content, который содержит заголовок страницы и список
статей блога. Тег {% for %} используется для итерации по каждому объекту BlogPost в переданном контексте и создания ссылки
на каждую статью блога. В результате при обращении к странице,
связанной с функцией представления blog_post_list, будет отображаться
список статей блога, полученных из базы данных, в соотбудет отображаться список статей блога, полученных из базы данных, в
ветствующем шаблоне.
соответствующем шаблоне.
Рассмотрим пример создания страницы «О нас» с использоваРассмотрим пример создания страницы «О нас» с использованием
нием шаблона в Django. Нужно создать страницу «О нас», на котошаблона в Django. Нужно создать страницу «О нас», на которой хотим
рой хотим отобразить информацию о нашей компании. Для этого
отобразить информацию о нашей компании. Для этого можно использовать
можно использовать следующий код, представленный в табл. 3 для
следующий код, представленный в табл. 3 для файла views.py.
файла views.py.
Таблица 3
Шаблон
для создания страницы «О нас»
Шаблон для создания страницы «О нас»
views.py
Таблица 3
about.html
from django.shortcuts import render
{% extends 'base.html' %}
def about(request):
company_name = 'My Company'
company_description = 'We are a company that does
things.'
context = {'company_name': company_name,
'company_description': company_description}
return render(request, 'about.html', context)
{% block content %}
<h1>About
{{
company_name
}}</h1>
<p>{{ company_description }}</p>
{% endblock %}
Эта
определяет
переменные
company_
Этафункция
функция представления
представления определяет
переменные
company_name
и
name
и company_description,
которые
содержатоинформацию
о наcompany_description,
которые содержат
информацию
нашей компании,
и
шей
компании,
и передает
их возвращает
в шаблон.ответ
Затем
она возвращает
ответ
передает
их в шаблон.
Затем она
с использованием
render(),
скоторый
использованием
render(),
который
отображает
шаблон about.html
отображает шаблон
about.html
с переданным
контекстом.
с переданным
контекстом.
В данном примере были использованы шаблоны Django для создания
В данном примере были использованы шаблоны Django для
статической веб-страницы, которая отображает информацию о нашей компании.
создания статической веб-страницы, отображающей информаМы определили функцию представления, которая передает информацию о
цию о нашей компании. Мы определили функцию представления,
компании в шаблон, где используем теги шаблонного языка Django для
которая передает информацию о компании в шаблон, где используотображения этой информации. В итоге получаем статическую страницу,
которая отображает предопределенную информацию.
145
Рассмотрим пример создания списка пользователей с использованием
шаблона в Django. Есть модель User, которая представляет пользователей
ем теги шаблонного языка Django для отображения этой информации. В итоге получаем статическую страницу, которая отображает
предопределенную информацию.
Рассмотрим пример создания списка пользователей с использованием шаблона в Django. Есть модель User, которая представляет пользователей нашего веб-приложения, и мы хотим отображать
список
пользователей на странице с помощью шаблона. Для этостранице с помощью шаблона. Для этого можно использовать следующий код,
го можно использовать следующий код, представленный в табл. 4
представленный в табл. 4 для файла views.py.
для файла views.py.
Таблица 4
Таблица 4
Создание списка пользователей с использованием шаблона
Создание списка пользователей с использованием шаблона
views.py
user_list.html
from django.shortcuts import render
from django.contrib.auth.models import User
def user_list(request):
users = User.objects.all()
context = {'users': users}
return render(request,
context)
'user_list.html',
{% extends 'base.html' %}
{% block content %}
<h1>Users</h1>
<ul>
{% for user in users %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>
{% endblock %}
Функция представления
представления получает
все объекты
User из базы
и
Функция
получает
все объекты
Userданных
из базы
передаетиихпередает
в шаблон.их
Затем
она возвращает
с использованием
render(),
данных
в шаблон.
Затем ответ
она возвращает
ответ
с искоторый отображает
шаблонкоторый
user_list.html
с переданным
контекстом.
пользованием
render(),
отображает
шаблон
user_list.html с
переданным
Шаблон контекстом.
наследует базовый шаблон base.html и определяет блок content,
Шаблон
наследует
базовый
шаблон
base.html
и определяет
который содержит заголовок
страницы
и список
пользователей.
Тег {% forблок
%}
content,
который
содержит
заголовок
страницы
и списокконтексте
пользоваиспользуется
для итерации
по каждому
объекту
User в переданном
и
телей.
Тег
{%
for
%}
используется
для
итерации
по
каждому
объексоздания списка пользователей. В результате при обращении к странице,
тусвязанной
User в переданном
контексте и user_list,
созданиябудет
списка
пользователей.
с функцией представления
отображаться
список
Впользователей,
результате полученных
при обращении
к
странице,
связанной
с функцией
из базы данных, в соответствующем шаблоне.
представления
user_list, будет отображаться список пользователей,
В данном примере нами были использованы шаблоны Django для
полученных из базы данных, в соответствующем шаблоне.
создания динамической веб-страницы, которая отображает список
В данном примере нами были использованы шаблоны Django
пользователей
нашего
веб-приложения.
Мы
определили
функцию
для создания динамической веб-страницы, которая отображает
представления, которая получает список пользователей и передает его в
список пользователей нашего веб-приложения. Мы определили
шаблон, где используем теги шаблонного языка Django для создания списка
пользователей. В итоге получаем динамическую страницу, которая отображает
актуальную информацию из базы данных.
146
функцию представления, которая получает список пользователей
и передает его в шаблон, где используем теги шаблонного языка
Django для создания списка пользователей. В итоге получаем динамическую страницу, которая отображает актуальную информацию
из базы данных.
Тема 5. Базы данных и ORM
База данных в Python
Python – высокоуровневый язык программирования, который позволяет работать с базами данных (БД) различных типов.
Для внесения изменений в БД в Python необходимо использовать
библиотеки, которые предоставляют соответствующие инструменты для работы с БД.
База данных в Python – это организованная коллекция данных,
которую можно хранить, обрабатывать и извлекать в программе
на языке Python.
Базы данных используются для хранения, управления и обработки информации. Базы данных используются для хранения информации в виде таблиц, которые содержат различные типы данных, такие как числа, строки, даты и другие.
Python поддерживает несколько типов баз данных, таких как
реляционные БД (например, MySQL, PostgreSQL, SQLite), NoSQL
БД (например, MongoDB, Cassandra, Redis) и другие. Каждый тип
базы данных имеет свои особенности и преимущества, и выбор зависит от требований конкретного проекта.
База данных в Python – мощный инструмент, который позволяет хранить и управлять большими объемами структурированных
данных, а также обеспечивает быстрый доступ к информации, что
делает ее необходимой для многих типов приложений и проектов.
В Python существует множество библиотек и фреймворков для
работы с базами данных, от простых SQLite и MySQL до мощных
PostgreSQL и MongoDB. Библиотеки для работы с базами данных
в Python предоставляют удобный API для выполнения запросов
к базам данных и обработки результатов.
147
В Python для работы с базами данных используются различные библиотеки, наиболее популярные из которых – SQLAlchemy,
устанавливать
соединение
с базой данных,
создавать,
изменять
удалять
Django ORM,
psycopg2, PyMySQL,
Peewee,
Pony ORM,
sqlite3 ии друтаблицы,
выполнять
запросы
и получать
данные из сбазы
данных.
Поддержка
гие.
Они
позволяют
устанавливать
соединение
базой
данных,
созустанавливать соединение с базой данных, создавать, изменять и удалять
давать,
изменять и удалять
таблицы,
выполнять
запросы
иболее
получать
Python
ORM-библиотек
позволяет
работать
с
базами
данных
на
высоком
таблицы, выполнять запросы и получать данные из базы данных. Поддержка
данные
из базы данных.
Поддержка Python
ORM-библиотек
позвоуровне
представляя
в виде
записей
в базе
Pythonабстракции,
ORM-библиотек
позволяет объекты
работать спрограммы
базами данных
на более
высоком
ляет работать с базами данных на более высоком уровне абстракданных
и наоборот.
уровне
абстракции, представляя объекты программы в виде записей в базе
ции, представляя объекты программы в виде записей в базе данных
данных
наоборот.с БД в Python необходимо использовать специальные
Для иработы
и наоборот.
Для
работы предоставляют
с БД в Python соответствующие
необходимо использовать
специальные
библиотеки,
которые
инструменты
для работы
Для работы
с БД в Python необходимо
использовать
специальбиблиотеки,
которые
предоставляют
соответствующие
инструменты
для
работы
с БД.
ные библиотеки, которые предоставляют соответствующие инструс БД. для работы с БД.
менты
Общий подход к работе с БД в Python включает выполнение нескольких
Общийподход
подход кк работе
с БД в Python включает выполнение нескольких
Общий
взаимосвязанных
шагов. работе с БД в Python включает выполнение невзаимосвязанных
шагов.
скольких
взаимосвязанных
шагов.
Первый шаг – подключение к БД. Для этого нужно использовать
Первый шаг
шаг –
– подключение
подключение к кБД.
этого
нужно
использовать
Первый
БД.Для
Для
этого
нужно
испольсоответствующий драйвер для работы с конкретной БД и создать соединение с
соответствующий
драйвер для драйвер
работы с конкретной
БД и ссоздать
соединениеБД
с
зовать
соответствующий
для работы
конкретной
БД,
используя
учетные
данные
для
доступа к учетные
БД(рис.
(рис.
71).
иБД,
создать
соединение
с БД,
используя
используя
учетные данные
для
доступа к БД
71).данные для доступа
к БД (рис. 71).
Рис.
71.Соединение
Соединение
SQLite-БД,
используя
модуль
sqlite3
Рис.
71.
сс SQLite-БД,
используя
модуль
sqlite3
Рис. 71.
Создание
соединения
с SQLite-БД,
используя
модуль
sqlite3
Второй
шаг
–
создание
таблиц
и
полей
в
БД.
Для
этого
нужно
выполнить
Второй шаг – создание таблиц и полей в БД. Для этого нужно выполнить
Второй шаг – создание таблиц и полей в БД. Для этого нужно
SQL-запросы для создания таблиц и полей в БД. В примере (рис. 72) мы
SQL-запросы
создания таблиц
и полейтаблиц
в БД. иВполей
примере
(рис.
72) мы
выполнить для
SQL-запросы
для создания
в БД.
В прииспользуем метод cursor() для создания курсора, который позволяет выполнить
используем
метод
cursor()
для создания
курсора,
который
позволяет
выполнить
мере (рис.
72) мы
используем
метод
cursor()
для создания
курсора,
SQL-запрос в БД, и метод execute() для выполнения SQL-запроса для создания
который позволяет
выполнить
SQL-запрос
в БД,
и метод для
execute()
SQL-запрос
в БД, и метод
execute() для
выполнения
SQL-запроса
создания
таблицы users в БД.
для выполнения
таблицы
users в БД. SQL-запроса для создания таблицы users в БД.
Рис.72.
72.Создание
Создание таблицы
Рис.
таблицы
Рис. 72. Создание таблицы
148
выполнить SQL-запросы для добавления, изменения или удаления данных в
таблицах БД. В примере (рис. 73) мы используем метод execute() для
Третий шаг – внесение изменений в таблицы БД. Для этого нужно
выполнения SQL-запроса для добавления нового пользователя в таблицу users в
Третий SQL-запросы
шаг – внесение
изменений
в таблицы
БД. Дляданных
этогов
выполнить
для добавления,
изменения
или удаления
БД.
нужно
выполнить
SQL-запросы
изменения
таблицах
БД. В примере
(рис. 73)для
мы добавления,
используем метод
execute()или
для
удаления
данных
в
таблицах
БД.
В
примере
(рис.
73)
мы
испольвыполнения SQL-запроса для добавления нового пользователя в таблицу users в
зуем метод execute() для выполнения SQL-запроса для добавления
БД.
нового пользователя в таблицу users в БД.
Рис. 73. Внесение изменений в таблицу
Рис.
73.
Внесениеизменений
изменений в таблицу
таблицу
Рис.
Внесение
Четвертый шаг
–73.
получение
данных из втаблиц
БД. Для этого нужно
выполнить
SQL-запросы
выборкиданных
данных из
из таблиц
таблиц БД.
примере
Четвертый
шаг – для
получение
БД.ВДля
этого(рис.
Четвертый шаг – получение данных из таблиц БД. Для этого нужно
нужно
выполнитьметод
SQL-запросы
длявыполнения
выборки данных
из таблиц
БД.
74)
мы используем
execute() для
SQL-запроса
для выборки
выполнить SQL-запросы для выборки данных из таблиц БД. В примере (рис.
В примере
(рис.
74) мы
используем
метод
execute()
выполнения
всех
данных из
таблицы
users
в БД, и метод
fetchall()
для для
получения
всех строк,
74) мы используем метод execute() для выполнения SQL-запроса для выборки
SQL-запроса для выборки всех данных из таблицы users в БД, и метод fetchall() для получения всех строк, соответствующих запросу.
соответствующих
запросу.users в БД, и метод fetchall() для получения всех строк,
всех данных из таблицы
соответствующих запросу.
Рис.
Рис.74.
74.Получение
Получениеданных
данных
Рис. 74. Получение данных
Пятый шаг – закрытие соединения с БД. Для этого нужно исПятый шаг
– закрытие
соединения
БД. Для этогос БД.
нужно использовать
пользовать
метод
close() для
закрытияс соединения
Пятый шаг – закрытие соединения с БД. Для этого нужно использовать
образом,
работа
с БД вс БД.
Python предполагает использометодТаким
close() для
закрытия
соединения
метод close() для закрытия соединения с БД.
вание соответствующих библиотек для работы с БД, создание соединения с БД, выполнение SQL-запросов для создания таблиц
и полей, внесения изменений в таблицы БД, получения данных
из таблиц БД и закрытия соединения с БД. Важно следовать правильной практике и проводить тестирование перед работой с БД,
чтобы избежать проблем в работе приложения.
149
таблицы БД, получения данных из таблиц БД и закрытия соединения с БД.
Важно следовать правильной практике и проводить тестирование перед работой
с БД, чтобы избежать проблем в работе приложения.
Модели в Django
Модели в Django
Модели – это объектно-реляционное отображение (ORM), коМодели – это объектно-реляционное отображение (ORM), которое
торое позволяет определить структуру базы данных приложения.
позволяет определить структуру базы данных приложения. Модели могут
Модели могут содержать поля, методы и другие свойства, которые
содержать поля, методы и другие свойства, которые определяют, как данные
определяют, как данные будут храниться и взаимодействовать с бабудут
храниться и взаимодействовать с базой данных.
зой данных.
Модели вв Django
классы
Python,
которые
определяют
структуру
Модели
Django– –этоэто
классы
Python,
которые
определяют
структуру
таблиц
в Они
базеиспользуются
данных. Они
дляв хранения
таблиц
в базе
данных.
дляиспользуются
хранения данных
приложениях
данныхКаждый
в приложениях
Django.
атрибут
класса
модели
Django.
атрибут класса
моделиКаждый
представляет
собой поле
таблицы
в базе
представляет
собой
поле
таблицы
в
базе
данных,
а
каждый
экземданных, а каждый экземпляр класса модели представляет отдельную запись в
пляр класса модели представляет отдельную запись в этой таблице.
этой таблице.
Модели в Django включают в себя поля (поля), которые опредеМодели в Django включают в себя поля (поля), которые определяют
ляют атрибуты данных. Например, целое поле CharField представатрибуты
данных.
Например,
поле
CharField представляет
собой
состав
ляет собой
состав
текста,целое
а поле
IntegerField
представляет
собой
текста,
поле IntegerField
представляет
собой число.
Также позволяют
используются
число. аТакже
используются
модели методов,
которые
модели
методов,
которые
позволяют
работать с данными базы данных.
работать
с данными
базы
данных.
Чтобы
создатьмодель
модель
в Django,
нужно
создать
класс, насле- от
Чтобы создать
в Django,
нужно
создать
класс, наследующийся
дующийся
от
класса
models.Model.
Каждый
класс
модели
класса models.Model. Каждый класс модели должен иметь атрибутыдолжен
и методы,
иметь
атрибуты
и
методы,
которые
соответствуют
структуре
данкоторые соответствуют структуре данных объекта.
ных объекта.
Пример создания модели представлен на рис. 75.
Пример создания модели представлен на рис. 75.
Рис.
Рис.75.
75.Пример
Примерсоздания
созданиямодели
модели
В данном примере мы создали модель User, которая имеет четыре поля: id, username, password и email. Также модель имеет метаданные, которые используются для настройки модели. Метаданные
определяют название модели и ее название во множественном числе.
Созданную модель можно использовать в приложении Django.
Например, можно создать объект модели User и сохранить его в базе
данных (рис. 76). При сохранении объекта в базу данных Django автоматически создает уникальный идентификатор (id) для объекта.
150
сохранении объекта в базу данных Django автоматически создает уникальный
идентификатор (id) для объекта.
идентификатор (id) для объекта.
Рис.
76.76.Создание
и сохранение
объекта
Рис.76.
Созданиеиисохранение
сохранение объекта
Рис.
Создание
объекта
Модели
в
Django
используются
в
приложениях
работы сс базой
базой
Модели в Django используются в приложениях для
для работы
Модели в Django используются в приложениях для работы
данных.
Они
позволяют
определить
хранятся ввбазе
базе
данных.
Они
позволяют
определитьструктуру
структуруданных,
данных, которые
которые хранятся
с базой данных. Они позволяют определить структуру данных, ко-
данных,
также
методы
для
работы
данными.
используются
данных,
а также
методы
для
работысасшестью
шестью
данными.
Модели
торыеа хранятся
в базе
данных,
также
методы
дляМодели
работыиспользуются
с шестью
длядля
создания,
чтения,
обновления
и иудаления
данных
данных.
создания,
чтения,
обновления
удаления
данных вв базе
базе
данных.
данными.
Модели
используются
для создания,
чтения,
обновления
При
определении
ее поля
полясвязи
связиии
и удаления
данныхмодели
вмодели
базе вданных.
При
определении
вDjango
Djangoнеобходимо
необходимо определить
определить ее
При
определении
модели
в
Django
необходимо
определить
метаданные,
такие
имятаблицы
таблицыв вбазе
базеданных,
данных, настройки
настройки для
метаданные,
такие
каккак
имя
для сортировки,
сортировки,
ее
поля
связи
и
метаданные,
такие
как
имя
таблицы
в
базе
фильтрации
рис.7777представлен
представлен пример
пример определения
определения данных,
модели
фильтрации
и ит. т.д. д.НаНарис.
модели вв
настройки
для
сортировки,
фильтрации
и
т.
д.
На
рис.
77
представDjango.
Django.
лен пример определения модели в Django.
Рис. 77. Пример определения модели в Django
Рис.
Рис.77.
77. Пример
Примеропределения
определениямодели
моделиввDjango
Django
Здесь видна модель книги с полями: название, автор, дата издания и когда опубликовано. Поля title и author определены как
CharField, publish_date как DateField и is_published как BooleanField.
Также определен метод str (), который возвращает строковое представление объекта.
Модели в Django являются основой для работы с базой данных
во многих приложениях. Они позволяют определить структуру данных и методы для работы с ними, что позволяет развивать приложения и улучшать производительность при работе с базой данных.
Модели Django обычно встречаются в файле models.py, который
находится внутри приложений Django. Каждая модель представляет
собой отдельную таблицу в базе данных и содержит поля, которые
определяют структуру структуры. За счет использования моделей
Django можно не только определить структуру данных, но и выде 151
лить ограничения на данные, хранящиеся в ней, задавать отношения
между таблицами, а также создавать методы для работы с данными.
Кроме того, модели Django используют интеграцию с ORM
(Object-Relational Mapping), что позволяет работать с данными
в базе данных, используя объекты Python, а не SQL-запросы. ORM
позволяет упростить работу с базовыми данными, сделать более читаемым и легко обнаруживаемым.
Рассмотрим пример программы на языке Python, работающей
с шаблонами в Django. Программа представляет собой отдельный
блог, в котором пользователи создают посты и размещают комментарии к ним. Для этого создадим две модели: «Пост» и «Комментарий».
Для модели «Пост» определим поля:
– титул (заголовок поста);
– содержание (текст поста);
– автор (автор поста);
– created_at (дата создания поста).
Для модели «Комментарий» определим поля:
– post (ссылка на пост, к этой оставленный комментарий);
– автор (автор комментария);
– контент (текст комментария);
– created_at (дата создания комментария).
На рис. 78 представлен программный код, демонстрирующий
описание создаваемых моделей.
Здесь представлены две модели: «Пост» и «Комментарий».
Каждая модель наследуется от класса models.Model. Поля моделей
зависят от классов CharField, TextFieldи DateTimeField. Также мы
определили отношение «один-ко-многим» между шаблонами Post
and Comment, используя поле ForeignKey. Это означает, что каждый
пост может иметь несколько связанных комментариев, но каждый
комментарий относится только к одному посту. В методе __str__
определили, что будет показано при выводе объектов модели
в консоль. Для модели «Пост» будет выводиться ее заголовок, а для
модели «Комментарий» будет выводиться имя автора и заголовок
поста, к которой оставлен комментарий.
152
На рис. 78 представлен программный код, демонстрирующий описание
создаваемых моделей.
Рис.78.
78.Описание
Описание моделей
моделей
Рис.
Здесь представлены две модели: «Пост» и «Комментарий». Каждая
модель наследуется от класса models.Model.
ORM DjangoПоля моделей зависят от классов
CharField, TextFieldи DateTimeField. Также мы определили отношение «один-ко-
Для работы с данными в базе данных используется ORM
многим»
шаблонами
Post and Comment,
используя
полеупрощающих
ForeignKey. Это
Django, между
который
предоставляет
множество
методов,
означает,
что и
каждый
пост может
несколько
связанных
комментариев,
написание
понимание
кода.иметь
Кроме
того, ORM
автоматически
ге-но
нерирует
SQL-запросы
для операций
базой данных,
снижает
каждый
комментарий
относится
только к содному
посту. В что
методе
__str__
вероятность
и ускоряет
процесс
разработки.
определили,
чтоошибок
будет выводиться
при
выводе объектов
модели в консоль. Для
ORM
(Object-Relational
Mapping)
в Django
высокоуровневый
модели
«Пост»
будет выводиться
ее заголовок,
а для–модели
«Комментарий»
интерфейс для работы с базой данных, который позволяет работать с данными в объектно ориентированном стиле. ORM Django
комментарий.
позволяет избежать написания SQL-запросов на языке баз данных
и вместо этого предоставляет набор методов для работы с данными.
ORM (Object-Relational
Django
ORM
Mapping) – это библиотека, которая позволяет абстрагироваться от физической реализации базы данных
и работать с объектами в памяти, а не с таблицами в базе данных.
В Python есть несколько ORM-библиотек, которые можно использовать для работы с базами данных. Рассмотрим некоторые
из наиболее популярных ORM-библиотек в Python:
– SQLAlchemy – одна из самых популярных ORM-библиотек для Python. Она позволяет работать с различными типами
баз данных, такими как MySQL, PostgreSQL, Oracle и другими.
будет выводиться имя автора и заголовок поста, к которой оставлен
153
SQLAlchemy предоставляет мощные функции для работы с запросами, представлениями и транзакциями.
– Django – это ORM-библиотека, входящая в состав фреймворка Django для веб-разработки на Python, который также поддерживает ORM. Она позволяет работать с базой данных, используя
модели Django, которые являются классами Python, связанными
с таблицами базы данных.
– Pyramid – еще один фреймворк для разработки веб-приложений на Python. Pyramid также поддерживает ORM и позволяет
создавать приложения с использованием модульной архитектуры.
– Flask – микрофреймворк для создания веб-приложений
на Python, который также имеет поддержку ORM. Flask позволяет
создавать быстрые и масштабируемые приложения.
– Peewee – минималистичная ORM-библиотека для Python, которая поддерживает реляционные базы данных, такие как SQLite,
MySQL и PostgreSQL.
Выбор конкретной ORM-библиотеки зависит от потребностей
и требований проекта. Каждая из них имеет свои преимущества
и недостатки, и выбор зависит от того, какие функции и возможности необходимы для конкретного проекта.
Для работы с базой данных, связанной с моделью данных, необходимо создать менеджер объекта для этой модели. Методы менеджера объектов модели в Django представляют собой функции,
которые могут быть вызваны на менеджере объектов модели, чтобы выполнить определенные действия или получить информацию
о выбранных объектах модели.
Django предоставляет различные методы для работы с данными, такие как:
– метод all(). Получение всех объектов модели. В коде (рис. 79)
мы импортируем модель MyModel из модуля models приложения myapp. Затем вызываем метод all() на менеджере объектов
MyModel.objects, чтобы получить все объекты модели MyModel,
которые хранятся в базе данных. Результат вызова метода all() – это
QuerySet-объект, который представляет собой запрос к базе данных, выбирающий все объекты модели MyModel из базы данных.
QuerySet-объект может быть использован для выполнения допол 154
QuerySet-объект может быть использован для выполнения дополнительных
операций, таких как фильтрация, сортировка или ограничение количества
выбранных
записей;
нительных
операций, таких как фильтрация, сортировка или ограничение количества выбранных записей;
объектов MyModel.objects, чтобы получить объекты модели MyModel, у
которых значение поля name Рис.
равно
Результат
вызова метода filter() – это
Рис. 79.
79.'John'.
Метод
all()
Метод
all()
QuerySet-объект,
который
представляет
собоймодели,
запрос
к базеудовлетворяющих
данных, который
метод filter().
объектов
удовлетворяющих
- – метод
filter().Получение
Получение
объектов
модели,
определенному
условию.
кодеу(рис.
мы
импортируем
модель
выбирает
объекты
модели
которых
значение
поля
name
равно 'John'.
определенному
условию.
В MyModel,
кодеВ(рис.
80)
мы80)
импортируем
модель
MyModel
из
MyModel
из
модуля
models
приложения
myapp.
Затем
вызываем
ме- у
объектов
MyModel.objects,
чтобы
получить
объекты
модели
MyModel,
Этот models
QuerySet-объект myapp.
может Затем
бытьвызываем
использован
для на выполнения
модуля
методчтобы
filter()
менеджере
тод filter()приложения
на менеджере объектов
MyModel.objects,
получить
которых
значение
поля
name
равно
'John'.
Результат
вызова
метода
filter()
– это
дополнительных
операций,
таких
как сортировка,
ограничение
количества
объекты модели
MyModel,
у которых
значение поля
name равно
QuerySet-объект, который представляет собой запрос к базе данных, который
‘John’. записей
Результат
методадругих
filter() фильтров;
– это QuerySet-объект, ковыбранных
иливызова
выполнение
выбирает
объекты модели
MyModel,
у которых
значениевыбирающий
поля name равно
'John'.
торый представляет
собой
запрос
к базе данных,
объЭтот
QuerySet-объект
быть
использован
екты модели
MyModel, уможет
которых
значение
поля nameдля
равновыполнения
‘John’.
Этот QuerySet-объект
может
быть
выполнения
додополнительных
операций,
таких
какиспользован
сортировка, для
ограничение
количества
полнительных
операций,
таких как
сортировка,
выбранных
записей
или выполнение
других
фильтров; ограничение колиРис.
80.выполнение
Метод filter()
чества выбранных записей
или
других фильтров;
метод
-
get().
Получение
единственного
объекта
модели,
Рис.80.
80.
Методfilter()
filter()
Рис.
Метод
удовлетворяющего определенному
условию.
В коде (рис. 81) мы импортируем
– метод get().
Получение
объектаЗатем
модели,
удов- метод
модель MyModel
из модуля
modelsединственного
приложения myapp.
вызываем
метод определенному
get(). Получение
единственного
объекта
модели,
летворяющего
условию.
В коде (рис. 81)
мы импорget() на менеджере объектов MyModel.objects, чтобы получить единственный
тируем модель MyModel
из модуля
models
приложения
myapp.
Заудовлетворяющего
определенному
условию.
В коде
(рис. 81) мы
импортируем
объект
модели
MyModel,
уget()
которого
значениеобъектов
поля name
равно 'John'. Результат
тем
вызываем
метод
на
менеджере
MyModel.objects,
модель MyModel из модуля models приложения myapp. Затем вызываем метод
вызова
метода
get() единственный
– это единственный
объект MyModel,
модели MyModel,
чтобы
получить
объект модели
у которогокоторый
get() на менеджере объектов MyModel.objects, чтобы получить единственный
значение
поля
name
равно
‘John’.
Результат
вызова
метода
удовлетворяет
определенному условию. Если объект не найденget()
или–найдено
объект модели MyModel, у которого значение поля name равно 'John'. Результат
это единственный объект модели MyModel, который удовлетвобольше
одного
объекта,
удовлетворяют
условию,
то будет который
выброшено
вызова
метода
get() – которые
это
единственный
объектне
модели
ряет определенному
условию.
Если объект
найденMyModel,
или найдено
исключение;
удовлетворяет
определенному
условию.
Если объект не
найден то
илибудет
найдено
больше одного
объекта, которые
удовлетворяют
условию,
выброшено
больше
одногоисключение;
объекта, которые удовлетворяют условию, то будет выброшено
исключение;
Рис.
get()
Рис.81.
81.Метод
Метод
get()
Рис. 81. Метод get()
метод update(). Обновление значений полей у объектов модели,
155
удовлетворяющих определенному условию. В коде (рис. 82) мы импортируем
-
-
метод update(). Обновление значений полей у объектов модели,
– метод update(). Обновление значений полей у объектов модели, удовлетворяющих определенному условию. В коде (рис. 82)
мы импортируем модель MyModel из модуля models приложеMyModel, у которых значение поля name равно 'John'. Затем вызываем метод
ния myapp. Затем вызываем метод filter() на менеджере объектов
update()у на
QuerySet-объекте,
чтобы
обновить
значение
полявызываем
age у всех
MyModel,
которых
значение
поля
name
равно
'John'.MyModel,
Затем
MyModel.objects,
чтобы выбрать
объекты
модели
у кото- метод
выбранных
объектов
30. Результат
вызова
метода
update()метод
– поля
этоupdate()
количество
рыхна
значение
полянаname
равно
‘John’.
Затем
вызываем
update()
QuerySet-объекте,
чтобы
обновить
значение
age у всех
обновленных
записей в базе
данных.
Если незначение
было выбрано
ни
одного
объекта,
на
QuerySet-объекте,
чтобы
обновить
поля
age
у
всех
вывыбранных объектов на 30. Результат вызова метода update() – это количество
бранных объектов
на 30.
вызова
метода
update() – это
удовлетворяющего
условию,
то Результат
никакие записи
не будут
обновлены;
обновленных записей в базе данных. Если не было выбрано ни одного объекта,
количество обновленных записей в базе данных. Если не было выудовлетворяющего
условию,
то никакие
записи не будут
обновлены;
брано ни одного
объекта,
удовлетворяющего
условию,
то никакие
записи не будут обновлены;
Рис. 82. Метод update()
-
Рис.
82. Метод
update()
82.
Метод
update()модели, удовлетворяющих
метод delete().Рис.
Удаление
объектов
– метод условию.
delete(). Удаление
объектов
модели, удовлетворяющих
определенному
В коде (рис.
83) мы импортируем
модель MyModel из
определенному
условию. В коде
(рис.
83) мы метод
импортируем
модуля
models
Затем
вызываем
filter()удовлетворяющих
на модель
менеджере
метод приложения
delete(). myapp.
Удаление
объектов
модели,
MyModel из модуля models приложения myapp. Затем вызываем меобъектов MyModel.objects, чтобы выбрать объекты модели MyModel, у которых
определенному
В коде
(рис. 83)MyModel.objects,
мы импортируемчтобы
модель
MyModel из
тод filter()условию.
на менеджере
объектов
выбрать
значение поля name равно 'John'. Затем вызываем метод delete() на QuerySetмодуляобъекты
models модели
приложения
myapp.у Затем
вызываем
метод
менеджере
MyModel,
которых
значение
поляfilter()
nameна
равно
объекте,
чтобы
удалить
все
выбранные
объекты
из
базы
данных.
Результат
‘John’.
Затем вызываем
метод
delete()
на QuerySet-объекте,
чтобы
объектов
MyModel.objects,
чтобы
выбрать
объекты
модели MyModel,
у которых
вызова
метода
– это количество
удаленных
записей
в базе данных.
Если
удалить
всеdelete()
выбранные
объекты из
базы данных.
Результат
вызова
значение поля name равно 'John'. Затем вызываем метод delete() на QuerySetнеметода
было выбрано
одного
объекта, удаленных
удовлетворяющего
условию,
то никакие
delete() ни
– это
количество
записей
в базе данных.
объекте,
чтобы
удалить
все
выбранные
объекты
из
базы
данных.
Результат
Если
не
было
выбрано
ни
одного
объекта,
удовлетворяющего
услозаписи не будут удалены.
то никакие
не будут удалены.
вызовавию,
метода
delete() –записи
это количество
удаленных записей в базе данных. Если
не было выбрано ни одного объекта, удовлетворяющего условию, то никакие
записи не будут удалены.
Рис. 83.
83. Метод
Метод delete()
delete()
Рис.
Методы менеджера объектов модели в Django предоставляют
Методы менеджера
объектов и
модели
в Django
предоставляют
различные
способы выборки
обработки
объектов
модели различные
в базе
данных,
что делает
работу с моделями
очень гибкой
и удобной.
способы
выборки
и обработки
объектов модели
в базе данных,
что делает
Рис. 83. Метод delete()
пример
(рис.
84) программы на Python для создаработуРассмотрим
с моделями очень
гибкой
и удобной.
нияРассмотрим
модели «Сотрудник»
и применим
методы
save() и all().
пример (рис.в Django
84) программы
на Python
для создания
модели
Методы менеджера
объектов методы
моделиsave()
в Django
"Сотрудник"
в Django и применим
и all(). предоставляют различные
способы выборки и обработки объектов модели в базе данных, что делает
работу с моделями очень гибкой и удобной.
156
Рассмотрим пример (рис. 84) программы на Python для создания модели
Рис. 84. Пример создания модели и применения методов
Рис. 84. Пример создания модели и применения методов
Для начала необходимо импортировать модуль Django и создать класс
Для начала необходимо импортировать модуль Django и создать
класс модели «Сотрудник» с помощью наследования от базового
Django django.db.models.Model. Затем нужно определить поля модели и их типы
класса модели Django django.db.models.Model. Затем нужно опредеданных.
лить поля модели и их типы данных.
этом примере
создали
модель
"Сотрудник"
с полями:
first_name
ВВ этом
примеремымы
создали
модель
«Сотрудник»
с полями:
(имя),
last_name
(фамилия),
job_title
(должность)
и salary
(зарплата). Поле
salary
first_name
(имя),
last_name
(фамилия),
job_title
(должность)
и salary
(зарплата).
Поле salary
имеет тип DecimalField
с максимальным
имеет
тип DecimalField
с максимальным
числом цифр 10
и 2 знаками после
числом
цифр
10
и
2
знаками
после
запятой.
Метод
__str__
опрезапятой. Метод __str__ определен, чтобы возвращать строковое
представление
делен, чтобы возвращать строковое представление объекта при его
объекта при его выводе в консоль или в административном интерфейсе Django.
выводе в консоль или в административном интерфейсе Django.
Метод save переопределен, чтобы проверять, что зарплата не отрицательная
Метод save переопределен, чтобы проверять, что зарплата не отперед сохранением объекта в базе данных. Для использования методов save() и
рицательная, перед сохранением объекта в базе данных. Для исall()
нужно создать
объектыsave()
модели
Django-приложении.
пользования
методов
и вall()
нужно создать объекты модели
В результате выполнения этой программы вы получите список всех
в Django-приложении.
В результате
выполнения
этой
программы
получите
объектов
"Сотрудник",
которые были
сохранены
в базевы
данных,
и их список
строковое
всех
объектов
«Сотрудник»,
которые
были
сохранены
в
базе
данпредставление, определенное в методе __str__.
ных, и их строковое представление, определенное в методе __str__.
модели "Сотрудник" с помощью наследования от базового класса модели
Миграции в Django
157
Миграции в Django
Это механизм, который позволяет автоматически создавать
и обновлять схему базы данных на основе изменений, внесенных
в модели Django. Миграции в Django используются для того, чтобы сохранить изменения в структуре базы данных и обеспечить
совместимость между моделями и базой данных. Миграции позволяют создавать, изменять и удалять таблицы и поля в базе данных,
а также управлять индексами, ограничениями и другими аспектами
базы данных. Миграции создаются на основе изменений в моделях Django. Каждый раз, когда нами вносятся изменения в модель,
Django автоматически создает новую миграцию, которую можно
применить к базе данных. Миграции хранятся в папке migrations
внутри каждого приложения Django.
Каждая миграция представляет собой изменение базы данных
в виде Python-кода, который Django может автоматически применить к базе данных. Код миграции описывает, как изменить
структуру базы данных, добавляя, изменяя или удаляя таблицы,
поля или индексы. Эти миграции создаются с помощью команды
makemigrations из утилиты управления Django.
Миграции в Django позволяют разработчикам легко изменять
структуру базы данных, не переживая о том, что они случайно
потеряют данные. Миграции также позволяют разработчикам работать с базой данных в команде, обмениваясь миграциями, чтобы каждый мог применить изменения к своей локальной копии
базы данных.
Миграции в Django – это система управления схемой базы данных, которая позволяет автоматически создавать, изменять и удалять таблицы и поля в базе данных в соответствии с изменениями
в моделях Django. Это делает процесс разработки приложений более гибким и удобным, позволяя сохранять изменения в базе данных вместе с изменениями в коде приложения.
Процесс создания миграций в Django включает несколько шагов.
• Определение моделей Django. Создайте модели Django, которые будут представлять таблицы в базе данных. Модели определяются в файле models.py внутри Django-приложения и могут со-
158
держать поля с различными типами данных, такими как CharField,
IntegerField, BooleanField и т. д.
• Создание миграции. Создайте миграцию с помощью команды python manage.py makemigrations в консоли. Эта команда создаст
файл миграции в папке migrations внутри Django-приложения.
В этом файле определены изменения в базе данных, которые нужно выполнить, чтобы привести ее в соответствие с определенными
моделями.
• Применение миграции. Примените миграцию с помощью
команды python manage.py migrate в консоли. Эта команда применяет изменения, определенные в файле миграции, к базе данных.
После выполнения этой команды таблицы и поля, определенные
в моделях, будут созданы в базе данных.
• Проверка базы данных. Проверьте базу данных, чтобы убедиться, что таблицы и поля были созданы правильно. Можно использовать административный интерфейс Django или инструменты
для работы с базой данных, такие как SQL-клиенты или команды
для работы с базой данных.
• Изменение моделей и создание новых миграций. Если нами
внесены изменения в модели Django, которые требуют изменения
базы данных, нужно создать новую миграцию и применить ее, используя те же команды, рассмотренные ранее. Django автоматически определит изменения в моделях и создаст миграцию, которая
изменит базу данных в соответствии с ними.
Для более подробного объяснения миграций в Django рассмотрим пример, работу которого опишем пошагово.
Первый шаг. Определение модели Django (рис. 85). Допустим,
у нас есть Django-приложение blog, и нужно создать модель Post для
хранения постов блога в базе данных. Для этого нужно определить
модель в айле models.py внутри приложения.
Рис.
Рис.85.
85.Определение
Определениемодели
модели
159
Второй шаг. Создание миграции (рис. 86). Чтобы создать миграцию для
этой модели, выполним команду python manage.py makemigrations blog в
Рис. 85. Определение модели
Второй
шаг.Создание
Создание
миграции
86). Чтобы
миВторой шаг.
миграции
(рис.(рис.
86). Чтобы
создатьсоздать
миграцию
для
грацию
длявыполним
этой модели,
команду
python manage.
этой
модели,
команду выполним
python manage.py
makemigrations
blog в
py
makemigrations
blog
в
консоли.
blog
здесь
–
название
вашего
консоли. blog здесь – название вашего Django-приложения. Эта команда создаст
Django-приложения. Эта команда создаст файл миграции в папке
файл миграции в папке migrations внутри приложения.
migrations внутри приложения.
Рис. 86. Создание миграции
Рис. 86. Создание миграции
Третий шаг. Применение миграции. Чтобы применить миграцию и создать
Третий шаг. Применение миграции. Чтобы применить миграцию и создать таблицу Post в базе данных, выполним команду
консоли. Эта команда применит все отложенные миграции в приложении blog,
python manage.py migrate blog в консоли. Эта команда применит все
включая
новую миграцию
создания таблицы
Post.
отложенные
миграциидля
в приложении
blog,
включая новую миграЧетвертый
шаг.
Проверка
базы
данных.
После
выполнения миграции
цию для создания таблицы Post.
можно
проверить базу
и убедиться,
таблицаПосле
'Post' была
создана. Для
Четвертый
шаг.данных
Проверка
базы что
данных.
выполнения
миграции
проверить
базу данных и убедиться,
что таблица
этого
можноможно
использовать
административный
интерфейс Django,
чтобы
‘Post’
была
создана.
Для
этого
можно
использовать
административпросмотреть таблицы базы данных.
ный Пятый
интерфейс
Django, чтобы
просмотреть
базы данных.
шаг. Изменение
моделей
и создание таблицы
новых миграций.
Если мы
Пятый шаг. Изменение моделей и создание новых миграций.
внесли изменения в модели Django, нужно создать новую миграцию и
Если мы внесли изменения в модели Django, нужно создать новую
применить ее, используя те же команды. Например, если добавили новое поле
миграцию и применить ее, используя те же команды. Например,
если добавили новое поле author в модель Post, то можно создать новую миграцию с помощью команды python manage.py makemigrations
blog и применить ее с помощью команды python manage.py migrate
blog. Django автоматически определит изменения в моделях и создаст
миграцию, которая изменит базу данных в соответствии с ними.
Таким образом, процесс создания миграций в Django состоит
из определения моделей Django, создания миграции, применения
миграции, проверки базы данных и создания новых миграций при
изменении моделей.
таблицу Post в базе данных, выполним команду python manage.py migrate blog в
160
Тема 6. Django ORM: работа с данными и формами
Получение доступа к данным
Получение доступа к данным в проекте с использованием
Django ORM относится к способам работы с данными в проектах, созданных на основе фреймворка Django с использованием
объектно-реляционной модели (ORM).
Для получения доступа к данным в проекте с использованием
Django ORM разработчики могут использовать различные методы,
такие как:
– моделирование базы данных: Django ORM позволяет создавать модели, которые представляют таблицы в базе данных. Эти
модели определяют структуру и связи между таблицами. Модели
могут быть созданы с помощью классов Python, что позволяет описать структуру таблицы и задать отношения между таблицами;
– использование менеджеров объектов: Django ORM предоставляет менеджеры объектов, которые позволяют получать доступ к данным в базе данных с помощью простых методов Python.
Менеджеры объектов могут использоваться для выполнения запросов к базе данных, включая выборку данных, фильтрацию, сортировку и агрегацию;
– использование запросов: Django ORM позволяет создавать запросы к базе данных, которые можно использовать для получения
данных из базы данных. Запросы могут быть созданы с помощью
методов менеджеров объектов или напрямую с помощью моделей;
– использование ORM-инструментов: Django ORM предоставляет множество инструментов для работы с данными, таких как миграции базы данных, механизмы кэширования и многое другое. Эти
инструменты позволяют разработчикам управлять базой данных
и работать с данными более эффективно.
Django ORM предоставляет удобный и интуитивно понятный
способ работы с данными в проектах Django, что позволяет разработчикам быстро и эффективно создавать приложения, которые
используют базы данных.
Рассмотрим примеры, которые демонстрируют, как можно получить доступ к данным в проекте с использованием Django ORM.
161
Рассмотрим примеры, которые демонстрируют, как можно получить
доступ к данным в проекте с использованием Django ORM.
1. Моделирование базы данных. Предположим, у нас есть проект, который
1. Моделирование
базы данных. Предположим,
у нас естьо проотслеживает
заказы в интернет-магазине.
Для хранения информации
заказах
ект,
который
отслеживает
заказы
в
интернет-магазине.
Для
хранеможно создать модель, которая будет представлять таблицу «Заказы» в базе
ния информации о заказах можно создать модель, которая будет
данных. На рис. 87 представлен фрагмент кода. В этом примере мы создали
представлять таблицу «Заказы» в базе данных. На рис. 87 предмодель Order, которая наследуется от базовой модели models.Model. Модель
ставлен фрагмент кода. В этом примере мы создали модель Order,
содержит
поля: customer_name,
order_datemodels.Model.
и total_amount.Модель
Каждоесополе
которая три
наследуется
от базовой модели
models.DateTimeField
определено
помощью
класса models.CharField
держит трис поля:
customer_name,
order_date иили
total_amount.
Каждое и
поле определено
помощью
класса
models.CharField
или models.
задает
тип данных, скоторый
будет
храниться
в соответствующем
столбце
DateTimeField и задает тип данных, который будет храниться в сотаблицы.
ответствующем столбце таблицы.
Рис.87.
87.Моделирование
Моделированиебазы
базы данных
данных
Рис.
2. Использование
Использование менеджеров
объектов.
Предположим,
нужно нужно
получить
2.
менеджеров
объектов.
Предположим,
список
всехсписок
заказов,всех
которые
быликоторые
сделаны были
в последние
7 в
дней.
Для этого
получить
заказов,
сделаны
последние
7 дней.
Для этогоменеджер
можно использовать
objects
можно
использовать
объектов objectsменеджер
для моделиобъектов
Order и метод
filter,
для модели Order и метод filter, который позволит нам отфильтровать
заказы
по дате.
Код представлен
рис. Код
88. представлен
В этом примере
который
позволит
нам отфильтровать
заказы на
по дате.
на рис.
мы88.создали
переменную
last_week,
которая
содержит
дату, котоВ этом примере мы создали переменную last_week, которая содержит дату,
рая была 7 дней назад. Затем использовали метод filter для модели
которая была 7 дней назад. Затем использовали метод filter для модели Order,
Order, чтобы получить список заказов, где дата заказа больше или
чтобы получить список заказов, где дата заказа больше или равна last_week.
равна last_week.
Рис.Рис.
88. 88.
Использование
объектов
Использованиеменеджеров
менеджеров объектов
3. Использование запросов. Можно использовать запросы для
3. Использование
запросов.
Можноиспользуя
использовать
запросы
для получения
получения
данных из базы
данных,
Django
ORM.
Наприданных
из
базы
данных,
используя
Django
ORM.
Например,
можно
получить
мер, можно получить список всех заказов и отсортировать их по дате
списокКод
всех представлен
заказов и отсортировать
заказа.
Код представлен
на рис.
заказа.
на рис. их
89.поВдате
этом
примере
мы использо89. метод
В этом order_by
примере мы
использовали
метод чтобы
order_byотсортировать
для модели Order,
чтобы
вали
для
модели Order,
заказы
поотсортировать
убыванию даты
заказызаказа.
по убыванию даты заказа.
162
Рис. 89. Использование запросов
89.
В этом примере
метод
order_by для модели Order, чтобы
отсортировать
заказымы
по использовали
убыванию даты
заказа.
отсортировать заказы по убыванию даты заказа.
Рис. 89. Использование запросов
Рис.89.
89.Использование
Использование запросов
запросов
Рис.
4.
ORM-инструментов.
Django
ORMORM
такжетакже
предоставляет
4. Использование
Использование
ORM-инструментов.
Django
пре-
4. Использование
ORM-инструментов.
Django
ORMи также
предоставляет
различные
инструменты
для
управления базой
данных
работой
сданных
данными.
доставляет
различные
инструменты
для
управления
базой
различные
инструменты
дляНапример,
управления
базой
данных
и работой
с структуры
данными.
и работой
с данными.
использовать
механизм
Например,
можно
использовать
механизмможно
миграций
для обновления
миграций
для
обновления
структуры
базы
данных.
Код миграционные
представНапример,
можно
использоватьнамеханизм
миграций
длясоздадут
обновления
структуры
базы
данных.
Код представлен
рис. 90. Эти
команды
ленданных.
на рис.Код
90. Эти команды
создадут
миграционные
файлы
и прибазы
на рис.
90. Эти
команды
создадут
миграционные
файлы
и применятпредставлен
их к базе данных,
чтобы
обновить
ее структуру.
менят их к базе данных, чтобы обновить ее структуру.
файлы и применят их к базе данных, чтобы обновить ее структуру.
Рис.90.
90.Использование
ИспользованиеORM-инструментов
ORM-инструментов
Рис.
Рис. 90. Использование ORM-инструментов
Django ORM предоставляет удобный и интуитивно понятный
способDjango
работы
с данными
в проектах
ORM
предоставляет
удобныйDjango.
и интуитивно понятный способ
работы с данными в проектах Django.
Методы для выполнения запросов в базу данных
Django
ORM
предоставляет
различные
методы для выполнения
Методы
для выполнения
запросов
в базу данных
запросов
в
базу
данных,
включая
выборку
данных, фильтрацию,
Django ORM предоставляет различные методы для выполнения запросов
сортировку и агрегацию.
в базу данных, включая выборку данных, фильтрацию, сортировку и агрегацию.
Рассмотрим некоторые примеры запросов, которые могут исРассмотрим некоторые примеры запросов, которые могут использоваться
пользоваться для получения данных в проекте Django ORM.
для получения данных в проекте Django ORM.
1. Выборка всех объектов (рис. 91). Для выборки всех объ1. Выборка всех объектов (рис. 91). Для выборки всех объектов из
ектов из таблицы в базе данных можно использовать метод all.
таблицы в базе данных можно использовать метод all. В этом примере мы
В этом примере мы импортировали модель MyModel из приложеимпортировали модель MyModel из приложения myap и использовали метод all
ния mayapp и использовали метод all для получения всех объектов
получения всех объектов из соответствующей таблицы в базе данных.
издля
соответствующей
таблицы в базе данных.
Рис. 91. Выборка всех объектов
Рис.
91. Выборка всех объектов
2. Фильтрация данных (рис. 92). Для фильтрации данных в базе
2. Фильтрация данных (рис. 92). Для фильтрации данных в базе данных
данных можно использовать метод filter. Например, можно выбрать
можно использовать метод filter. Например, можно выбрать все объекты, у
все объекты, у которых значение поля name равно ‘John’. В этом
которых значение поля name равно 'John'. В этом примере мы использовали
метод filter для модели MyModel и указали условие фильтрации, где поле name
должно быть равно 'John'.
163
можно использовать метод filter. Например, можно выбрать все объекты, у
которых значение поля name равно 'John'. В этом примере мы использовали
метод filter для модели MyModel и указали условие фильтрации, где поле name
примере
использовали
метод filter для модели MyModel и укадолжно
бытьмы
равно
'John'.
зали условие фильтрации, где поле name должно быть равно ‘John’.
Рис. 92.
92. Фильтрация
Фильтрация данных
данных
Рис.
3. Сортировка
данных
(рис. 93). Для
сортировки
в базе мы
объекты
модели MyModel
по возрастанию
значения
поля id. данных
В этом примере
3. Сортировка
данных
93). Для
сортировки
в базе
данных
объекты
модели
MyModel
по(рис.
возрастанию
значения
поляданных
id. В этом
примере
данных
можно
использовать
метод
order_by.
Например,
можно
от- мы
использовали метод order_b для модели MyModel и указали поле 'id' как поле
можно
использовать
метод
order_by.
Например,
можно
отсортировать
все
сортироватьметод
все объекты
модели
MyModel
возрастанию
значеиспользовали
order_b для
модели
MyModelпо
и указали
поле 'id'
как поле
для сортировки.
ния
поля id. В этом примере мы использовали метод order_b для
для
сортировки.
модели MyModel и указали поле ‘id’ как поле для сортировки.
Рис. 93. Сортировка данных
Рис. 93. Сортировка данных
Рис. 93. Сортировка данных
Агрегацияданных
данных(рис.
(рис.94).
94).Для
Дляагрегации
агрегации данных
данных ввбазе
базеданданных
4.4.Агрегация
4.
Агрегация
данных
(рис.
94).
Для
агрегации
данных
в
базе
данных
можно
использовать
методыметоды
count, count,
sum, avg
и avg
другие.
Например,
можно
ных
можно
использовать
sum,
и другие.
Наприможно
использовать
методы
count,
sum,
avg
и
другие.
Например,
можно
вычислить
сумму
всех значений
поля
'price'
в модели
MyModel.
примере
мер,
можно
вычислить
сумму
всех
значений
поля
‘price’Ввэтом
модели
вычислить
сумму
всех
значений
поля
'price'
в модели
MyModel.
В функцию
этом
MyModel.
В этом
примере
мы
использовали
метод
aggregate
дляпримере
мо-Sum,
мы использовали
метод
aggregate
для
модели
MyModel
и указали
дели
MyModel
и указали
функцию
Sum,
которая
вычисляет
суммуSum,
мы
использовали
метод
aggregate
для модели
MyModel
функцию
которая
вычисляет
сумму
значений
поля
'price'. и указали
Результат
вычислений
значений
поля ‘price’.
Результат
вычислений
сохраняется
которая
вычисляет
сумму
значений
поля 'price'.
Результат в словаре
вычислений
сохраняется
в словаре
с ключом
total_price.
с ключом total_price.
сохраняется в словаре с ключом total_price.
Рис.
Агрегация
данных
Рис.
94.94.
Агрегация
данных
Рис. 94.
Агрегация
данных
Использование запросов
для
получения
данных в проекте Django ORM
Использование запросов для получения данных в проекте
Использование
запросов способов
для получения
проектев Django
ORM
является
одним из основных
работыданных
с базойв данных
приложениях
Django ORM является одним из основных способов работы с базой
является
из основных
способов
работы
с базоймогут
данных
в такие
приложениях
Django. одним
Разработчики
могут
использовать
различные
методы,
как all,
данных
в приложениях
Django.
Разработчики
использовать
Django.
Разработчики
могут
использовать
различные
методы,
такие
как all,и
filter, order_by,
aggregate
и другие,
из базы
данных
различные
методы,
такие
как all,чтобы
filter,получать
order_by,данные
aggregate
и другие,
чтобы
получать
данные
из базы
данных
и выполнять
выполнять
различные
операции
с ними.
filter,
order_by,
aggregate
и другие,
чтобы
получать
данные из различные
базы данных и
операции
с
ними.
выполнять различные операции с ними.
Инструменты по работе с данными, хранящимися в разных таблицах
Django ORMпо
(Object-Relational
Mapping)
являетсяв мощным
инструментом
Инструменты
работе с данными,
хранящимися
разных таблицах
164
для Django
работы ORM
с данными,
хранящимися
в различных
таблицах
базы
данных. Он
(Object-Relational
Mapping)
является
мощным
инструментом
позволяет
с данными,
используя
объектно таблицах
ориентированный
подход,
для
работы работать
с данными,
хранящимися
в различных
базы данных.
Они
Инструменты по работе с данными,
хранящимися в разных таблицах
Django ORM (Object-Relational Mapping) является мощным инструментом для работы с данными, хранящимися в различных таблицах базы данных. Он позволяет работать с данными, используя
объектно ориентированный подход, и автоматически преобразовывает данные между объектами Python и записями в базе данных.
Для работы с данными, хранящимися в разных таблицах с использованием Django ORM, необходимо использовать связи между
моделями. В Django ORM есть несколько типов связей:
– OneToOneField – связь «один-к-одному»;
– ForeignKey – связь «один-ко-многим»;
– ManyToManyField – связь «многие-ко-многим».
Для работы с данными в Django ORM необходимо выполнить
следующие шаги:
– определить модели данных и их поля;
– определить связи между моделями;
– создать или обновить базу данных с помощью миграций;
– выполнить операции с данными с использованием Django ORM.
Работа с данными, хранящимися в разных таблицах с использованием Django ORM, является одной из основных задач при работе
с базой данных в проектах Django. В проектах, особенно крупных,
данные часто хранятся в нескольких таблицах, связанных между
собой ключами. Django ORM предоставляет множество инструментов для работы с такими данными.
Рассмотрим некоторые из инструментов по работе с данными,
хранящимися в разных таблицах.
1. Определение связей между моделями (рис. 95). Для работы
с данными, хранящимися в разных таблицах, необходимо определить связи между моделями. Django ORM поддерживает несколько типов связей, таких как «один-к-одному», «один-ко-многим»
и «многие-ко-многим». Например, если у нас есть модели Author
и Book, можно определить связь «один-ко-многим», где каждый
автор может иметь несколько книг. В этом примере мы определили модели Author и Book и связь «многие-ко-многим» между ними.
У каждой книги есть поле author, которое является внешним ключом, связывающим ее с соответствующим автором.
165
Рис. 95. Определение связей между моделями
Рис. 95.
95.Определение
Определение связей
связей между
междумоделями
моделями
Рис.
2. Использование
связей для доступа
к данным (рис. 96). После
2. Использование связей для доступа к данным (рис. 96). После
определения
связей междусвязей
моделями
можно использовать
их для
2. Использование
для доступа
к данным (рис.
96). доступа
После к
определения
связей
между
моделями
можноможно
использовать
их для их
доступа
определения
связей
между
моделями
использовать
для к
данным. Например, можно получить список всех книг, написанных
данным.
можно
получить
список
всех книг, всех
написанных
доступаНапример,
к данным.
Например,
можно
получить
книг,
определенным
автором, используя
связь
между
моделямисписок
Author и Book.
В этом
определенным
используяавтором,
связь между
моделями
Author
и Book.
В этом
написанныхавтором,
определенным
используя
связь
между
модепримере мы сначала получили объект автора с именем "John Smith" из базы
лями Author
и Book.
В этомобъект
примере
мыссначала
объект
примере
мы сначала
получили
автора
именем получили
"John Smith"
из базы
данных, используя метод get для модели Author. Затем использовали связь
автора
с
именем
«John
Smith»
из
базы
данных,
используя
метод
данных, используя метод get для модели Author. Затем использовали get
связь
book_set,
которая
автоматически
создается Django
для связи
«один-кодля модели
Author.
Затем использовали
связь ORM
book_set,
которая
авbook_set, которая автоматически создается Django ORM для связи «один-комногим»
между моделями
Book, для
чтобы
получить
список всех книг,
томатически
создаетсяAuthor
Djangoи ORM
связи
«один-ко-многим»
многим» между моделями Author и Book, чтобы получить список всех книг,
между моделями
Author и Book, чтобы получить список всех книг,
написанных
этим автором.
написанных
этимэтим
автором.
написанных
автором.
Рис. 96. Использование связей для доступа к данным
Рис. 96. Использование связей для доступа к данным
Рис. 96. Использование связей для доступа к данным
3. Использование обратных связей (рис. 97). Для доступа
3. Использование обратных связей (рис. 97). Для доступа к связанным
к связанным
данным
в обратном
направлении,
есть откмодели,
3. Использование
обратных
связей
(рис. 97). Длятодоступа
связанным
данным
в обратном
направлении,
от модели,
у которой
есть внешний
у которой
есть внешний
ключ,токесть
модели,
на которую
он ссылается,
данным в обратном направлении, то есть от модели, у которой есть внешний
ключ,
к модели,
на которую
он ссылается,
можно
использовать
обратные
связи.
можно
использовать
обратные
связи.
Например,
можно
получить
ключ, к модели, на которую он ссылается, можно использовать обратные связи.
список
всех
авторов,
написавших
книги
с
определенным
заголовком.
Например, можно получить список всех авторов, написавших книги с
Например,
можно получить
список
всех объект
авторов, написавших
книги с
В этом примере
мы сначала
получили
с заголовком
определенным
заголовком.
В этом примере
мы сначалакниги
получили
объект книги с
определенным
заголовком.
этомданных,
примере используя
мы сначала метод
получили
книги с
«The Great Gatsby»
из В
базы
get объект
для модезаголовком "The Great Gatsby" из базы данных, используя метод get для модели
ли Book."The
Затем
использовали
обратную
author,
которая
заголовком
Great
Gatsby" из базы
данных,связь
используя
метод
get дляавтомодели
Book. Затем использовали обратную связь author, которая автоматически
матически
создается
Django
ORM
для
связи
«многие-ко-многим»
Book. Затем использовали обратную связь author, которая автоматически
создается
Django ORM
для связи
«многие-ко-многим»
моделями
Author
между моделями
Author
и Book,
чтобы получитьмежду
список
всех автосоздается Django ORM для связи «многие-ко-многим» между моделями Author
и Book,
чтобы получить
список
авторов, которые написали эту книгу.
ров, которые
написали
этувсех
книгу.
и Book, чтобы получить список всех авторов, которые написали эту книгу.
Использованиеобратных
обратных связей
Рис.Рис.
97.97.
Использование
связей
Работа с данными, хранящимися в разных таблицах с использованием
166
Django ORM, требует определения связей между моделями и использования
соответствующих инструментов для доступа к данным.
Рис. 97. Использование обратных связей
Работа
хранящимися
в разных
таблицах
с испольРабота сс данными,
данными, хранящимися
в разных
таблицах
с использованием
зованием Django ORM, требует определения связей между моделяDjango ORM, требует определения связей между моделями и использования
ми и использования соответствующих инструментов для доступа
соответствующих инструментов для доступа к данным.
к данным.
Рассмотрим конкретный пример работы с данными, хранящимися в
Рассмотрим конкретный пример работы с данными, хранящиразных
использованием
Django ORM (рис.
98). ORM (рис. 98).
мися втаблицах,
разных стаблицах,
с использованием
Django
Рис. 98. Пример кода для создания моделей и решения задачи
Рис. 98. Пример кода для создания моделей и решения задачи
В этом примере мы сначала определили две модели – Author и Book с
В этом примере мы сначала определили две модели – Author
и Book с помощью класса models.Model из Django ORM. У каждой
поля, которые соответствуют столбцам в базе данных. У модели Author есть
модели есть свои поля, которые соответствуют столбцам в базе данполе
которое
является
полем
с максимальной
длиной 100
ных.name,
У модели
Author
естьстроковым
поле name,
которое
является строковым
символов.
У модели Book есть
поле 100
title,символов.
которое также
являетсяBook
строковым
полем с максимальной
длиной
У модели
есть
полем
максимальной
длинойявляется
200 символов,
и внешний
ключс author,
который
поле сtitle,
которое также
строковым
полем
максимальной длиной
200с символов,
и внешний
ключ
author,
свясвязывает
книгу
соответствующим
автором.
Метод
str в который
каждой модели
зывает книгу с соответствующим автором. Метод str в каждой модели определяет строковое представление объекта. В нашем случае
он возвращает имя автора для модели Author и заголовок книги
для модели Book.
Мы создали нового автора с именем ‘John Smith’ и сохранили
его в базе данных, используя метод save для модели Author. Затем
создали новую книгу с заголовком ‘The Great Gatsby’ и связали
помощью класса models.Model из Django ORM. У каждой модели есть свои
167
ее с автором ‘John Smith’, используя внешний ключ author. После
этого сохранили книгу в базе данных, используя метод save для модели Book. Использовали метод filter для модели Book и указали условие фильтрации, где поле author__name должно быть равно имени автора. Для изменения автора сначала получили объект автора
с именем ‘John Smith’ из базы данных, используя метод get для модели Author. Затем изменили имя автора на ‘Jane Doe’ и сохранили
изменения в базе данных, используя метод save для модели Author.
Для удаления книги сначала получили объект книги с заголовком
‘The Great Gatsby’ из базы данных, используя метод get для модели
Book. Затем вызвали метод delete для объекта книги, чтобы удалить его из базы данных.
Связи и получение данных
Django ORM предоставляет удобный интерфейс для работы
с данными, хранящимися в разных таблицах и связанными между собой. Одним из типов связей, которые можно использовать в Django
ORM, является связь «многие-ко-многим» (many-to-many).
Связь «многие-ко-многим» используется, когда каждый объект в одной таблице может быть связан с несколькими объектами
в другой таблице, и наоборот. Например, модель Book может иметь
несколько авторов, а модель Author может иметь несколько книг.
В этом случае мы создаем промежуточную таблицу, которая связывает объекты из обеих таблиц.
Для определения связи «многие-ко-многим» в Django ORM
можно использовать поле ManyToManyField. Например, если
мы хотим связать модели Book и Author, можно определить поле
authors в модели Book так, как представлено на рис. 99.
Рис.99.
99.Определение
Определение связи
Рис.
связи«многие-ко-многим»
«многие-ко-многим»
Чтобы добавить связанный объект к модели, можно использовать метод
168
add для поля ManyToManyField. Например,
чтобы добавить автора к книге,
можно использовать следующий код, показанный на рис. 100. Здесь мы сначала
Рис. 99. Определение связи «многие-ко-многим»
получили объект книги с помощью метода get для модели Book и объект автора
Чтобы добавить связанный объект к модели, можно использовать метод
с помощью метода get для модели Author. Затем вызвали метод add для поля
add для поля ManyToManyField. Например, чтобы добавить автора к книге,
Чтобы добавить
связанный
объект
к модели,
можно
использоauthors объекта
книги, чтобы
добавить
объект
автора
в список
связанных
можно использовать следующий код, показанный на рис. 100. Здесь мы сначала
вать метод add для поля ManyToManyField. Например, чтобы дообъектов.
получили
объект
книги
с помощью
метода
get для модели
Book икод,
объект
бавить
автора
к книге,
можно
использовать
следующий
по- автора
казанный
на рис.
100.модели
Здесь мы
сначала
книги
с помощью
метода
get для
Author.
Затемполучили
вызвали объект
метод add
для поля
с помощью метода get для модели Book и объект автора с помощью
authors объекта книги, чтобы добавить объект автора в список связанных
метода get для модели Author. Затем вызвали метод add для поля
объектов.
authors объекта книги, чтобы добавить объект автора в список связанных объектов.
Рис. 100. Добавить связанный объект к модели
Для получения связанных объектов можно использовать обратную связь.
Например, чтобыРис.
получить
всех авторов,объект
связанных
с книгой, можно
100.Добавить
Добавить связанный
к модели
Рис. 100.
связанный объект
к модели
использовать код на рис. 101. Здесь мы сначала получили объект книги с
Для получения связанных объектов можно использовать обпомощью
метода
для модели Book.
Затем использовали
обратную связь
ратную
связь.get
Например,
получить
авторов, связанных
Для
получения
связанныхчтобы
объектов
можновсех
использовать
обратную связь.
можно всех
использовать
на рис. из
101.
Здесь мы сначала
authorsс книгой,
для получения
связанныхкод
объектов
промежуточной
таблицы с
Например, чтобы получить всех авторов, связанных с книгой, можно
получили объект книги с помощью метода get для модели Book. Запомощью метода all.
использовать
код на рис.
101. Здесь
сначала
получили всех
объект
книги с
тем использовали
обратную
связьмы
authors
для получения
связанных
объектов
из промежуточной
с помощью метода
all. связь
помощью
метода
get для
модели Book. таблицы
Затем использовали
обратную
authors для получения всех связанных объектов из промежуточной таблицы с
помощью метода all.
Рис. 101. Обратная связь
Для удаления связи
можно
использовать
Рис.
101. Обратная
связьметод remove для поля
Для удаленияНапример,
связи можно
использовать
методизremove
поля
ManyToManyField.
чтобы
удалить автора
спискадля
связанных
ManyToManyField. Например, чтобы удалить автора из списка связанных объектов, можем использовать следующий код, позволяюкниги с помощью метода get для модели Book и объект автора с помощью
щий получить объект книги с помощью метода get для модели Book
Рис.Затем
101. Обратная
связь
метода
get для
моделис Author.
мы вызвали
метод
remove
для поля
authors
и объект
автора
помощью
метода
get для
модели
Author.
Затем
объекта
книги, чтобы
объект
автора
из списка
связанных
объектов.
мы вызвали
метод удалить
remove для
поля
authors
объекта
книги, чтобы
удалить
объект автора
списка связанных объектов. Пример предПример
представлен
на рис.из102.
ставлен на рис. 102.
объектов, можем использовать следующий код, позволяющий получить объект
Рис. 102. Удаление связи
Рис. 102. Удаление связи
169
Получение записей из связанных таблиц является одной из ключевых
операций при работе с реляционными базами данных. В Django ORM это
Рис. 102. Удаление связи
Получение записей из связанных таблиц является одной из ключевых
Получение
записей
из связанных
операций
при работе
с реляционными
базами таблиц
данных. является
В Django одной
ORM это
из ключевых
работе с реляционными
базами данных.
можно
сделать сопераций
помощью при
использования
связей между таблицами
и методов
В Django ORM это можно сделать с помощью использования связей между таблицами и методов доступа к связанным объектам.
Еще одним из типов связей, которые можно использовать в Django ORM,
Еще одним из типов связей, которые можно использовать
является
связь
«один-ко-многим»
(one-to-many).
В этом случае
один объект в
в Django
ORM,
является связь
«один-ко-многим»
(one-to-many).
одной
таблице
связан
несколькими
объектами
в связан
другой таблице.
Например,
В этом
случае
одинс объект
в одной
таблице
с несколькими
объектами
другойиметь
таблице.
Например,
Authorмы
может
иметь в
модель
Authorвможет
несколько
книг. Вмодель
этом случае
определяем
несколько
книг.
В
этом
случае
мы
определяем
в
модели
Book
внешмодели Book внешний ключ, который указывает на модель Author (рис. 103).
ний ключ, который указывает на модель Author (рис. 103).
доступа к связанным объектам.
Рис.
103. Связь
«один-ко-многим»
Чтобы получить все
книги,
связанные
с определенным автором, можно
Рис. 103. Связь «один-ко-многим»
использовать метод filter для модели Book и указать условие фильтрации, где
Чтобы получить все книги, связанные с определенным автором,
поле author
должно
быть равно
объекту
автора.
В примере
(рис. 104)
мы сначала
можно
использовать
метод
filter для
модели
Book и указать
условие
фильтрации,
где поле
author должно
быть
объекту Author.
автора. Затем
получили
объект автора
с помощью
метода
getравно
для модели
В примере (рис. 104) мы сначала получили объект автора с помощью
использовали метод filter для модели Book и указали условие фильтрации, где
метода get для модели Author. Затем использовали метод filter для
поле author
быть равно
автора.
filterдолжно
возвращает
моделидолжно
Book и указали
условиеобъекту
фильтрации,
где Метод
поле author
быть
равно объекту
автора.
Метод
filter возвращает
QuerySet, котоQuerySet,
который
содержит
все книги,
связанные
с этим автором.
рый содержит все книги, связанные с этим автором.
Рис.
104.Использование
Использование метода
Рис.
104.
методаfilter
filter
Если нам нужно получить связанные объекты из обратной связи, можно
использовать
метод
related_name.
Например,
еслисвязи,
хотимможно
Если
нам нужно
получить
связанные
объекты
из обратной
получить все книги, связанные с автором, можно использовать слеиспользовать метод related_name. Например, если хотим получить все книги,
дующий код, показанный на рис. 105. Здесь мы определили обратсвязанные
автором,
можно
использовать
следующий
код, показанный
ную ссвязь
book_set
в модели
Author, которая
позволяет
получить всена рис.
105. Здесь мы определили обратную связь book_set в модели Author, которая
позволяет получить все связанные объекты из модели Book. Метод all
170
возвращает QuerySet, который содержит все книги, связанные с этим автором.
105. Здесь мы определили обратную связь book_set в модели Author, которая
позволяет получить все связанные объекты из модели Book. Метод all
связанные
объекты
из модели
Book.
возвращает
QuerySet,
возвращает
QuerySet,
который
содержит
всеМетод
книги,allсвязанные
с этим
автором.
который содержит все книги, связанные с этим автором.
Рис.
105.
Получить
объектыиз
изобратной
обратной
связи
Рис.
105.
Получитьсвязанные
связанные объекты
связи
Также можно использовать связь «многие-ко-многим» (manyto-many),
позволяющая
связывать
объекты из двух таблиц,
кажТакже
можно
использовать
связь «многие-ко-многим»
(many-to-many),
из которых
может
быть из
связан
с несколькими
котораядый
позволяет
связывать
объекты
двух таблиц,
каждый изобъектами
которых может
из другой таблицы. Например, модель Book может иметь несколько
быть связан с несколькими объектами из другой таблицы. Например, модель
категорий, а модель Category может иметь несколько книг (рис. 106).
Book может иметь несколько категорий, а модель Category может иметь
несколько книг (рис. 106).
Рис. 106. Связать объекты из двух таблиц
Рис.
издвух
двух
таблиц
Рис.106.
106.Связать
Связать объекты
объекты из
таблиц
Чтобы получить все книги, связанные с определенной категорией, можно
Чтобы получить все книги, связанные с определенной катеиспользовать метод filter для модели Book и указать условие фильтрации, где
горией,получить
можно использовать
метод filter
для модели Book
и ука- можно
Чтобы
все книги, связанные
с определенной
категорией,
поле categories
должно
содержать где
объект
категории.
мы сначала
получили
зать условие
фильтрации,
поле
categoriesЗдесь
должно
содержать
использовать метод filter для модели Book и указать условие фильтрации, где
категории.
Здесь мыметода
сначала get
получили
объект категории
объектобъект
категории
с помощью
для модели
Category. Затем
поле categories
должно
содержать
объектCategory.
категории.
Здесь
мы сначаламеполучили
с помощью
метода
get для модели
Затем
использовали
использовали метод filter для модели Book и указали условие фильтрации, где
filter для модели
Book и указали
где поле Затем
объекттодкатегории
с помощью
метода условие
get дляфильтрации,
модели Category.
поле categories
должно содержать
содержатьобъект
объекткатегории.
категории.Метод
Методfilter
filter
возвращает
categories
должно
возвраиспользовали метод filter для модели Book и указали условие фильтрации,
где
QuerySet,
содержит
всесодержит
книги, связанные
с этой
категорией
(рис.
щаеткоторый
QuerySet,
который
все книги,
связанные
с этой
ка- 107).
поле categories должно содержать объект категории. Метод filter возвращает
тегорией (рис. 107).
QuerySet, который содержит все книги, связанные с этой категорией (рис. 107).
Рис.107.
107.Получение
Получение объектов
Рис.
объектовизизкатегории
категории
Рис. 107. Получение объектов из категории
Для получения связанных объектов можно использовать обратную связь.
Например, чтобы получить все категории,
связанные с книгой, можно
171
Для получения связанных объектов можно использовать обратную связь.
использовать следующий код, показанный на рис. 108.
Например, чтобы получить все категории, связанные с книгой, можно
Для получения связанных объектов можно использовать обратную связь.
получения
связанных
объектов можно
использовать
об- можно
Например,Для
чтобы
получить
все категории,
связанные
с книгой,
ратную связь. Например, чтобы получить все категории, связаниспользовать следующий код, показанный на рис. 108.
ные с книгой, можно использовать следующий код, показанный
на рис. 108.
Рис.108.
108.Получение
Получение связанных
Рис.
связанныхобъектов
объектов
Здесь мы сначала получили объект книги с помощью метода
get длямы
модели
Book.получили
Затем использовали
обратную
связь categories
Здесь
сначала
объект книги
с помощью
метода get для
для получения всех связанных объектов из промежуточной таблимодели Book. Затем использовали обратную связь categories для получения всех
цы с помощью метода all.
связанныхПолучение
объектов иззаписей
промежуточной
таблицы
с помощью
all.
из связанных
таблиц
в Djangoметода
ORM может
быть достигнуто с помощью определения связей между таблицами, использования методов доступа к связанным объектам и обратной связи.
Управление данными
Одной из ключевых задач в разработке веб-приложения является управление данными.
Управление данными в Djangо-приложении – это процесс создания, чтения, обновления и удаления данных в базе данных, используя модели Django и ORM (объектно-реляционное отображение).
ORM в Django позволяет работать с базой данных, используя объекты Python вместо SQL-запросов, что делает процесс управления
данными более удобным и интуитивно понятным.
Для управления данными в Django-приложении необходимо
выполнить следующие действия.
1. Определение модели (рис. 109). Модель – это класс Python,
который определяет структуру таблицы в базе данных. Он определяет название таблицы, ее поля и типы данных. Для определения
модели в Django используется класс Model, который наследуется
от базового класса models.Model.
172
Model, который наследуется от базового класса models.Model.
Для создания
миграций
в Django
используется
команда
makemigrations:
Рис.
109.
Определение
модели
для
«Статьи»
Рис.
109.
Определение
модели
длятаблицы
таблицы
«Статьи»
python manage.py
makemigrations.
2. Создание
миграций. После определения модели необходимо
создать
миграции,
которые
применят
изменения
внеобходимо
базеих
данных.
Применение
миграций.
создания
миграций
необходимо
2.3. Создание
миграций.
ПослеПосле
определения
модели
создать
Для
создания
миграций
в
Django
используется
команда
makemigrations:
Миграции – это способ изменения структуры базы данных без поприменитькоторые
к базе применят
данных. Для
этого используется
migrate:
python
миграции,
изменения
в базе данных.команда
Миграции
– это способ
тери
данных.makemigrations.
Django создает миграции автоматически при изменеpython
manage.py
manage.py
migrate. базы данных без потери данных. Django создает миграции
изменения
структуры
нии
модели.
3. Применение
миграций. После создания миграций их необходимо
Для при
создания
миграций
в создания
Django используется
4. Создание
объектов
модели.
Для
новых объектовкоманда
в базе данных
автоматически
изменении
модели.
применить
к
базе
данных.
Для
этого
используется
команда
migrate:
python
makemigrations:
manage.py
makemigrations.
необходимо
создать python
экземпляр
модели
и сохранить его, выполнив команду,
manage.py
3. migrate.
Применение миграций. После создания миграций их необпредставленную
на рис. 110.
ходимо
применить
к базе
данных.
Для этогоновых
используется
4. Создание
объектов
модели.
Для создания
объектовкоманда
в базе данных
migrate: python manage.py migrate.
необходимо создать экземпляр модели и сохранить его, выполнив команду,
4. Создание объектов модели. Для создания новых объектов
представленную
на рис.
110.
в базе данных
необходимо
создать экземпляр модели и сохранить
его, выполнив команду, представленную на рис. 110.
Рис. 110. Создание объектов модели
5. Получение объектов модели. Для получения объектов модели из базы
Рис.110.
110. Создание
Создание объектов
Рис.
объектовмодели
модели
данных используется метод objects.all(), который возвращает все объекты
5. Получение объектов модели. Для получения объектов модели
модели,
с
помощью
команды
на рис.
111. objects.all(),
А для получения конкретного
объекта
из
данныхобъектов
используется
метод
5. базы
Получение
модели.
Для получениякоторый
объектоввозвращамодели из базы
модели
метод objects.get().
етиспользуется
все объекты модели,
с помощью команды на рис. 111. А для полуданных используется метод objects.all(), который возвращает все объекты
чения конкретного объекта модели используется метод objects.get().
модели, с помощью команды на рис. 111. А для получения конкретного объекта
модели используется метод objects.get().
Рис.111.
111. Метод
Метод для
объектов
Рис.
длявозвращения
возвращения
объектов
6. Обновление объектов модели. Для обновления объектов модели
необходимообъектов
получить модели.
объект изДля
базыобновления
данных, изменить
егомодели
6. Обновление
объектов
Рис.
111.
Метод
для
возвращения
объектов
атрибуты и сохранить его. Для этого выполняется код программы,
необходимо получить объект из базы данных, изменить его атрибуты и
представленный на рис. 112.
сохранить его. Для этого выполняется код программы, представленный на рис.
6. Обновление объектов модели. Для обновления объектов модели
173
112.
необходимо получить объект из базы данных, изменить его атрибуты и
сохранить его. Для этого выполняется код программы, представленный на рис.
112.
Рис. 112.
Обновление
объектов
модели модели необходимо
7. Удаление объектов
модели.
Для удаления
объектов
7. Удаление
объектов
удаления
объектов
получить объект
из базы
данных имодели.
вызватьДля
метод
delete() (рис.
113). модели необходимо получить объект из базы данных и вызвать метод
delete() (рис. 113).
Рис. 112. Обновление объектов модели
Рис.113.
113.Удаление
Удаление объектов
Рис.
объектовмодели
модели
Управление данными в Django-приложении – важная часть разработки веб-приложения,
и правильное использование
моУправление
данными в Django-приложении
– важная ORM
частьиразработки
делей может существенно упростить процесс работы с базой данных.
веб-приложения, и правильное использование ORM и моделей может
существенно упростить
процесс работы
с базой данных.
Инструменты
управления
данными
В Django для управления данными в приложении можно использовать несколько
инструментов:
Инструменты
управления
данными
– ORM (Объектно-реляционное отображение) – инструмент,
В Django для управления данными в приложении можно использовать
который позволяет работать с базой данных, используя объекты
несколько
инструментов:
Python
вместо SQL-запросов. ORM в Django позволяет создавать,
и удалять данные в базе отображение)
данных с помощью
моделей; который
–обновлять
ORM (Объектно-реляционное
– инструмент,
– Django Admin – встроенный интерфейс администратора, копозволяет работать с базой данных, используя объекты Python вместо SQLторый позволяет управлять данными в Django-приложении без назапросов.
ORMкода.
в Django
позволяет
создавать,
и удалять
данные в
писания
С помощью
Django
Admin обновлять
можно легко
создавать,
изменять,
удалять и
просматривать объекты моделей в базе данных,
базе данных
с помощью
моделей;
а
также
настраивать
права доступа
и группы; который
– Django Admin – пользовательские
встроенный интерфейс
администратора,
– Django Forms – инструмент, который позволяет создавать
позволяет
управлять данными в Django-приложении без написания кода. С
HTML-формы для ввода и обработки данных. Django Forms позвопомощью
Django Admin
легко чтения,
создавать,
изменять,
удалять и
ляет создавать
формы можно
для создания,
обновления
и удаления данных
в базе данных;
просматривать
объекты
моделей в базе данных, а также настраивать
– Django Rest Framework – инструмент, который позволяпользовательские права доступа и группы;
ет создавать API для взаимодействия с базой данных. Django Rest
–Framework
Django Forms
– инструмент,
который
позволяет
создавать чтения,
HTML-формы
позволяет
создавать
эндпойнты
для создания,
обновления
и удаления
данных
в базе
данных,
а также
предоставдля ввода
и обработки
данных.
Django
Forms
позволяет
создавать
формы для
ляет различные форматы данных для обмена информацией.
создания, чтения, обновления и удаления данных в базе данных;
– Django Rest Framework – инструмент, который позволяет создавать API
174
для взаимодействия с базой данных. Django Rest Framework позволяет создавать
инструментов для управления данными в Django-приложении, таких как Django
Suit, Grappelli и Django Jet, которые предоставляют расширенный функционал
Сторонние
инструменты.
Существует множество сторонних индля управления
данными
в приложении.
струментов для управления данными в Django-приложении, таких
Рассмотрим
инструмент Django Admin. Это встроенный интерфейс
как Django Suit, Grappelli и Django Jet, которые предоставляют расадминистратора,
позволяет
управлять
данными
в Django-приложении
ширенный который
функционал
для управления
данными
в приложении.
без написания
кода. С его
помощью Django
можно легко
создавать,
изменять,инудалять и
Рассмотрим
инструмент
Admin.
Это встроенный
терфейс администратора,
который
позволяет
управлять
данными
просматривать
объекты моделей
в базе
данных,
а также
настраивать
в Django-приложении без написания кода. С его помощью можно
пользовательские права доступа и группы.
легко создавать, изменять, удалять и просматривать объекты моДля
работы
ним нужно
выполнить
ряд действий:
делей
в базес данных,
а также
настраивать
пользовательские права
и группы.
–доступа
перед
использованием Django Admin необходимо создать
Для работы с ним нужно выполнить ряд действий:
суперпользователя, который будет иметь полный доступ к интерфейсу
– перед использованием Django Admin необходимо создать
администратора.
Для этогокоторый
необходимо
команду
python
manage.py
суперпользователя,
будет выполнить
иметь полный
доступ
к интерфейсу администратора. Для этого необходимо выполнить команду
createsuperuser;
manage.py
–python
для того
чтобы createsuperuser;
модели были доступны в Django Admin, их необходимо
– для того чтобы модели были доступны в Django Admin,
зарегистрировать в файле admin.py внутри Django-приложения (рис. 114);
их необходимо зарегистрировать в файле admin.py внутри Djangoприложения (рис. 114);
Рис.
Регистрация
Рис.114.
114. Регистрация
– после
регистрации
моделей
в Django
Admin
– после
регистрации
моделей
в Django
Adminможно
можнозайти
зайтивв интерфейс
интерфейс администратора
и через него
управлять
объектами моделей;
администратора
и через него управлять
объектами
моделей;
– для создания новых объектов моделей в Django Admin необ– для создания новых объектов моделей в Django Admin необходимо зайти
ходимо зайти в раздел «Добавить» соответствующей модели, заполв раздел
«Добавить»
соответствующей
модели, заполнить поля формы и нажать
нить
поля формы
и нажать «Сохранить»;
– для просмотра объектов моделей в Django Admin необходи«Сохранить»;
мо
выбрать
соответствующую
модель
в списке
объектов,
который
– для просмотра
объектов моделей
в Django
Admin
необходимо
выбрать
доступен в разделе «Изменить». После выбора объекта можно просоответствующую
модель в списке объектов, который доступен в разделе
смотреть его атрибуты и связанные объекты;
– для обновления объектов моделей в Django Admin необходимо выбрать соответствующую модель в списке объектов, выбрать
объект для редактирования и изменить его атрибуты. После изменения атрибутов необходимо нажать «Сохранить»;
175
– для удаления объектов моделей в Django Admin необходимо
выбрать соответствующую модель в списке объектов, выбрать объект для удаления и нажать «Удалить». После подтверждения удаления объект будет удален из базы данных;
– Django Admin позволяет настраивать права доступа и группы пользователей. Для этого необходимо создать пользователей
и группы и назначить соответствующие права доступа.
Django Admin позволяет настраивать пользовательские права
доступа и группы, что делает его гибким и удобным инструментом
для управления данными.
Django Admin – встроенная веб-административная панель,
которая предоставляет интерфейс для управления данными
в Django-приложении. Django Admin является одним из ключевых
компонентов фреймворка Django и позволяет создавать пользовательские интерфейсы для управления базой данных, моделями
и другими аспектами приложения.
Django Admin предоставляет множество функций, которые
упрощают работу с приложением:
– автоматически создает интерфейс для управления моделями,
которые вы определили в приложении. Это позволяет быстро создавать мощные административные панели без необходимости писать дополнительный код;
– позволяет настраивать представления данных, которые отображаются в административной панели. Вы можете определить,
какие поля модели должны отображаться, какие действия пользователи могут выполнять, а также настраивать фильтры и поиск
данных;
– является очень гибким и расширяемым. Вы можете создавать
собственные представления данных, добавлять новые поля в интерфейс, создавать собственные действия и многое другое;
– предоставляет механизмы аутентификации и авторизации,
которые позволяют контролировать доступ к административной
панели вашего приложения;
– интегрируется с другими компонентами Django, такими как
ORM, формы и шаблоны, что позволяет создавать более сложные
административные панели.
176
Django Admin позволяет быстро создавать мощные административные панели для вашего приложения. Он предоставляет
широкий набор инструментов для управления данными и позволяет настроить интерфейс в соответствии с вашими потребностями. Однако не всегда Django Admin является оптимальным
решением для создания пользовательских интерфейсов, поэтому
необходимо оценивать его преимущества и недостатки в каждом
конкретном случае.
Для создания интерфейса управления моделью в Django Admin
необходимо сделать следующие шаги.
1. Определите модель, для которой вы хотите создать интерфейс
управления. Это может быть любая модель из приложения Django.
2. Создайте файл admin.py в каталоге, содержащем модель. Этот
файл будет содержать код для настройки интерфейса управления.
3. Импортируйте модель, для которой вы хотите создать интерфейс управления, и класс ModelAdmin из модуля django.contrib.
admin.
4. Создайте класс, унаследованный от ModelAdmin. В этом классе вы можете определить, какие поля модели будут отображаться
в интерфейсе управления, какие поля будут доступны для редактирования, какие фильтры и поисковые поля будут использоваться
и многое другое.
5. Зарегистрируйте модель и класс Admin в функции admin.site.
register(), чтобы Django знал, как обрабатывать эту модель.
Например,
модель
полями
‘title’, ‘author’
Например, есть
есть модель
Book сBook
полями с'title',
'author' и 'published_date'.
и ‘published_date’.
Нужно
создатьдляинтерфейс
управления
для
Нужно создать интерфейс
управления
этой модели. Это
можно сделать
так,этой
модели.
Это можно
сделать
как представлено
на рис.
115. так, как представлено на рис. 115.
Рис. 115.
Создать
интерфейс управления
для для
модели
Рис. 115.
Создать
интерфейс
управления
модели
Здесь нами создан класс BookAdmin, унаследованный от ModelAdmin.
Определили, какие поля модели будут отображаться в списке записей, какие
поля будут доступны для фильтрации и поиска. Затем зарегистрировали модель
177
Book и класс BookAdmin в функции admin.site.register(). Теперь можно
управлять записями в модели Book через интерфейс управления Django Admin.
Здесь нами создан класс BookAdmin, унаследованный
от ModelAdmin. Определили, какие поля модели будут отображаться в списке записей, какие поля будут доступны для фильтрации
и поиска. Затем зарегистрировали модель Book и класс BookAdmin
в функции admin.site.register(). Теперь можно управлять записями
в модели Book через интерфейс управления Django Admin.
В открытой странице администрирования становится доступным выполнение следующих функций.
• Добавление и редактирование записей. После открытия страницы администрирования вы увидите интерфейс для управления
моделью Book. На этой странице можно добавлять, редактировать
и удалять записи. В форме редактирования можно изменять значения полей и сохранять изменения.
• Фильтрация и поиск данных. Django Admin позволяет фильтровать и искать данные в базе данных.
• Настраиваемые представления данных. Django Admin позволяет настраивать представления данных, которые отображаются
в административной панели. Например, вы можете определить, какие поля модели должны отображаться, какие действия пользователи могут выполнять, а также настраивать фильтры и поиск данных.
Можно
изменить отображение списка записей модели Book, чтотакже добавить фильтр по статусу доступности книги. Код представлен на рис.
бы отображать только название книги и автора, а также добавить
116.
фильтр по статусу доступности книги. Код представлен на рис. 116.
Рис.Рис.
116.116.
Изменить
отображение
записей
модели
Изменить
отображение списка
списка записей
модели
Расширяемость.
можетесоздавать
создавать собственные
представления
• Расширяемость.
ВыВы
можете
собственные
представданных,
добавлять
новые поляновые
в интерфейс,
собственные
действия
и
ления
данных,
добавлять
поля создавать
в интерфейс,
создавать
собмногое другое.
ственные
действия и многое другое.
Например, можно
можно добавить
'description'
в форму
редактирования
Например,
добавитьполе
поле
‘description’
в форму
редактизаписи
модели
Book
и
определить
собственное
действие
для
изменения
статуса
рования записи модели Book и определить собственное действие
для
доступностистатуса
книги, как
показано на рис.
117. как показано на рис. 117.
изменения
доступности
книги,
178
записи модели Book и определить собственное действие для изменения статуса
доступности книги, как показано на рис. 117.
Рис.117.
117.Определить
Определитьсобственное
собственное действие
действие для
Рис.
для изменения
изменениястатуса
статуса
Здесь мы добавили поле ‘description’ в форму редактирования
Здесь мы добавили поле 'description' в форму редактирования записи
записи модели Book с помощью атрибута fields. Также определимодели Book с помощью атрибута fields. Также определили собственные
ли собственные действия make_available и make_unavailable, которые изменяют статус доступности книги. Эти действия добавлены
в меню Action («Действие») на странице управления моделью Book.
Формы в Django
Это удобный способ создания HTML-форм для взаимодействия с пользователем на веб-сайте. Формы в Django позволяют
генерировать HTML-код, обрабатывать отправленные данные
и проверять их на корректность.
Определение формы в Django происходит на основе класса, который наследуется от класса forms.Form. В этом классе мы определяем поля формы и их типы, а также правила валидации и обработки данных.
На рис. 118 представлен пример определения простой формы
в Django.
В первой части кода был определен класс ContactForm, который наследуется от класса forms.Form. В этом классе определили
три поля формы: ‘name’, ‘email’ и ‘message’. Поле ‘name’ является текстовым полем с максимальной длиной 100 символов, поле
‘email’ является полем для ввода email-адреса, а поле ‘message’ является текстовым полем с многострочным вводом.
179
их типы, а также правила валидации и обработки данных.
На рис. 118 представлен пример определения простой формы в Django.
Рис. 118. Определение простой формы
Рис. 118. Определение простой формы
Чтобы отобразить форму на веб-странице, можно использовать
метод as_p или as_table для объекта формы. Например, чтобы отобразить форму в виде HTML-кода, можно использовать код, представленный во второй части.
После отправки формы данные могут быть обработаны в представлении (view) с помощью метода ‘POST’ объекта request. Например, чтобы обработать отправленные данные формы, можно использовать код третьей части, в которой идет обработка запросов.
Формы в Django могут использоваться для получения данных
от пользователя, редактирования данных и создания новых записей в базе данных. В Django формы создаются с помощью классов
форм, которые определяют поля формы и их типы.
На рис. 119 представлен пример программного кода для создания формы для регистрации пользователя в Django.
180
для регистрации пользователя в Django.
Рис.
119.
регистрациипользователя
пользователя
в Django
Рис.
119.Создание
Созданиеформы
формы для
для регистрации
в Django
Здесь мы определили класс RegistrationForm, который наследуется от
мы определили
RegistrationForm,
который
наслекласса Здесь
UserCreationForm.
Класскласс
UserCreationForm
предоставляет
стандартные
дуется
от класса UserCreationForm.
Класс
UserCreationForm
поля
для регистрации
пользователя в Django,
такие
как 'username' и предо'password'.
ставляет стандартные поля для регистрации пользователя в Django,
такие как ‘username’ и ‘password’. Добавили поле ‘email’ с типом
заполнения. Для хранения данных пользователя используем модель User из
forms.EmailField, которое требуется для заполнения. Для хранестандартной
библиотеки
Django.
Также определили
метод
save, который
ния данных
пользователя
используем
модель User
из стандартной
сохраняет
данные
пользователя
в базе данных.
Метод
save сохравызывает
библиотеки
Django.
Также определили
метод save,
который
няет данные
пользователя
в базе
данных.
save
вызывает рородительский
метод
save и добавляет
поле
'email' кМетод
объекту
User.
дительский
метод save
и добавляет
поле ‘email’
к объекту
User. код на
Чтобы отобразить
форму
на веб-странице,
можем
использовать
Чтобы
отобразить
форму
на
веб-странице,
можем
использовать
рис. 120.
код на рис. 120.
Добавили поле 'email' с типом forms.EmailField, которое требуется для
Рис. 120.
120.Отображение
Отображение формы
формы на
на веб-странице
веб-странице
Рис.
Здесь мы определили представление
181 registration, которое обрабатывает
запросы на адрес /registration. Если запрос имеет метод POST, создаем объект
Здесь мы определили представление registration, которое обрабатывает запросы на адрес /registration. Если запрос имеет метод
POST, создаем объект формы RegistrationForm с данными из запроса и проверяем его на корректность с помощью метода is_valid.
Если форма проходит проверку на корректность, сохраняем данные пользователя с помощью метода save и выполняем необходимые действия.
Если запрос имеет метод GET, создаем объект формы
RegistrationForm без данных и передаем его в шаблон registration.
html, который может быть представлен как код html (рис. 121).
Здесь была создана HTML-форма с методом «post» и добавлен
Здесь была создана HTML-форма с методом "post" и добавлен токен
токен защиты от CSRF-атаки с помощью тега csrf_token. Затем исзащиты от CSRF-атаки с помощью тега csrf_token. Затем использовали метод
пользовали метод as_p для объекта формы, чтобы отобразить поля
as_p
для объекта
чтобы отобразить поля формы в виде HTML-кода.
формы
в видеформы,
HTML-кода.
Рис.
Рис.121.
121.Html-код
Html-код
Представленный
форму
длядля
регистрации
пользователя
Представленныйкод
кодсоздает
создает
форму
регистрации
пользо- в
Django
класса RegistrationForm.
Форма содержит
поля
вателяс в использованием
Django с использованием
класса RegistrationForm.
Форма
содержит'email',
поля ‘username’,
‘password1’
и ‘password2’,
а так- и
'username',
'password1' и‘email’,
'password2',
а также
правила валидации
же правила
валидации
и обработки на
данных.
Формас отображается
обработки
данных.
Форма отображается
веб-странице
помощью метода
на веб-странице с помощью метода as_p и может быть отправлена
на сервер для обработки. Данные формы сохраняются в базе дансохраняются в базе данных с помощью метода save.
ных с помощью метода save.
as_p и может быть отправлена на сервер для обработки. Данные формы
Тема 7. Сборка и запуск приложения, его публикация в Интернете
Сборка и запуск приложения на Python
Сборка и запуск приложения – процесс разработки и подготовки
программного кода на языке Python, который выполняется на компьютере или
другом устройстве.
Для того чтобы собрать и запустить приложение на Python, необходимо
сделать следующие шаги.
Установка Python: если
у вас
182
еще нет Python на компьютере, то
первым шагом будет его установка. Python можно загрузить с официального
Тема 7. Сборка и запуск приложения,
его публикация в Интернете
Сборка и запуск приложения на Python
Сборка и запуск приложения – процесс разработки и подготовки программного кода на языке Python, который выполняется
на компьютере или другом устройстве.
Для того чтобы собрать и запустить приложение на Python,
необходимо сделать следующие шаги.
• Установка Python: если у вас еще нет Python на компьютере, то первым шагом будет его установка. Python можно загрузить
с официального сайта python.org или воспользоваться установщиком из пакетного менеджера операционной системы.
• Написание кода: после установки Python необходимо написать программный код, который будет выполнять нужные функции. Можно использовать любой текстовый редактор или интегрированную среду разработки (IDE) для написания кода.
• Установка зависимостей: если приложение использует дополнительные библиотеки, необходимо установить их. Для этого
можно воспользоваться менеджером пакетов pip, который входит
в стандартную поставку Python. Например, для установки библиотеки requests можно выполнить команду pip install requests.
• Сборка приложения: для того, чтобы собрать приложение,
необходимо создать исполняемый файл, который можно запустить
на другом компьютере. Для этого можно воспользоваться утилитой
pyinstaller, которая упаковывает код и все его зависимости в один
файл. Например, для упаковки файла main.py в исполняемый файл
можно выполнить команду pyinstaller main.py.
• Запуск приложения: после того как приложение было собрано, его можно запустить на любом компьютере, на котором установлен Python. Для этого нужно запустить исполняемый файл, который был создан на предыдущем шаге.
Важно отметить, что процесс сборки и запуска приложения
на Python может отличаться в зависимости от используемых библиотек, операционной системы и других факторов. Однако описанные
183
общие шаги дают общее представление о том, как можно создать
и запустить приложение на Python.
Рассмотрим более подробно процесс сборки веб-приложения
на Python, включающий в себя несколько шагов, которые обычно
выполняются в следующем порядке:
– настройка виртуального окружения: виртуальное окружение – это изолированное пространство, в котором устанавливаются зависимости вашего проекта, чтобы избежать конфликтов с другими проектами и обеспечить портативность вашего приложения.
Вы можете настроить виртуальное окружение с помощью инструмента venv или virtualenv (в зависимости от версии Python);
– установка зависимостей: зависимости проекта – это библиотеки Python, которые необходимы для работы приложения. Обычно зависимости перечисляются в файле requirements.txt, который
можно создать вручную или автоматически с помощью инструмента pip (например, pip freeze > requirements.txt);
– настройка базы данных: если приложение использует базу
данных, то нужно настроить соединение с базой данных и создать
таблицы и индексы (если это необходимо). Обычно настройки
базы данных перечисляются в файле settings.py проекта, и можно
использовать инструменты Django для создания таблиц и индексов
(например, команды migrate и makemigrations);
– настройка статических файлов: если приложение использует статические файлы (например, CSS, JavaScript, изображения),
то нужно настроить их обслуживание с помощью веб-сервера (например, Nginx или Apache) или с помощью инструментов разработки (например, команды collectstatic в Django);
– настройка конфигурации приложения: в зависимости
от фреймворка, который используется, нам может потребоваться настроить дополнительные параметры приложения, такие как
URL-маршруты, шаблоны, аутентификация и авторизация и т. д.;
– развертывание приложения на сервере: обычно это включает
в себя настройку веб-сервера, настройку обслуживания статических файлов, настройку соединения с базой данных и запуск приложения в режиме продакшена.
184
Для сборки веб-приложения в Django может применяться команда python manage.py collectstatic.
Команда collectstatic – важный инструмент в веб-разработке
на Django, который позволяет собирать все статические файлы
проекта в одном месте, что упрощает их обслуживание и ускоряет
работу веб-приложения.
Статические файлы в веб-разработке – файлы, которые не изменяются в зависимости от конкретного запроса к серверу. Это может включать в себя файлы CSS, JavaScript, изображения и другие
файлы, которые используются в веб-приложении.
Когда вы разрабатываете приложение локально, Django автоматически обслуживает статические файлы из папки static вашего
приложения. Однако при развертывании приложения на сервере
нужно собрать все статические файлы и поместить их в одно место,
чтобы они могли быть обслужены веб-сервером.
Здесь и приходит на помощь команда collectstatic. Она копирует
все статические файлы из папок STATIC вашего проекта (и любых
других папок, указанных в настройках) в папку STATIC_ROOT, которая обычно располагается вне каталога приложения.
Команда collectstatic часто используется в автоматических сценариях развертывания, таких как Continuous Integration и Continuous Deployment, чтобы автоматически собирать и обслуживать
статические файлы при каждом развертывании приложения.
Кроме того, команда collectstatic имеет дополнительные параметры, которые могут быть полезны в различных сценариях.
Например, вы можете использовать параметры --ignore и --exclude
для игнорирования определенных файлов или папок при сборке
статических файлов.
В целом команда collectstatic – важный инструмент в вебразработке на Django, который упрощает обслуживание статических файлов вашего веб-приложения и позволяет быстро и эффективно развертывать ваше приложение на серверах.
185
Запуск веб-приложения на Python
После сборки приложения следует его запуск. Запуск вебприложения на Python – процесс создания и запуска приложения,
которое может принимать запросы от клиентов через Интернет.
Веб-приложения на Python создаются с использованием специальных инструментов, называемых веб-фреймворками, которые
облегчают разработку и запуск веб-приложений.
Конечная цель запуска веб-приложения на Python – создание
приложения, которое может быть запущено на веб-сервере и которое пользователи могут использовать в своих браузерах. При разработке веб-приложения на Python необходимо учитывать следующие аспекты.
Выбор веб-фреймворка: Python имеет множество вебфреймворков, которые могут быть использованы для создания
веб-приложений.
Разработка приложения: создание веб-приложения на Python
включает в себя разработку кода, который будет выполняться
на сервере, а также создание шаблонов, которые будут отображаться на страницах в браузерах пользователей. Для разработки
веб-приложения на Python часто используются стандартные языки,
такие как HTML, CSS и JavaScript, а также библиотеки и фреймворки, такие как jQuery и Bootstrap.
Работа с базами данных: в большинстве веб-приложений
на Python используются базы данных для хранения информации.
Для создания базы данных и ее настройки можно использовать
специальные инструменты веб-фреймворков.
Тестирование приложения: перед запуском веб-приложения на сервере его необходимо протестировать. Тестирование вебприложения на Python включает в себя проверку его функциональности, безопасности и производительности. Для тестирования
веб-приложения на Python можно использовать различные инструменты, такие как Selenium, pytest и Django Testing Framework.
Развертывание приложения на сервере: после тестирования
и отладки веб-приложения на Python его можно развернуть на сервере. Для этого необходимо настроить веб-сервер и установить все
186
зависимости, которые требуются для работы приложения. Для развертывания веб-приложения на Python можно использовать различные инструменты, такие как Apache, Nginx, Gunicorn и uWSGI.
Процессы регистрации и авторизации пользователей
Одними из важных функций любого веб-приложения являются процессы регистрации и авторизации пользователей, которые
позволяют им создавать учетные записи, входить в свои учетные
записи и работать с приложением в соответствии со своими правами доступа.
Регистрация пользователей – процесс создания учетной записи
для нового пользователя в приложении. Для регистрации пользователей в Django можно использовать встроенный модуль django.
contrib.auth.
Для регистрации пользователей выполняется следующая последовательность действий:
– сначала нужно создать форму для регистрации новых пользователей;
– затем должны создать представление, которое будет обрабатывать запросы на регистрацию новых пользователей.
Авторизация пользователей – процесс проверки подлинности учетных данных пользователя и предоставления ему доступа
к функциям приложения. Для авторизации пользователей в Django
можем использовать встроенный модуль django.contrib.auth.
Для авторизации пользователей выполняется следующая последовательность действий:
– сначала следует создать форму для авторизации зарегистрированных пользователей;
– затем должны создать представление, которое будет обрабатывать запросы на авторизацию пользователей.
После регистрации и авторизации пользователей мы можем защитить некоторые представления, чтобы они были доступны только зарегистрированным и аутентифицированным пользователям.
Для защиты представлений в Django можем использовать декораторы @login_required.
187
Таким образом, регистрация и авторизация пользователей являются важными элементами веб-приложений. В Django можем
использовать встроенные модули и декораторы для реализации
этих функций.
Рассмотрим последовательность шагов для процесса регистраРассмотрим
последовательность
для процесса
ции пользователей
веб-приложенияшагов
с помощью
Python ирегистрации
фреймпользователей
веб-приложения с помощью Python и фреймворка Django.
ворка Django.
Сначала
Сначаланужно
нужно создать
создать форму,
форму, которая
которая будет
будет использоваться
использоватьсядля
для
регистрации
новых
пользователей.
В
Django
можем
регистрации новых пользователей. В Django можем использовать использокласс формы,
вать
класс
формы,
который
наследуется
от
forms.ModelForm.
В этом
который наследуется от forms.ModelForm. В этом классе определяем
поля
классе определяем поля формы, которые будут использоваться для
формы, которые будут использоваться для ввода данных пользователей. В
ввода данных пользователей. В примере, представленном на рис.
примере, представленном на рис. 122, мы создали класс UserRegistrationForm,
122, мы создали класс UserRegistrationForm, который наследуется
который
наследуется от forms.ModelForm.
Добавили дополнительное
поле
от forms.ModelForm.
Добавили дополнительное
поле ‘password’,
'password',
использоваться
дляввода
ввода пароля
пароля пользователей.
Затем
котороекоторое
будет будет
использоваться
для
пользователей.
Затем определили
указывающий
модель,с этой
связанную
определили
класс Meta, класс
которыйMeta,
указывает
модель, связанную
формой, и
с
этой
формой,
и
поля,
которые
будут
использоваться
для
поля, которые будут использоваться для ввода данных пользователей. ввода
данных пользователей.
Рис. 122.
122. Добавление
Добавление пароля
пароля
Рис.
После создания формы для регистрации новых пользователей нужно
После создания формы для регистрации новых пользователей
создать
представление,
которое будеткоторое
обрабатывать
на регистрацию.
нужно
создать представление,
будет запросы
обрабатывать
запросы В
примере,
представленном
на рис. представленном
123, мы определили
функцию
register_view,
на регистрацию.
В примере,
на рис.
123, мы
опре-
делили
функцию
register_view,
которая
былаЕсли
ли отправлекоторая
проверяет,
была
ли отправлена
формапроверяет,
методом POST.
форма была
на формапроверяем
методом ее
POST.
Если форма
была
отправлена,
проверяем
отправлена,
на валидность,
и если
она
прошла проверку,
создаем
ее на валидность, и если она прошла проверку, создаем новую учетную запись пользователя и перенаправляем на домашнюю страницу.
Если форма не была отправлена, отображаем пустую форму.
Если форма не была отправлена, отображаем пустую форму.
новую учетную запись пользователя и перенаправляем на домашнюю страницу.
188
Рис. 123. Создание представления
Рис.
Рис.123.
123.Создание
Создание представления
представления
Последний шаг – создание шаблона, который будет использоваться для
Последний шаг – создание шаблона, который будет использоПоследний
шаг – создание
шаблона,
которыйна
будет
использоваться
ваться
для отображения
формы
регистрации
сайте
(рис. 124). для
отображения формы регистрации на сайте (рис. 124).
отображения формы регистрации на сайте (рис. 124).
Рис.
124.
Создание шаблона
Рис.
124.
Создание
шаблона
Здесь мы создали шаблон register.html, который наследуется
Здесь мы создали Рис.
шаблон
который наследуется от базового
124.register.html,
Создание шаблона
от базового
шаблона
base.html.
Определили
блок content, который
шаблона base.html. Определили блок content, который будет отображать форму
будет
отображать форму регистрации. Использовали тег {% csrf_
регистрации. Использовали тег {% csrf_token %} для защиты формы от атак
Здесь
мы защиты
создали шаблон
который наследуется
от базового
token
%}
для
формыregister.html,
от атак межсайтовой
подделки
запромежсайтовой подделки запросов (CSRF). Также использовали метод form.as_p,
шаблона
base.html.
Определили
блок content,
который будет
отображать
форму
сов
(CSRF).
Также
использовали
метод form.as_p,
чтобы
отобразить
чтобы отобразить поля формы в виде параграфов.
регистрации.
Использовали
тег
{%
csrf_token
%}
для
защиты
формы
от
атак
поля
формы
в
виде
параграфов.
Но чтобы этот шаблон работал, нужно определить маршрут для
Но чтобы
этот
шаблон
работал,
нужно
определить
маршрут
для
межсайтовой
подделки
запросов
(CSRF).
Также
метод
form.as_p,
представления
register_view.
Можно
сделать
это, использовали
добавив
код, представленный
представления
register_view.
Можно
сделать
это,
добавив
код,
предчтобы
отобразить
поля
формы в виде параграфов.
на рис.
125, в файл
urls.py.
ставленный
на
рис.
в файл
urls.py.нужно определить маршрут для
Но чтобы этот 125,
шаблон
работал,
представления register_view. Можно сделать это, добавив код, представленный
на рис. 125, в файл urls.py.
Рис.
125.
маршрута
Рис.
125.Добавление
Добавление маршрута
Процесс авторизации пользователей веб-приложения с поПроцесс и
авторизации
пользователей
с помощью Python
и
мощью Python
фреймворка
Djangoвеб-приложения
включает несколько
шагов.
фреймворка Django включает несколько шагов.
Первый шаг – следует создать
форму,
189
которая будет использоваться для
авторизации пользователей. В Django можно использовать класс формы,
который наследуется от AuthenticationForm. В примере на рис. 126 мы создали
Процесс авторизации пользователей веб-приложения с помощью Python и
фреймворка Django включает несколько шагов.
Первый шаг – следует создать форму, которая будет использоваться для
авторизации
Django форму,
можно которая
использовать
формы,
Первыйпользователей.
шаг – следуетВсоздать
будеткласс
использо-
ваться наследуется
для авторизации
пользователей.
В Django
можно
исполькоторый
от AuthenticationForm.
В примере
на рис.
126 мы
создали
зовать
класс формы,
который
наследуется
от AuthenticationForm.
класс
UserLoginForm,
который
наследуется
от AuthenticationForm.
Определили
В примере
рис. 126
создали класс
который и
поля
формы, на
которые
будутмы
использоваться
дляUserLoginForm,
ввода имени пользователя
наследуется от AuthenticationForm. Определили поля формы, которые будут использоваться для ввода имени пользователя и пароля.
пароля.
Рис. 126. Форма для авторизации
Рис. 126. Форма для авторизации
После
создания формы для авторизации пользователей надо
После создания формы для авторизации пользователей надо создать
создать представление, которое будет обрабатывать запросы на авпредставление, которое будет обрабатывать запросы на авторизацию (рис. 127).
торизацию (рис. 127). Здесь мы определили функцию login_view,
Здесь мы определили функцию login_view, которая проверяет, была ли
которая проверяет, была ли отправлена форма методом ‘POST’.
отправлена
форма
методом
'POST'. Если
форма была
отправлена,
проверяем
Если форма
была
отправлена,
проверяем
ее на
валидность
и, еслиее
на
валидность
если она прошла
проверку, аутентифицируем
она
прошла и,проверку,
аутентифицируем
пользователяпользователя
и создаем и
создаем
сеанс в входа
в систему.
Затем перенаправляем
пользователя
сеанс входа
систему.
Затем перенаправляем
пользователя
на до-на
машнюю страницу.
Еслиформа
форма
была
отправлена,
отображаем
домашнюю
страницу. Если
не не
была
отправлена,
отображаем
пустую
пустую
форму.
форму.
Рис.127.
127.Создание
Созданиепредставления
представления
Рис.
Последний шаг – создание шаблона, который будет использоПоследний
шаг – создание
шаблона,
который на
будет
использоваться
ваться
для отображения
формы
авторизации
сайте.
В примередля
отображения
авторизации
на сайте.
В примере
на рис. 128
мы создали
на рис. 128формы
мы создали
шаблон
login.html,
который
наследуется
шаблон login.html, который наследуется от базового шаблона base.html.
190
отображать форму авторизации.
Определили блок content, который
будет
Использовали тег {% csrf_token %} для защиты формы от атак межсайтовой
отображения формы авторизации на сайте. В примере на рис. 128 мы создали
шаблон login.html, который наследуется от базового шаблона base.html.
Определили
блок
content,base.html.
который Определили
будет отображать
форму авторизации.
от базового
шаблона
блок content,
который
будет отображать
форму авторизации.
Использовали
тегмежсайтовой
{% csrf_
Использовали
тег {% csrf_token
%} для защиты
формы от атак
token %}запросов
для защиты
формы
от атак
межсайтовой
подделки
запроподделки
(CSRF).
Также
использовали
метод
form.as_p,
чтобы
сов (CSRF).
метод form.as_p, чтобы отобразить
отобразить
поля Также
формыиспользовали
в виде параграфов.
поля формы в виде параграфов.
Рис. 128.
128. Создание
Создание шаблона
шаблона
Рис.
Но чтобы этот шаблон работал, нужно определить маршрут для
Но чтобы этот
шаблонЭто
работал,
определить
маршрут
представления
login_view.
можнонужно
сделать,
добавив код,
пред-для
представления
Этов можно
сделать, добавив код, представленный на
ставленныйlogin_view.
на рис. 129,
файл urls.py.
рис. 129, в файл urls.py.
Рис. 129.
129. Определение
Определение маршрута
маршрута
Рис.
Защита представлений веб-приложения с помощью Python
Защита представлений
веб-приложения
помощью Python
и фреймворка
Django – процесс
обеспечения сбезопасности
досту- и
фреймворка
Django –веб-приложения.
процесс обеспечения
безопасности
доступанесколько
к страницам
па к страницам
Django
предоставляет
методов
для
защиты
представлений,
таких
как
аутентификация
веб-приложения. Django предоставляет несколько методов для защиты
пользователей,
авторизация
доступа пользователей,
к страницам иавторизация
защита от доступа
атак
представлений,
таких
как аутентификация
межсайтовой подделки запросов (CSRF).
к страницам и защита от атак межсайтовой подделки запросов (CSRF).
Аутентификация пользователей – процесс проверки подлинноАутентификация пользователей – процесс проверки подлинности
сти пользователя с использованием имени пользователя и пароля.
пользователя
имени функция
пользователя
и пароля. Для
этого в
Для этого св использованием
Django используется
authenticate(),
которая
Django
используется
функция
authenticate(),
объект (имя
запроса
принимает
объект
запроса
и учетные которая
данныепринимает
пользователей
пользователя
пароль) и возвращает
объект ипользователя,
если
и учетные
данныеи пользователей
(имя пользователя
пароль) и возвращает
аутентификация
прошла
успешно.
объект пользователя, если аутентификация прошла успешно.
Авторизация – процесс проверки, имеет ли пользователь право доступа к
191декоратор
странице. В Django можем использовать
@login_required для защиты
доступа к страницам только для аутентифицированных пользователей. Этот
и учетные данные пользователей (имя пользователя и пароль) и возвращает
объект пользователя, если аутентификация прошла успешно.
Авторизация – процесс проверки, имеет ли пользователь право доступа к
– процесс
проверки,
имеет ли
пользователь для
пра-защиты
странице. Авторизация
В Django можем
использовать
декоратор
@login_required
во доступа к странице. В Django можем использовать декоратор @
доступа
к страницам
для
аутентифицированных
пользователей.
login_required
длятолько
защиты
доступа
к страницам только
для аутен- Этот
декоратор
перенаправляет
не аутентифицированных
пользователей
на страницу
тифицированных
пользователей.
Этот декоратор
перенаправляет
аутентифицированных
пользователейнанарис.
страницу
входа не
в систему.
Например, как представлено
130. входа в систему. Например, как представлено на рис. 130.
Рис.130.
130. Создание
Рис.
Созданиедекоратора
декоратора
Django также предоставляет встроенную защиту от атак межсайтовой подделки запросов (CSRF) с помощью механизма CSRFтокенов. Когда пользователь отправляет форму, Django автоматически генерирует уникальный CSRF-токен и включает его в форму
в виде скрытого поля. При отправке формы этот токен проверяется на сервере, чтобы убедиться, что запрос отправлен именно тем
же пользователем, который запрашивает страницу.
Отладка веб-приложения
Процесс выявления и устранения ошибок в коде – это отладка
веб-приложения на Python и Django.
Первый шаг в отладке веб-приложения на Django – включение
режима отладки. Режим отладки – режим, в котором Django выводит дополнительную информацию об ошибках и исключениях
в вашем коде. Вы можете включить режим отладки, установив параметр DEBUG в файле проекта: settings.py (DEBUG = True).
Второй шаг в отладке веб-приложения на Django – логирование
ошибок. Логирование – это процесс записи важной информации
об ошибках и исключениях, которые могут возникнуть в вашем
коде. Django предоставляет встроенный модуль логирования, который можно настроить в файле settings.py вашего проекта так, как
представлено на рис. 131. Здесь мы настроили логирование в файл
192
django.log на уровне ‘DEBUG’. Логирование включено для модуля
django, и все сообщения будут записываться в файл.
Рис. 131. Логирование
Третий шаг в отладкеРис.
веб-приложения
131. Логирование на Django – использование
Рис. 131. Логирование
отладчика. Отладчик – это инструмент, который позволяет выполнять код
Третий шаг в отладке веб-приложения на Django – использовашаг в отладке
веб-приложения
– использование
пошагово Третий
и проверять
значения
переменных нав Django
реальном
времени. Django
ние отладчика. Отладчик – это инструмент, который позволяет выотладчика. Отладчик – это инструмент, который позволяет выполнять код
предоставляет
встроенный
который
можно
использовать
с помощью
полнять код
пошагово иотладчик,
проверять
значения
переменных
в реальном
пошагово и проверять значения переменных в реальном времени. Django
времени.
Django предоставляет
встроенный
который
модуля
pdb (import
pdb; pdb.set_trace()).
При отладчик,
выполнении
кода можпрограмма
предоставляет встроенный отладчик, который можно использовать с помощью
но использовать
с помощью модуля pdb (import pdb; pdb.set_trace()).
остановится
строке.
модуля на
pdbэтой
(import
pdb; pdb.set_trace()). При выполнении кода программа
При выполнении кода программа остановится на этой строке.
Четвертыйнашаг
отладке веб-приложения на Django – использование
остановится
этой встроке.
Четвертый шаг в отладке веб-приложения на Django – испольЧетвертый
в отладке
веб-приложения
на Django
– использование
тестов.
Тесты
– этошаг
наборы
инструкций,
которые
проверяют
правильность
зование
тестов.
Тесты
– это
наборы инструкций,
которые
проветестов.
Тесты
–
это
наборы
инструкций,
которые
проверяют
правильность
ряют
правильность
работы кода.
Django предоставляет
встроенный
работы
кода.
Django предоставляет
встроенный
модуль тестирования,
который
работы кода.
Django предоставляет
встроенный
модуль
тестирования,
который
модуль
тестирования,
который
позволяет
создавать
и
запускать
позволяет создавать и запускать тесты. Пример представлен на рис. 132.
позволяет
создавать
и запускать тесты.
Пример
тесты.
Пример
представлен
на рис.
132. представлен на рис. 132.
Рис. 132. Запуск теста
Рис. 132.
132.Запуск
Запусктеста
теста
Рис.
193
Здесь мы создали тестовый класс BookTestCase, проверяющий
правильность названия созданной книги. Запустить тесты можно
с помощью команды python manage.py test.
Пятый шаг в отладке веб-приложения на Django – использование инструментов профилирования. Инструменты профилирования
позволяют определить, какие участки вашего кода занимают больше
всего времени. Django предоставляет встроенный инструмент профилирования (- django-debug-toolbar). Это расширение предоставляет информацию о времени выполнения запросов, использовании
кэша, производительности и другую полезную информацию.
Развертывание веб-приложения
Следующим шагом после создания приложения с помощью
Django является его развертывание. Развертывание веб-приложения на Python с использованием Django – это процесс подготовки
и установки приложения, созданного с помощью Django фреймворка, на веб-сервере, чтобы пользователи могли получить доступ
к нему через Интернет.
Процесс развертывания включает в себя несколько этапов.
• Выбор хостинга и настройка сервера. Для развертывания
веб-приложения необходимо выбрать хостинг-провайдера и настроить сервер для работы с Python и Django.
• Установка и настройка веб-сервера. Веб-сервер отвечает
за обработку запросов к приложению и отправку ответов. Наиболее
распространенными веб-серверами для Python являются Apache
и Nginx.
• Установка и настройка базы данных. Django поддерживает несколько типов баз данных, включая PostgreSQL, MySQL
и SQLite. Необходимо установить выбранную базу данных на сервере и настроить ее для работы с Django.
• Установка и настройка Python и Django. На сервере необходимо установить нужную версию Python и Django, а также их зависимости.
• Конфигурация приложения. Необходимо настроить приложение для работы с выбранным веб-сервером и базой данных,
а также для обработки статических файлов и медиафайлов.
194
• Тестирование и запуск приложения. После того, как приложение настроено, необходимо протестировать его работу и запустить на сервере.
Развертывание веб-приложения на Python с использованием
Django может быть сложным и трудоемким процессом, но он является необходимым для того, чтобы пользователи могли получить
доступ к вашему приложению через Интернет.
Для развертывания веб-приложения на Python могут быть использованы различные инструменты – программные средства
и библиотеки, которые позволяют упростить процесс развертывания Django-приложений на веб-серверах.
Рассмотрим наиболее распространенные инструменты развертывания веб-приложений на Python с использованием Django.
• Gunicorn – это WSGI-сервер (Web Server Gateway Interface),
который предназначен для запуска веб-приложений на Python.
Gunicorn поддерживает несколько рабочих процессов, что позволяет обрабатывать большое количество запросов одновременно.
• uWSGI – еще один WSGI-сервер, который предназначен для
запуска веб-приложений на Python. uWSGI также поддерживает
несколько рабочих процессов и может работать с различными вебсерверами.
• Apache – один из самых популярных веб-серверов, который
может использоваться для развертывания Django-приложений. Для
работы с Django необходимо установить модуль mod_wsgi, который
позволяет Apache запускать Python-приложения.
• Nginx – еще один популярный веб-сервер, который может использоваться для развертывания Django-приложений. Для работы
с Django необходимо установить модуль uWSGI, который позволяет
Nginx запускать Python-приложения.
• Docker – платформа для упаковки и запуска приложений
в контейнерах.
• Ansible – инструмент для автоматизации развертывания приложений.
• Fabric – еще один инструмент для автоматизации развертывания приложений. Fabric предоставляет набор команд для выпол-
195
нения задач на удаленных серверах, таких как установка пакетов,
настройка конфигурации и запуск приложений.
• Heroku – облачная платформа для развертывания веб-приложений. Heroku позволяет развернуть Django-приложение на серверах
в облаке без необходимости настройки сервера и инфраструктуры.
Публикация веб-приложения
Последним шагом в разработке веб-приложения является его
публикация. Подготовка к публикации веб-приложения на Python
включает в себя несколько шагов.
• Подготовка кода приложения. Перед публикацией необходимо убедиться, что код приложения находится в стабильном состоянии и соответствует лучшим практикам программирования. Код
должен быть хорошо организован, читаемый и поддерживаемый.
Также необходимо убедиться, что приложение написано в соответствии с принципами безопасности.
• Установка зависимостей. Перед публикацией необходимо
убедиться, что все зависимости приложения установлены и настроены правильно.
• Запуск тестов. Перед публикацией необходимо убедиться,
что тесты приложения работают правильно и покрывают все функциональные возможности приложения.
• Настройка сервера. Перед публикацией необходимо настроить сервер, на котором будет работать приложение.
• Настройка базы данных. Если приложение использует базу
данных, необходимо настроить ее перед публикацией. Создайте
базу данных и пользователя для приложения и убедитесь, что конфигурация базы данных правильная.
• Настройка системы логирования. Необходимо настроить
систему логирования, чтобы можно было отслеживать ошибки
и проблемы, которые могут возникнуть в продакшн-среде. Включите логирование уровня ошибок и предупреждений, а также логирование запросов, чтобы можно было отслеживать производительность приложения.
• Защита приложения. Необходимо защитить приложение
от атак, таких как SQL-инъекции, подделка запросов межсайто 196
вого скриптинга (XSS) и подделка межсайтовой подписи запроса
(CSRF). Используйте соответствующие инструменты и библиотеки
для обеспечения безопасности приложения.
Подготовка к публикации веб-приложения на Python с использованием Django – это процесс подготовки приложения к развертыванию на веб-сервере после того, как приложение было протестировано и отлажено.
Рассмотрим наиболее важные шаги, необходимые для подготовки Django-приложения к публикации.
Перед публикацией приложения необходимо создать
backup-копии кода, базы данных и других важных файлов, чтобы
в случае возникновения проблем можно было быстро восстановить
работу приложения.
Перед публикацией необходимо настроить окружение
на веб-сервере. Необходимо установить все необходимые зависимости и библиотеки, а также настроить параметры окружения,
такие как переменные окружения и параметры конфигурации.
Перед публикацией необходимо настроить безопасность
приложения. Необходимо убедиться, что приложение защищено
от взлома и несанкционированного доступа.
Настройка логирования. Логирование – это процесс записи
действий приложения в журнал. В журнале должна быть информация о действиях пользователей, ошибках и других событиях, которые могут повлиять на работу приложения.
Для обеспечения стабильной работы приложения необходимо настроить мониторинг, который позволяет отслеживать работу
приложения, обнаруживать проблемы и предотвращать их возникновение.
Если приложение должно обрабатывать большое количество
запросов, необходимо настроить балансировку нагрузки. Балансировщик нагрузки позволяет распределять запросы между несколькими серверами, что обеспечивает более быстрый и стабильный
ответ на запросы.
После подготовки приложения необходимо протестировать
его на веб-сервере. Тестирование должно включать проверку рабо-
197
тоспособности, производительности, безопасности и других аспектов приложения.
После публикации необходимо документировать процесс
развертывания и настройки приложения. Документация должна содержать описание каталогов, файлов, зависимостей и параметров конфигурации, а также инструкции по развертыванию
и обслуживанию приложения.
Подготовка к публикации отлаженного веб-приложения является важным этапом, который позволяет обеспечить стабильную
и безопасную работу приложения на веб-сервере. Каждый шаг
в этом процессе играет важную роль, и необходимо уделить достаточное внимание каждому из них.
Контрольные вопросы
1. Почему Python популярен в веб-разработке?
2. Какие популярные фреймворки Python используются для разработки веб-приложений?
3. Что такое Django и какую функциональность предоставляет?
4. Какие принципы веб-разработки в Python вы знаете?
5. Что такое виртуальное окружение в Python? Как создать виртуальное окружение в Python? Как активировать виртуальное окружение? Как установить пакеты в виртуальное окружение?
6. Зачем нужен файл requirements.txt при работе с виртуальным
окружением? Как активировать виртуальное окружение на другой системе и установить зависимости из файла requirements.txt?
Как деактивировать виртуальное окружение?
7. Какие преимущества использования виртуального окружения
в Python?
8. Что такое библиотеки Python? Какие популярные библиотеки
Python для работы с массивами данных вы знаете?
9. Что делает библиотека NumPy? Что такое библиотека Pandas
и какие возможности она предоставляет? Для чего используется
библиотека Matplotlib?
10. Что такое библиотека Scikit-learn и какие задачи машинного
обучения она решает?
198
11. Какие инструменты предоставляет библиотека Django?
12. Что такое библиотека Flask и какую функциональность она предоставляет?
13. Какие еще библиотеки Python вы знаете и для каких задач они
используются?
14. Какие основные компоненты веб-приложения на Python с использованием Django?
15. Как организовать аутентификацию и авторизацию пользователей в веб-приложении на Django?
16. Что такое ORM и зачем оно используется в веб-разработке?
17. Что такое MVC-архитектура и как она применяется в веб-разработке на Python?
18. Что такое шаблоны веб-страниц и как они используются
в веб-разработке?
19. Какие инструменты предоставляет Django для работы с базами
данных?
20. Какие методы HTTP-запросов вы знаете?
21. Какие преимущества и недостатки у фреймворка Flask по сравнению с Django? Как создать маршруты (URL-адреса) в веб-приложении на Flask?
22. Как создать форму в веб-приложении на Django?
23. Как обрабатывать и валидировать данные, отправленные через
форму в Django?
24. Как развернуть веб-приложение на Python на сервере?
Тесты для самоконтроля
(ответы см. в приложении)
1. Какие языки программирования используются для создания
серверной части веб-приложений? (один вариант ответа)
а) HTML, CSS
б) JavaScript
в) Python, PHP, Ruby
г) SQL
199
2. Какой фреймворк для разработки веб-приложений предоставляет всестороннюю инфраструктуру, включая ORM для работы
с базами данных, аутентификацию и авторизацию пользователей?
(один вариант ответа)
а) Django
б) Flask
в) Pyramid
г) Bottle
3. Какие команды нужно выполнить, чтобы создать новое виртуальное окружение и установить все необходимые зависимости
из файла requirements.txt при переносе проекта на другую систему?
(один вариант ответа)
а) создать новое окружение и установить зависимости вручную
б) активировать старое окружение и установить зависимости
вручную
в) создать новое окружение и установить зависимости из файла
requirements.txt
г) активировать старое окружение и установить зависимости
из файла requirements.txt
4. Что такое библиотека Django? (один вариант ответа)
а) библиотека для работы с данными
б) библиотека для визуализации данных
в) библиотека для машинного обучения
г) библиотека для создания веб-приложений
5. Что такое ORM в Django? (один вариант ответа)
а) инструмент для создания динамических HTML-страниц
б) инструмент для работы с базами данных
в) инструмент для тестирования приложений
г) инструмент для маршрутизации запросов
6. Что необходимо сделать для создания нового приложения
внутри проекта Django? (несколько вариантов ответа)
а) создать новую папку для приложения
б) выполнить команду python manage.py startapp app_name
в) создать файлы для работы приложения
г) добавить маршруты (URL-адреса) в файл urls.py
200
7. Какие файлы содержатся в пакете project_name/ в структуре
проекта Django? (несколько вариантов ответа)
а) init.py
б) settings.py
в) urls.py
г) manage.py
8. Для создания приложения в Django нужно выполнить команду (один вариант ответа)
а) python manage.py startproject app_name
б) python manage.py newapp app_name
в) python manage.py createapp app_name
г) python manage.py makeapp app_name
9. Для создания миграций в Django нужно выполнить команду,
которая (несколько вариантов ответа)
а) создаст файлы миграций на основе определенных моделей данных
б) создаст таблицы в базе данных на основе определенных моделей
данных
в) создаст файлы миграций и таблицы в базе данных на основе
определенных моделей данных
г) создаст только файлы миграций без таблиц в базе данных
10. Какой файл нужно создать, чтобы создать шаблон в Django?
(один вариант ответа)
а) models.py
б) views.py
в) settings.py
г) home.html
11. Что определяет шаблон в Django? (несколько вариантов ответа)
а) HTML-разметку
б) CSS-стили
в) JavaScript-скрипты
г) теги шаблонов Django
201
12. Какие шаги необходимо выполнить для создания веб-страницы в Django? (несколько вариантов ответа)
а) создать новый файл шаблона в папке templates вашего приложения
б) создать функцию представления в файле views.py вашего приложения
в) подключить шаблон к функции представления
г) создать маршрут в файле models.py вашего приложения
13. Какие элементы включаются в шаблоны Django? (один вариант ответа)
а) HTML-код и специальные теги шаблонного языка
б) CSS-стили и JavaScript-скрипты
в) файлы моделей и функции представлений
г) маршруты и настройки приложения
14. Какой тег используется для включения значения переменной в шаблон? (один вариант ответа)
а) {% extends %}
б) {% block %}
в) {{ переменная }}
г) {% for %}
15. Какие преимущества имеет использование шаблонов
в Djan-go? (несколько вариантов ответа)
а) упрощение разработки кода
б) упрощение поддержки кода
в) создание динамических веб-страниц
г) упрощение настройки сервера
16. Какие типы баз данных поддерживаются в Python? (один
вариант ответа)
а) только реляционные БД
б) только NoSQL БД
в) реляционные и NoSQL БД
г) только MongoDB
202
17. Какие операции можно выполнять с помощью библиотек
для работы с базами данных в Python? (несколько вариантов ответа)
а) создание соединения с базой данных
б) создание, изменение и удаление таблиц
в) выполнение запросов и получение данных из базы данных
г) работа с файлами в операционной системе
18. Что такое модели в Django? (один вариант ответа)
а) классы Python, определяющие структуру таблиц в базе данных
б) библиотека для работы с базами данных
в) модуль для отображения данных на веб-страницах
г) язык программирования для создания веб-приложений
19. Что делает метод filter() в ORM Django? (один вариант ответа)
а) возвращает все объекты модели
б) возвращает единственный объект модели, удовлетворяющий
определенному условию
в) возвращает объекты модели, удовлетворяющие определенному
условию
г) обновляет значения полей у объектов модели, удовлетворяющих
определенному условию
20. Что такое миграции в Django? (один вариант ответа)
а) механизм, который позволяет автоматически создавать и обновлять схему базы данных на основе изменений, внесенных в модели Django
б) способ создания визуальных отчетов на основе данных в базе
данных
в) механизм, который позволяет автоматически создавать и обновлять схему базы данных на основе изменений, внесенных в контроллеры Django
г) инструмент для создания интерфейса базы данных для конечных
пользователей
203
21. Какие инструменты предоставляет Django ORM для работы
с данными? (несколько вариантов ответа)
а) миграции базы данных
б) механизмы кэширования
в) ORM-инструменты
г) инструменты для создания интерфейса базы данных для конечных пользователей
22. Какой метод Django ORM можно использовать для выборки
всех объектов из таблицы в базе данных? (один вариант ответа)
а) «all»
б) «filter»
в) «order_by»
г) «aggregate»
23. Какое поле используется для определения связи «многиеко-многим» в Django ORM? (один вариант ответа)
а) ForeignKey
б) OneToOneField
в) ManyToManyField
г) CharField
24. Какой метод используется для удаления связи в Django
ORM? (один вариант ответа)
а) delete
б) remove
в) detach
г) все варианты ответа верны
25. Какой метод используется для получения всех объектов модели из базы данных? (один вариант ответа)
а) objects.all()
б) objects.get()
в) objects.create()
г) objects.update()
204
26. Что такое Django Forms? (один вариант ответа)
а) инструмент для работы с базой данных, используя объекты
Python вместо SQL-запросов
б) инструмент для создания HTML-форм
в) встроенный интерфейс администратора
г) инструмент для создания API для взаимодействия с базой данных
27. Какие инструменты в Django позволяют создавать, обновлять и удалять данные в базе данных? (несколько вариантов ответа)
а) ORM
б) Django Admin
в) Django Forms
г) Django Rest Framework
28. Какие действия могут быть выполнены с помощью форм
в Django? (несколько вариантов ответа)
а) получение данных от пользователя
б) редактирование данных
в) создание новых записей в базе данных
г) удаление записей из базы данных
29. Какой инструмент можно использовать для установки зависимостей проекта в Python? (один вариант ответа)
а) pip
б) venv
в) virtualenv
г) requirements.txt
30. Какие шаги включает процесс сборки веб-приложения
на Python? (несколько вариантов ответа)
а) настройка виртуального окружения
б) установка зависимостей
в) настройка базы данных
г) настройка статических файлов
205
Практические задания по темам модуля 2
Тема «Создание веб-приложения на Python
с использованием Django»
Задание 1. Создайте виртуальное окружение для разработки
веб-приложения с использованием Django.
Ход работы
1. Изучите методические рекомендации.
2. Создайте виртуальное окружение, которое будет содержать
установленную библиотеку Django.
Рассмотрим выполнение задания при помощи сервиса replit
Для
на на
сервисе
replitreplit
виртуального
окружения
нажимаем
Create
Длясоздания
создания
сервисе
виртуального
окружения
нажи-
создания
маемДля
Create
Repl.на сервисе replit виртуального окружения нажимаем Create
Repl.
Repl.
Появляется
окно
ссвыбором
шаблона
проекта.
Появляется
окно
с выбором
шаблона
проекта.
Появляется окно
выбором
шаблона
проекта.
Выбираем Python.
Выбираем Python.
206
Выбираем
Python.
Выбираем
Python.
Задаем
название.
Задаем название.
Задаем название.
Нажимаем Create
Repl.
Нажимаем
Create
Repl.
Нажимаем Create
Repl.
Создалось виртуальное окружение.
Создалось виртуальное окружение.
207
Создалось
виртуальное
окружение.
Создалось виртуальное
окружение.
Создалось виртуальное окружение.
Справа ввокне
находим
вкладку
ShellShell
и переходим
в неё. в неё.
Справа
окне
находим
вкладку
и переходим
Справа в окне
находим
вкладку
Shell и переходим
в неё.
Установим
фреймворк
Django
командой
pythonpython
-m pip-minstall
Django,
Установим
фреймворк
Django
командой
pip install
вписав
её в вписав
консоль:её в консоль:
Django,
Как
в консоли
появится
надпись
«Successfully
installed installed
Django…»,
Кактолько
только
в консоли
появится
надпись
«Successfully
значит,
пакет установлен
в виртуальное
окружение.
Django…»,
значит, пакет
установлен
в виртуальное окружение.
Рассмотрим задачу для примера на локальной машине
Необходимо написать программу, которая просит пользователя ввести два
208 произведение и частное.
числа и выводит на экран их сумму,разность,
Для выполнения задания необходимо сделать следующие шаги.
Рассмотрим задачу для примера на локальной машине
Необходимо написать программу, которая просит пользователя
ввести два числа и выводит на экран их сумму, разность, произведение и частное.
Для выполнения задания необходимо сделать следующие шаги.
Создайте новую папку с названием my_project на рабочем столе
или в любой другой удобной для вас директории.
Откройте командную строку и перейдите в созданную папку, используя
Откройте
командную
строку
ии перейдите
в созданную
папку,
используя
Откройте
командную
строку
и перейдите
в созданную
папку,
Откройте
командную
строку
перейдите
в созданную
папку, используя
команду
cd /path/to/my_project.
используя
команду
cd /path/to/my_project.
cd /path/to/my_project.
Откройте
командную
строку и перейдите в созданную
команду
cdкоманду
/path/to/my_project.
папку, используя
команду cd /path/to/my_project.
Создайте виртуальное окружение, используя команду python -m venv env.
Создайте
виртуальное
окружение,
используя
команду
Создайте
виртуальное
окружение,
используя
команду
python python
-m venv-m
env.
venv env. Создайте виртуальное окружение, используя команду python -m venv env.
Создайте виртуальное окружение, используя команду python -m venv env.
Откройте виртуальное окружение через Visual Studio Code, выбрав пункт
File – Откройте
Openвиртуальное
Folder.
виртуальное
окружение через
Studio
Code,Code,
выбраввыбрав
пункт
Откройте
окружение
черезVisual
Visual
Studio
пункт
Откройте виртуальное окружение через Visual Studio Code,
File – Open Folder.
Fileвыбрав
– Open пункт
Folder. File – Open Folder.
Откройте виртуальное окружение через Visual Studio Code, выбрав пункт
File – Open Folder.
Перейдите в созданную папку и нажмите на кнопку «Выбор папки».
Перейдите в созданную папку и нажмите на кнопку «Выбор папки».
Перейдите в созданную папку и нажмите на кнопку «Выбор папки».
209
Перейдите в созданную папку и нажмите на кнопку «Выбор
папки».
В левой
окна
появятся
файлы
проекта.
левой
части
окна
появятся
файлы
проекта.
В
левойчасти
части
окна
появятся
файлы
проекта.
В левой
части
окна
появятся
файлы
проекта.
Откройте терминал, нажав на иконку восклицательного знака в левом
Откройте терминал,
терминал,
нажав
на на
иконку
восклицательного
знака ввзнака
левом
Откройте
нажав
на
иконку
восклицательного
знака
левом
Откройте
терминал,
нажав
иконку
восклицательного
нижнем
углу
Visual
Studio
Code.
нижнем
углу
Visual Studio
Studio
Code. Studio Code.
нижнем
углу
Visual
Code.
в левом
нижнем
углу Visual
В
окне перейдите
перейдите во
во вкладку
вкладку TERMINAL.
TERMINAL.
В открывшемся
открывшемся
окне
открывшемся
окне
перейдите
во вкладку
TERMINAL.
В
открывшемся
окне
перейдите
во вкладку
TERMINAL.
У
вас откроется
терминал.
У
терминал.
У вас
вас
откроется
терминал.
У
васоткроется
откроется
терминал.
210
Активируйте
виртуальноеокружение,
окружение,
используя
Активируйте виртуальное
используя
командукоманду
source
Активируйте
виртуальное
окружение,
используя
команду
source
source
/bin/activate
(Linux/MacOS)
или
\Scripts\activate
(Windows).
Активируйте
виртуальное
окружение,
используя
команду
source
/bin/activate (Linux/MacOS) или \Scripts\activate (Windows).
/bin/activate (Linux/MacOS) или \Scripts\activate (Windows).
/bin/activate (Linux/MacOS) или \Scripts\activate (Windows).
Установите фреймворк Django, используя команду python -m pip install
Установите
Django,
используя
команду
-m pip
Установите фреймворк
фреймворк Django,
используя
команду
python python
-m pip install
Установите фреймворк Django, используя команду python -m pip install
Django.
install
Django.
Django.
Django.
При успешной установке появится сообщение «Successfully installed
При успешной установке появится сообщение «Successfully installed
При
установке
появится
сообщение
«Successfully
При успешной
успешной установке
появится
сообщение
«Successfully
installed
Django…».
Django…».
installed
Django…».
Django…».
211
Методические указания
Виртуальное окружение Python – это инструмент, который
позволяет создавать отдельное пространство для работы с Python
на вашем компьютере. Это полезно, если вы хотите установить различные версии Python или различные пакеты и библиотеки с разными версиями.
Чтобы создать виртуальное окружение, нужно выполнить
несколько простых шагов:
– установите модуль virtualenv, введя в командную строку pip
install virtualenv;
– создайте новую папку для вашего проекта и перейдите в нее
через командную строку;
– введите команду virtualenv env, где env – это название вашего
виртуального окружения;
– активируйте виртуальное окружение, используя команду
source env/bin/activate (Linux/MacOS) или env\Scripts\activate.bat
(Windows);
– теперь вы можете устанавливать библиотеки в ваше виртуальное окружение. Для установки библиотеки нужно выполнить
команду pip install library_name, где library_name – это название
библиотеки, которую вы хотите установить;
– если вы хотите сохранить список всех установленных библиотек, то можно выполнить команду pip freeze > requirements.txt. Эта
команда создаст файл requirements.txt, содержащий список всех
установленных библиотек. Для установки всех библиотек из файла
requirements.txt нужно выполнить команду pip install -r requirements.
txt. Чтобы выйти из виртуального окружения, нужно выполнить
команду deactivate.
Задание 2. Создайте и настройте Django-проект для дальнейшей
разработки веб-приложения.
Ход работы
1. Изучите методические рекомендации.
2. Создайте и настройте Django-проект для дальнейшей разработки веб-приложения.
212
2. Создайте и настройте Django-проект для дальнейшей разработки вебприложения.
2. Создайте и настройте Django-проект для дальнейшей разработки вебИспользование онлайн-сервиса
Replit
Использование онлайн-сервиса
Replit
приложения.
Перейдем
насайт
сайт
Replit
(https://replit.com).
Перейдем на
Replit
(https://replit.com).
Использование онлайн-сервиса Replit
Перейдем на сайт Replit (https://replit.com).
Нажмем кнопку Create Repl
Нажмем
Create
Repl.
Нажмемкнопку
кнопку Create
Repl
Откроется
программирования.
Откроетсяокно
окновыбора
выбораинструмента/языка
инструмента/языка программирования.
213
Откроется окно выбора инструмента/языка программирования.
В поле поиска Search Templates впишем Django.
В поле поиска
Search Templates впишем Django.
В поле поиска Search Templates впишем Django.
Выберем Django-шаблон и в поле Title впишем название проекта.
Выберем
Django-шаблон
Далее
нажмем
Create Repl.и в поле Title впишем название проекта.
Выберем
Django-шаблон и в поле Title впишем название
Далее нажмем Create Repl.
проекта.
Далее нажмем Create Repl.
Создастся проект, где:
– django_project – главный каталог проекта;
214
– db.sqlite3 – файл базы данных
приложения;
– manage.py – файл управления проектом Django.
Создастся
где:
Создастся проект,
проект, где:
– django_project
– главный
проекта;
– django_project
– главный каталог
каталог проекта;
– db.sqlite3
–
файл
базы
данных
приложения;
– db.sqlite3 – файл базы данных приложения;
– manage.py
– файл
управления
проектом
Django.
– manage.py
– файл
управления проектом
Django.
Откроем файл
файл settings.py
проекта
django_project
(папка django_project).
Откроем
settings.py
проекта
django_project
(папка django_
project).
В
параметр
INSTALLED_APPS
'django_project'.
215
впишем
название
приложения
В параметр
INSTALLED_APPS
В параметр
INSTALLED_APPS впишем
впишем название
название приложения
приложения
‘django_project’.
'django_project'.
Теперь необходимо сгенерировать секретный ключ. Для этого переходим
Теперь
необходимо сгенерировать секретный ключ. Для этого
на
сайт
https://djecrety.ir/
переходим на сайт https://djecrety.ir/
Нажимаем кнопку Generate.
Нажимаем
кнопку
Generate.
Нажимаем
кнопку Generate.
Копируем сгенерированный ключ, нажав на поле с ключом или выделив
Копируем сгенерированный ключ, нажав на поле с ключом или выделив
ключ и скопировав через контекстное меню вашей операционной системы.
ключ и скопировав через контекстное меню вашей операционной системы.
216
Копируем сгенерированный ключ, нажав на поле с ключом или
выделив Копируем
ключ и сгенерированный
скопировав через
контекстное
менюили
вашей
операключ, нажав
на поле с ключом
выделив
ключ и системы.
скопировав через контекстное меню вашей операционной системы.
ционной
Теперь
необходимо
секретный
в переменные
Теперь
необходимо сохранить
сохранить секретный
ключ включ
переменные
среды
ТеперьДля
необходимо
сохранить
секретный
ключ Tools
в переменные
среды
среды
окружения.
Для
этого
в правом
углу
в меню
окружения.
этого
в правом
нижнем
углу внижнем
меню
выбираем
пунктTools
окружения.
Для
этого
в
правом
нижнем
углу
в
меню
Tools
выбираем
пункт
Secrets. пункт Secrets.
выбираем
Secrets.
Справа появляется меню с системными переменными окружения.
Справа
появляется меню с системными переменными окружения.
Справа появляется меню с системными переменными окружения.
В поле New Secret (1) вписываем значение SECRET_KEY, а в поле Value
В поле New
Secret (1) вписываем
значение
SECRET_KEY,
а в(3).
поле Value
(2) вставляем
сгенерированный
ключ. Затем
нажимаем
кнопку Save
(2) вставляем сгенерированный ключ. Затем нажимаем кнопку Save (3).
217
В поле New Secret (1) вписываем значение SECRET_KEY,
а в поле Value (2) вставляем сгенерированный ключ. Затем нажимаем кнопку Save (3).
В том
жежеокне
появится
инструкция
для использования
секретВ том
окне появится
инструкция
для использования
секретного ключа.
В
том
же
окне
появится
инструкция
для
использования
секретного
ключа.
ного ключа.
В том же окне появится инструкция для использования секретного ключа.
Перейдем в файл settings.py проекта и заменим значение SECRET_KEY.
Перейдем
settings.py
проекта ипроекта
заменим значение
SECRET_KEY.
Перейдем ввфайл
файл
settings.py
и заменим
значение
SECRET_KEY.
Перейдем в файл settings.py проекта и заменим значение SECRET_KEY.
В этом же файле settings.py находим параметры LANGUAGE_CODE и
В этом ижезаменяем
файле settings.py
находим параметры LANGUAGE_CODE и
TIME_ZONE
их.
TIME_ZONE
иже
заменяем
их.
В этомже
файле settings.py
находим
параметры
LANGUAGE_CODE
и
В этом
файле
settings.py
находим
параметры
LANGUAGE_
TIME_ZONE
и заменяем их.
CODE
и TIME_ZONE
и заменяем их.
В
файл
settings.py
CSRF_TRUSTED_ORIGINS.
также
необходимо
218
CSRF_TRUSTED_ORIGINS
добавить
параметр
=
В файл
также необходимо
добавить
параметр
CSRF_
В settings.py
файл
settings.py
также
необходимо
добавить
параметр
В
файл
settings.py
также
необходимо
добавить
параметр
TRUSTED_ORIGINS.
CSRF_TRUSTED_ORIGINS.
CSRF_TRUSTED_ORIGINS.
CSRF_TRUSTED_ORIGINS
=
CSRF_TRUSTED_ORIGINS
= [“https://*название_проекCSRF_TRUSTED_ORIGINS
=
["https://*название_проекта*.*логин_replit*.repl.co"]
та*.*логин_replit*.repl.co”]
["https://*название_проекта*.*логин_replit*.repl.co"]
Теперь необходимо обновить Django до последней версии. Для этого из
Теперь
необходимо обновить
Django Django
до последней
Для этоговерсии.
из
Теперь
необходимо
обновить
до версии.
последней
меню Tools открываем инструмент Console.
инструмент
Console.инструмент Console.
Для меню
этогоTools
из открываем
меню Tools
открываем
В открывшейся консоли вводим команду pip install --upgrade django.
В открывшейся консоли вводим команду pip install --upgrade django.
В открывшейся консоли вводим команду pip install --upgrade
django.
Необходимо
консоли
появится
надпись
Необходимо дождаться,
дождаться, когдакогда
в консолив появится
надпись
«Successfully
«Successfully
installed…».installed…».
Также в проекте отсутствует пакет для часовых поясов. Установим и его
командой pip install tzdata
219
Также
отсутствует
пакет
для часовых
УстаноТакжеввпроекте
проекте отсутствует
пакет
для часовых
поясов.поясов.
Установим
и его
вим
и егоpip
командой
pip install tzdata
командой
install tzdata
Убедитесь, что
установки
появилосьпоявилось
сообщение «Successfully
Убедитесь,
чтов результате
в результате
установки
сообщение
installed…». installed…».
«Successfully
Запустите
проект,
нажав
на кнопку
Запустите проект,
нажав
на кнопку
Run Run.
Проект запущен,
запущен, в окне
Webview
появится
приветственное
окно Django.
Проект
в окне
Webview
появится
приветственное
окно
Django.
Использование локальных инструментов разработки
Для создания проекта запустим редактор кода Visual Studio Code и
откроем консоль (в левом нижнем углу).
220
Использование
локальных
инструментов
разработки
Использование
локальных
инструментов
разработки
Для
редактор
кода
Visual
Studio
Code
Длясоздания
создания проекта
проекта запустим
запустим редактор
кода
Visual
Studio
Code
и
иоткроем
откроем
консоль
(в
левом
нижнем
углу).
консоль (в левом нижнем углу).
Перейдем
во вкладку
TERMINAL.
Перейдем
во вкладку TERMINAL.
Перейдем
вкладкуTERMINAL.
TERMINAL.
Перейдем
во во
вкладку
Теперь необходимо создать виртуальное окружение.
Теперь необходимо
виртуальное
Теперь необходимосоздать
создать виртуальное
окружение.окружение.
Создается командой py -m venv myvenv или python -m venv myvenv
Создается
командой
py-m-m
venv
myvenv
или-mpython
-m venv myvenv
Создается
командой
py
venv
myvenv
или
python
venv myvenv
Теперь
необходимо
создать
виртуальное
окружение.
Создается командой py -m venv myvenv или python -m venv myvenv
Вместо myvenv нужно указать название вашего виртуального окружения.
Вместо
myvenv
нужно указать
название
вашего виртуального
окружения.
Вместо После
myvenv
нужно
указать
название
вашего
виртуального
того как
виртуальное
окружение
было создано
(не появилось
После того как виртуальное окружение было создано (не появилось
окружения.
никаких
ошибок
при
создании,
появилась
пустая
строка
в
терминале,
Вместо myvenv нужно указать название вашего виртуального окружения.
никаких ошибок при создании, появилась пустая строка в терминале,
ожидающая
команду),
После
тоготого
как
окружение
(не поПосле
каквиртуальное
виртуальное окружение
было было
создано создано
(не появилось
ожидающая
команду),
явилось
никаких
ошибок
при
создании,
появилась
пустая
строка
никаких ошибок при создании, появилась пустая строка в терминале,
в терминале,
ожидающая команду),
ожидающая команду),
необходимо открыть его в редакторе. Для этого в меню программы VS Code
необходимо открыть его в редакторе. Для этого в меню программы VS Code
выбираем File → Open Folder и выбираем созданную папку с виртуальным
выбираем File → Open Folder и выбираем созданную папку с виртуальным
окружением.
окружением.
необходимо открыть его в редакторе. Для этого в меню программы VS Code
221 созданную папку с виртуальным
выбираем File → Open Folder и выбираем
окружением.
необходимо открыть его в редакторе. Для этого в меню программы
VS Code выбираем File → Open Folder и выбираем созданную папку
с виртуальным окружением.
В редакторе после открытия отобразятся файлы проекта.
Если при открытии появится следующее диалоговое окно, то необходимо
нажать на кнопку Yes, I trust the authors.
В редакторепосле
после открытия
отобразятся
файлы проекта.
В редакторе
открытия
отобразятся
файлы проекта.
Еслипри
при открытии
появится
следующее
диалоговое окно,
то необходимо
Если
открытии
появится
следующее
диалоговое
окно,
нажать
на
кнопку
Yes,
I
trust
the
authors.
то необходимо нажать на кнопку Yes, I trust the authors.
Проект открыт, в колонке Explorer отобразятся файлы проекта.
222
Проект
открыт, в колонке Explorer отобразятся файлы проекта.
Проект открыт, в колонке Explorer отобразятся файлы проекта.
Проект открыт, в колонке Explorer отобразятся файлы проекта.
Снова откроем TERMINAL.
Снова
откроем TERMINAL.
Снова откроем TERMINAL.
Активируем виртуальное окружение. В терминале необходимо написать
Активируем
виртуальное окружение. В терминале необходимо написать
команду
.\Scripts\activate.
Активируем
виртуальное
окружение. В терминале необходимо
команду .\Scripts\activate.
написать команду .\Scripts\activate.
ЕслиЕсли
виртуальное
окружение
активировано,
то около
виртуальное окружение
активировано,
то около пути папки
появитсяпути
папки
появится
название
виртуального
окружения.
Если
виртуальное
окружение
активировано,
то около пути папки появится
название
виртуального
окружения.
название виртуального окружения.
В случае если возникает ошибка активации виртуального окружения,
В случае если возникает ошибка активации виртуального окружения, В случае если возникает ошибка активации виртуального окружения,
откройте Powershell через меню «Пуск» от имени администратора
откройте Powershell
через
меню
«Пуск»
от имени
откройте
Powershell
через
меню
«Пуск»
отадминистратора
имени администратора
223
откройте Powershell через меню «Пуск» от имени администратора
введите следующую
команду:
иивведите
следующую
команду:
Set-ExecutionPolicy
Unrestricted
Set-ExecutionPolicy
Unrestricted
При
навопрос
вопрос
изменении
политики
необходимо
Приответе
ответе на
об об
изменении
политики
необходимо
написать в
написать
PowerShell
«А» и нажать Enter.
PowerShellв«А»
и нажать Enter.
Затем снова
снова активируйте
виртуальное
окружение
через Powershell
Затем
активируйте
виртуальное
окружение
через
Powershell
командой .\Scripts\activate
командой .\Scripts\activate
Альтернативный вариант: выберите в терминале Visual Studio Code
Command prompt.
224
Альтернативный вариант: выберите в терминале Visual Studio
Code Command prompt.
И снова
введите
команду
.\Scripts\activate
снова
введите
команду
.\Scripts\activate
И сноваИвведите
команду
.\Scripts\activate
И снова введите команду .\Scripts\activate
Если виртуальное окружение активировано, то в терминале появится
Если
виртуальное окружение активировано, то в терминале появится
название
окружения.
Если
виртуальное
название
окружения. окружение активировано, то в терминале появится
Если виртуальное окружение активировано, то в терминале
появится
название
окружения.
название
окружения.
Теперь, когда виртуальное
Теперь,фреймворк
когда виртуальное
установить
Django. Для
установить
фреймворк
Django.
Для
терминале: py
–m pip install
Django
окружение активировано, необходимо
окружение
активировано,
этого напишем
следующую необходимо
команду в
этого напишем следующую команду в
терминале: py –m pip install Django
когда виртуальное окружение активировано, необходимо
Теперь,Теперь,
когда виртуальное
окружение активировано, необходиустановить фреймворк Django. Для этого напишем следующую команду в
мо установить фреймворк Django. Для этого напишем следующую
терминале: py –m pip install Django
команду в терминале: py –m pip install Django
Если установка пройдет успешно, то в результате будет видно следующее
сообщение: «Successfully installed Django-*версия* …».
225
Если
пройдет
успешно,
то в результате
будет
видно
Еслиустановка
установка пройдет
успешно,
то в результате
будет видно
следующее
следующее
сообщение:
«Successfully
installed
Django-*версия* …».
сообщение: «Successfully
installed
Django-*версия*
…».
Если установка пройдет успешно, то в результате будет видно следующее
сообщение: «Successfully installed Django-*версия* …».
Теперьнеобходимо
необходимо создать
создать Django-проект.
Django-проект. Для
этого напишем
напишем
Теперь
Для этого
следующую
команду:
django-admin
startproject
следующую команду:
django-admin
startproject
projectproject
Теперь
необходимо
создать
Django-проект.
Для
этого
напишем
следующую команду: django-admin startproject project
ВместоВместо
project
можно
название
вашего
проекта.проекта.
В писке файлов
Вместо
project
можноуказать
указать
название
вашего
В спиproject можно указать название вашего проекта. В писке файлов
проекта
появится
созданный
проект.
ске
файлов
проекта
появится
созданный проект.
проекта
появится
созданный
проект.
И в нем есть приложение с таким же названием project.
И в нем есть приложение с таким же названием project.
И в нем есть приложение с таким же названием project.
Откройте созданный проект (вторую папку project) и перейдите в файл
настроек (settings.py).
226
Откройте созданный проект (вторую папку project) и перейдите
Откройте созданный проект (вторую папку project) и перейдите в файл
в файл настроек
(settings.py).
настроек (settings.py).
В этом файле будем настраивать проект.
В этом файле будем настраивать проект.
Найдем параметр INSTALLED_APPS и внесем в него наше приложение
Найдем
параметр INSTALLED_APPS и внесем в него наше
project.
приложение project.
В этом же файле (settings.py) найдем и изменим следующие параметры:
В этом же –файле
(settings.py) найдем и изменим следующие
LANGUAGE_CODE;
TIME_ZONE.
файле (settings.py) найдем и изменим следующие параметры:
параметры:В этом–же
Изменим параметры следующим образом.
– LANGUAGE_CODE;
– LANGUAGE_CODE;
В этом же файле (settings.py) найдем и изменим следующие параметры:
– TIME_ZONE.
– LANGUAGE_CODE;
– TIME_ZONE.
– TIME_ZONE.
Изменим
параметры следующим образом.
Изменим параметры
следующим
образом.
Изменим параметры
следующим образом.
Теперь необходимо создать таблицы в базе данных.
Для этого снова открываем терминал, нажав на иконки в левом нижнем
углу Visual Studio Code.
Теперь необходимо создать таблицы в базе данных.
Теперь Теперь
необходимо
создать
таблицы
в базе данных.
И
затем,
вкладку
TERMINAL,
необходимо
таблицы
в базе
Для
этоговыбрав
снова создать
открываем
терминал,
нажавданных.
на иконки в левом нижнем
углуэтого
Visual снова
Studio
Code.
Для этого
снова
открываем
терминал,
нажав
иконки
в левом
Для
открываем терминал,
нажав на
иконкина
в левом
нижнем
углу
Visual
Studio
Code.
нижнем углу Visual Studio Code.
И затем, выбрав вкладку TERMINAL,
И затем, выбрав вкладку TERMINAL,
227
Теперь необходимо создать таблицы в базе данных.
Для этого снова открываем терминал, нажав на иконки в левом нижнем
углу Visual Studio Code.
И затем, выбрав
вкладку TERMINAL,
И затем, выбрав вкладку TERMINAL,
переходим
папкупроекта
проекта
командой
cd .\project\
и выполняем
переходим ввв папку
папку
командой
cd .\project\
.\project\
и выполняем
команду коpy
переходим
переходим в папку проекта
проекта командой
командой cd
cd .\project\ и
и выполняем
выполняем команду
команду py
py
манду
py .\manage.py
migrate
.\manage.py
migrate
.\manage.py
.\manage.py migrate
migrate
Теперь можно
можно запустить
запустить
серверсервер
командой
py .\manage.py
.\manage.py
runserver и
и
Теперь
запустить
командой
py .\manage.py
Теперь
можно
сервер
командой
py
runserver
Теперь
можно
запустить сервер
командой
py
.\manage.py runserver
и
посмотреть
на
результат.
runserver
и посмотреть
на результат.
посмотреть
посмотреть на
на результат.
результат.
Фреймворк
выведет
сообщение
запуске
сервера
по
адресу:
Фреймворк выведет
выведет сообщение
сообщение оооо запуске
запуске сервера
сервера
по
адресу:
Фреймворк
сервера по
по адресу:
Фреймворк
выведет
сообщение
запуске
адресу:
http://127.0.0.1:8000/
http://127.0.0.1:8000/
http://127.0.0.1:8000/
http://127.0.0.1:8000/
228
Перейдем в браузер и откроем страницу http://127.0.0.1:8000/
Перейдем в браузер и откроем страницу http://127.0.0.1:8000/ или
или http://localhost:8000/
http://localhost:8000/
В случае
успеха
видно
приветственное
окно,написано,
в котором
В случае
успеха будет
будет видно
приветственное
окно, в котором
написано,
что установка
прошла успешно.
что установка
прошла успешно.
Методические
указания
Методические указания
Виртуальное
– это
изолированная
для PythonВиртуальноеокружение
окружение – это
изолированная
среда для среда
Python-проектов.
проектов.
Это позволяет
каждому
проекту
иметь своизависимости,
собственные
Это позволяет
каждому проекту
иметь
свои собственные
независимо отнезависимо
того, какие библиотеки
в других проектах.
Такой
зависимости,
от того,установлены
какие библиотеки
установлены
подходпроектах.
предотвращает
конфликты
между
библиотеками и упрощает
управление
в других
Такой
подход
предотвращает
конфликты
между
зависимостями
проекта.
библиотеками и упрощает управление зависимостями проекта.
создания виртуального
виртуального окружения
в Python используется
venv.
Для Для
создания
окружения
в Python модуль
используется
Этот модуль включен в стандартную библиотеку Python и позволяет создавать
модуль
venv. Этот модуль включен в стандартную библиотеку Python
изолированную среду для Python-проектов. Команда для создания виртуального
и позволяет
создавать изолированную среду для Python-проектов.
окружения выглядит следующим образом: python -m venv имя_окружения.
Команда для создания виртуального окружения выглядит следуПосле выполнения команды в указанной директории создаётся структура
ющим образом: python -m venv имя_окружения. После выполнения
каталогов, содержащая Python-интерпретатор и место для установки пакетов.
команды в указанной директории создаётся структура каталогов,
Для использования созданного виртуального окружения необходимо его
содержащая Python-интерпретатор и место для установки пакетов.
активировать. Это делается с помощью скрипта активации, который находится в
Для
использования созданного виртуального окружения некаталоге Scripts внутри каталога виртуального окружения. На Windows
обходимо его активировать. Это делается с помощью скрипта активации, который находится в каталоге Scripts внутри каталога
виртуального окружения. На Windows активация производится
с помощью команды .\Scripts\activate, после чего в командной
строке будет отображаться имя активированного окружения.
Django – высокоуровневый Python-фреймворк для разработки веб-приложений. Он позволяет быстро создавать безопасные
229
и поддерживаемые веб-сайты. Установка Django внутри активированного виртуального окружения производится с помощью системы управления пакетами pip. Команда установки выглядит так: pip
install django. Эта команда загрузит и установит последнюю версию
Django вместе с необходимыми зависимостями.
Задание 3. Создайте простую веб-страницу с помощью фреймворка Django.
Ход работы
1. Изучите методические рекомендации.
2. Создайте простую веб-страницу с использованием фреймворка Django и с помощью html-шаблонов.
Для создания страниц в Django существуют представления
(views).
Представление – это компонент Django-приложения, который
содержит логику работы и отвечает за отображение объектов в браузере. Обычно выполняет определенную функцию и имеет определенный шаблон.
Например, в приложении для блога у вас могут быть следующие
представления:
– домашняя страница;
– страница записей и так далее.
Для того чтобы добавить представление, необходимо в папке
приложения project или django_project (если вы выполняете работу
в сервисе replit) создать файл views.py. Для этого щелкните правой
кнопкой мыши по второй папке project (или по папке django_project
для replit) и выберите пункт New File… (Add file для replit). Задайте
ему соответствующее название.
Открываем файл views.py и вводим в него следующий код:
230
Открываем
файл views.py
views.py и вводим
в неговследующий
код:
Открываем
файл
и вводим
него следующий
код:
Открываем файл views.py и вводим в него следующий код:
Теперь
перейдемвв файл
файл urls.py,
импортируем
в него созданное
view и
Теперь
перейдем
urls.py,
импортируем
в него созданное
Теперь
перейдем в файл urls.py, импортируем в него созданное view и
добавим
адрес
до
представления.
view и добавим адрес до представления.
добавим адрес до представления.
необходимо изменить следующим образом.
ФайлФайл
необходимо
изменить следующим образом.
Файл необходимо изменить следующим образом.
Теперь необходимо запустить сервер.
Теперь необходимо запустить сервер.
Теперь необходимо запустить сервер.
Откроем браузер
браузер и
и перейдем
перейдем по
или
Откроем
по адресу
адресуhttp://127.0.0.1:8000/
http://127.0.0.1:8000/
http://localhost:8000/.
или
http://localhost:8000/.
Созданное приложение
приложение работает,
на экране
экране должен
должен появиться
появиться
Созданное
работает,ии на
введенный
текст.
введенный текст.
231
В случае использования сервиса Replit необходимо нажать на кнопку Run.
В случае использования сервиса Replit необходимо нажать
В
использования
на кнопку
Run.
В случае
случае
использования сервиса
сервиса Replit
Replit необходимо
необходимо нажать
нажать на
на кнопку
кнопку Run.
Run.
В окне
окнеwebview
webview откроется
откроется
созданная
страница.
В окне
откроется
созданная
страница.
В
webview
созданная
страница.
Шаблоны
(templates)
отвечают
за за
формирование
внешнего
вида вида
Шаблоны
(templates)
отвечают
формирование
внешнего
приложения.
Они предоставляют
специальный
синтаксис, который
позволяеткотоприложения.
Они предоставляют
специальный
синтаксис,
внедрять
данные в кодвнедрять
HTML. данные в код HTML.
рый позволяет
Для
чтобы
шаблоны
работали, вработали,
проекте необходимо
открыть
файл
Длятоготого
чтобы
шаблоны
в проекте
необходимо
открыть файл settings.py.
settings.py.
начале
файла
settings.py
импортируйте
ВВначале
файла
settings.py
импортируйте
библиотекубиблиотеку
os, если она os,
не если
она не импортирована,
импортирована,
и измените
параметр
DIRS у параметра
этом же файле). (в этом же
и измените
параметр
DIRS уTEMPLATES
параметра(вTEMPLATES
файле).
232
и измените параметр DIRS у параметра TEMPLATES (в этом же файле).
Добавим
в папку приложения каталог TEMPLATES. А в нем
Добавим в папку приложения каталог TEMPLATES. А в нем определим
определим
файл index.html:
файл index.html:
По сути, это обычная веб-страница, которая содержит код html. Теперь
используем эту страницу для отправки ответа пользователю. И для этого
233
перейдем в приложение файлу views.py, который определяет функции для
обработки запроса. Изменим этот файл следующим образом:
По сути, это обычная веб-страница, которая содержит код html.
Теперь используем эту страницу для отправки ответа пользователю.
И для этого перейдем в приложение файлу views.py, который определяет функции для обработки запроса. Изменим этот файл следующим образом:
Теперь созданное представление вызывает передачу файла шаблона при
Теперь созданное
представление вызывает передачу файла шаоткрытии страницы.
блона при открытии
страницы.
Чтобы увидеть результат вывода, перейдем в urls.py и добавим вызов
представления
по
переходу
в корневой
каталог
проекта
из браузера.
Теперь созданное
представление
вызывает
передачу
файла шаблона
при
Чтобы увидеть
результат
вывода,
перейдем
в urls.py
и добаоткрытии страницы.
вим вызов представления
по
переходу
в
корневой
каталог
проекта
Чтобы увидеть результат вывода, перейдем в urls.py и добавим вызов
из браузера.представления по переходу в корневой каталог проекта из браузера.
Запустим
приложение.
Приложение
разместилось
по
адресу:
разместилось
по
адресу:
http://127.0.0.1:8000/ или http://localhost:8000/
Запустим
приложение.
Приложение
Запустим
приложение. Приложение разместилось по адресу:
http://127.0.0.1:8000/ или http://localhost:8000/
http://127.0.0.1:8000/ или http://localhost:8000/
откроем страницу
http://127.0.0.1:8000/
или http://localhost:8000/.
ииоткроем
страницу
http://127.0.0.1:8000/
или http://localhost:8000/.
234
При использовании сервиса Replit необходимо нажать на кнопку Run.
и откроем страницу http://127.0.0.1:8000/ или http://localhost:8000/.
и откроем страницу http://127.0.0.1:8000/ или http://localhost:8000/.
Прииспользовании
использовании сервиса
Replit
необходимо
нажать нанажать
кнопку на
Run.кнопПри
сервиса
Replit
необходимо
ку Run. При использовании сервиса Replit необходимо нажать на кнопку Run.
Появилась надпись «Тестовая страница», а это значит, что созданное
Появилась надпись «Тестовая страница», а это значит, что созданное
Появилась
надпись «Тестовая страница», а это значит, что созданное представление работает.
Методические
указания
Методические
указания
Методические указания
Представления
в Djangoотвечают
отвечают за
и формирование
Представления в Django
за обработку
обработкузапросов
и формирование
Представления
в Django отвечают
за запросов
обработку
запросов
ответов.
Для
создания
представления содержимое
содержимое представлений
располагается
ответов.
Для
создания
представления
представлений
располагается
и формирование ответов. Для создания представления
содержив файле views.py в папке Django-приложения.
в файле
views.py в папке
Django-приложения.
мое
представлений
располагается
в файле views.py в папке DjangoНеобходимо определить функцию представления, которая принимает
Необходимо определить функцию представления, которая принимает
приложения.
объект запроса и возвращает объект ответа, используя функцию HttpResponse.
объект
запроса и возвращает
объект ответа,
используя
функцию HttpResponse.
Необходимо
определить
функцию
представления,
которая
Для того чтобы Django мог перенаправить запросы на ваше
принимает
объект
запроса
и
возвращает
объект
ответа,
Для того
чтобы
Django
мог перенаправить
запросы используя
на ваше
представление, необходимо в файле urls.py в папке проекта импортировать
функцию
HttpResponse.
представление,
необходимо в файле urls.py в папке проекта импортировать
Для того чтобы Django мог перенаправить запросы на ваше
представление, необходимо в файле urls.py в папке проекта импортировать представление из views.py. Далее в переменную urlpatterns
добавить маршрут, указывая путь и связанное с ним представление.
Шаблоны управляют внешним видом приложения. Для работы
с шаблонами необходимо выполнить несколько шагов:
– убедитесь, что в настройках Django (settings.py) указан каталог
для шаблонов в параметре DIRS списка TEMPLATES;
– создайте каталог templates в папке вашего приложения и добавьте
в него файл index.html;
– в представлении используйте функцию render для отправки
HTML-шаблона как ответа, передавая ей объект запроса и путь
к шаблону.
представление
работает.
представление
работает.
235
Задания для самостоятельного выполнения
1. Создайте базовый шаблон base.html, который будет содержать общую структуру вашего сайта, такую как шапка, навигационное меню и подвал. Включите в него блоки для контента, которые
будут заполняться в других шаблонах.
2. Создайте несколько дочерних шаблонов, которые наследуют
базовый шаблон. Каждый из них должен содержать уникальный
контент для разных страниц вашего сайта, например, страницу
«О нас», «Контакты» и «Услуги».
3. Создайте шаблон, который будет содержать ссылки на другие
страницы вашего сайта. Используйте тег {% url ‘name’ %} для генерации URL-адресов на основе именованных URL-адресов в вашем
проекте.
4. Создайте шаблон, который будет содержать приветственное
сообщение на главной странице вашего сайта.
5. Создайте несколько различных макетов страниц (например,
для страницы с контактами и страницы с информацией о компании) и используйте их для улучшения внешнего вида вашего сайта.
6. Создайте страницу, на которой будет отображаться список
товаров. Для этого используйте список словарей с информацией
о каждом товаре, такой как название, описание и цена. Отобразите
информацию о каждом товаре на странице.
7. Cоздайте страницу, на которой будет отображаться список задач. Используйте список словарей с информацией о каждой задаче,
такой как название и описание. Отобразите список задач на странице и добавьте возможность отметить задачи как выполненные.
8. Создайте страницу, на которой будет отображаться список пользователей. Используйте список словарей с информацией
о каждом пользователе, такой как имя, фамилия и возраст. Отобразите на странице информацию о каждом пользователе.
9. Создайте страницу, на которой будет отображаться список
книг. Используйте список словарей с информацией о каждой книге, такой как название, автор и год выпуска. Отобразите список
книг на странице и добавьте возможность сортировки книг по различным критериям, например, по автору или году выпуска. Хранение данных о книгах возможно в словаре.
236
10. Создайте страницу, на которой будет отображаться расписание занятий. Используйте список словарей с информацией о каждом
занятии, такой как название предмета, время начала и время окончания. Отобразите расписание занятий в виде таблицы на странице.
Тема «Базы данных и ORM»
Задание 1. Создайте модель данных в Django для представления информации о людях. Модель должна содержать класс Person
с полями name (имя типа CharField) и age (возраст типа IntegerField).
Ход работы
1. Изучите методические рекомендации.
2. Создайте модель Person, которая содержит поля name (имя)
и age (возраст).
Чтобы начать работать с моделью, создайте файл models.py
в проекте.
необходимо определить поля таблицы. Для создания модели
Теперь Теперь
необходимо
определить поля таблицы. Для создания
Теперь следующий
необходимосинтаксис.
определить поля таблицы. Для создания модели
используется
модели используется
используется
следующий
синтаксис.
следующий синтаксис.
Сначала импортируется компонент моделей из пакета django.db.
Сначала
импортируется компонент
из пакета
django.db.
class ModelName(models.Model)
– моделей
эта строка
определяет
нашу модель
class ModelName(models.Model) – эта строка определяет нашу модель
(объект).
237
(объект).
class – специальное ключевое слово для определения объектов.
class
– специальное
слово для
определения
объектов.
ModelName
– имя ключевое
нашей модели,
можно
поменять
его при желании
Сначала импортируется компонент моделей из пакета django.db.
class ModelName(models.Model) – эта строка определяет нашу
модель (объект).
• class – специальное ключевое слово для определения объектов.
• ModelName – имя нашей модели, можно поменять его при желании (специальные знаки и пробелы использовать нельзя). Всегда
начинайте имена классов с прописной буквы.
• models.Model означает, что объект ModelName является моделью
Django, так Django поймет, что он должен сохранить его в базу
данных.
Дальше задаем поле модели: field_name. Чтобы это сделать,
означает,с что
объект полей:
ModelName
являетсячисло,
моделью дата,
Django, ссылка
нам нужно models.Model
определиться
типом
текст,
так Django поймет, что он должен сохранить его в базу данных.
на другой объект.
Дальше задаем поле модели: field_name. Чтобы это сделать, нам нужно
Вместо FieldType необходимо написать нужный тип поля.
определиться с типом полей: текст, число, дата, ссылка на другой объект.
Теперь Вместо
перейдем
к созданию модели для проекта в файле
FieldType необходимо написать нужный тип поля.
models.py. Теперь перейдем к созданию модели для проекта в файле models.py.
В данной модели определим класс Person с полями name, age.
В данной
модели определим класс Person с полями name, age.
Метод «__str__» позволяет преобразовать объект класса и вернуть его в
Метод «__str__» позволяет преобразовать объект класса и вервиде строки.
нуть его в виде строки.
Задание 2. Создайте миграции для модели Person.
Ход работы
Изучите методические рекомендации.
Задание1.2.
Создайте миграции для модели Person.
2. Создайте миграции для модели Person, которая содержит поля name
Ход работы
(имя) и age (возраст).
1. Изучите
методические рекомендации.
Чтобы создать структуру модели во временный файл, которую в
2. Создайте
миграции
для вмодели
Person,
которая
содержит
дальнейшем можно
будет внести
базу данных,
необходимо
определить
объявленные
этого переходим в терминал и вводим следующие
поля name
(имя) поля.
и ageДля(возраст).
команды:
Чтобы
создать структуру модели во временный файл, которую
python manage.py makemigrations project
в дальнейшем
можно будет внести в базу данных, необходимо опреили
238
делить объявленные поля. Для этого переходим в терминал и вводим следующие команды:
manage.py project
makemigrations project
py manage.pypython
makemigrations
или py
py manage.py
manage.py makemigrations
makemigrations project
project
py manage.py makemigrations project
В случае
использования
Replitнеобходимо
необходимо
открыть
инструмент
В случае
случае
использования сервиса
сервиса Replit
Replit
необходимо
открыть
инструмент
В
использования
сервиса
открыть
инструмент
В случае использования сервиса Replit необходимо открыть ин-
Shell.
Shell.
Shell.
струмент
Shell.
Затем необходимо
необходимо вписать
вписать команду
команду
Затем
python
manage.py
makemigrations
django_project
python
manage.py
makemigrations
django_project
Затем
необходимо
вписать
команду
Затем
необходимо
вписать
команду
python manage.py
makemigrations
django_project
python manage.py
makemigrations
django_project
результате использования
использования
команд
нами были
были
созданы
временные
файлы
результате
команд
нами
созданы
временные
файлы
В ВВ
результате
использования
команд
нами
были
созданы
вреструктуры
базы данных,
данных,
которую
описали
файлекоторую
models.py.описали в файле
структуры
базы
которую
описали
вв файле
models.py.
менные
файлы
структуры
базы
данных,
В результате использования команд нами были созданы временные файлы
Методические указания
указания
Методические
models.py.
структурыМодель
базы данных,
которую описали
в файлеинформации
models.py. о ваших данных.
является
единственным источником
источником информации
Методические
указания
Модель является
единственным
о ваших данных.
Методические
указания
единственным
источником
ОнаМодель
содержит является
основные поля
поля
поведение данных,
данных,
которые вы
выинформации
храните. Как
Как
Она
содержит
основные
ии поведение
которые
храните.
Модель
является
единственным
источником
информации
о ваших
данных.
оправило,
ваших
данных.
Она
содержит основные
поля
и поведение
данных,
правило,
каждая
модель
отображается
одну таблицу
таблицу
базы
данных.
каждая
модель
отображается
вв одну
базы
данных.
которые
выосновные
храните.
Как
каждая
Выделяют
следующие
типы
полей:
Она
содержит
поля
и правило,
поведение
данных, модель
которыеотображается
вы храните. Как
Выделяют
следующие
типы
полей:
в
одну
таблицу
базы
данных.
BinaryField():
хранит бинарные
бинарные
данные;
BinaryField():
хранит
данные;
правило, --каждая
модель отображается
в одну
таблицу базы данных.
Выделяют следующие типы полей:
-
BinaryField(): хранит бинарные данные;
239
Выделяют следующие типы полей:
– BinaryField(): хранит бинарные данные;
– BooleanField(): хранит значение True или False (0 или 1);
– NullBooleanField(): хранит значение True или False или Null;
– DateField(): хранит дату;
– TimeField(): хранит время;
– DateTimeField(): хранит дату и время;
– DurationField(): хранит период времени;
– AutoField(): хранит целочисленное значение, которое автоматически инкрементируется, обычно применяется для первичных
ключей;
– BigAutoField(): хранит 64-битное целочисленное значение,
но в отличие от AutoField гарантирует, что число входит в диапазон от 1 до 9223372036854775807;
– SmallAutoField(): хранит 16-битное целочисленное значение
в диапазоне от 1 до 32767;
– BigIntegerField(): представляет число – значение типа Number,
которое укладывается в диапазон от 9223372036854775808
до 9223372036854775807. В зависимости от выбранной СУБД
диапазон может немного отличаться;
– DecimalField(decimal_places=X, max_digits=Y): представляет значение типа Number, которое имеет максимум X разрядов и Y знаков после запятой;
– FloatField(): хранит значение типа Number, которое представляет
число с плавающей точкой;
– IntegerField(): хранит значение типа Number, которое представляет целочисленное значение;
– PositiveIntegerField(): хранит значение типа Number, которое
представляет положительное целочисленное значение (от 0
до 2147483647);
– PositiveBigIntegerField(): хранит значение типа Number, которое
представляет положительное 64-битное целочисленное значение
(от 0 до 9223372036854775807);
– PositiveSmallIntegerField(): хранит значение типа Number, которое представляет небольшое положительное целочисленное значение (от 0 до 32767);
240
– SmallIntegerField(): хранит значение типа Number, которое
представляет небольшое целочисленное значение (от -32768
до 32767);
– CharField(max_length=N): хранит строку длиной не более N символов;
– TextField(): хранит строку неопределенной длины;
– EmailField(): хранит строку, которая представляет email-адрес.
Значение автоматически валидируется встроенным валидатором
EmailValidator;
– FileField(): хранит строку, которая представляет имя файла;
– FilePathField(): хранит строку, которая представляет путь к файлу
длиной в 100 символов;
– ImageField(): хранит строку, которая представляет данные об изображении;
– GenericIPAddressField(): хранит строку, которая представляет
IP-адрес в формате IP4v или IP6v;
– SlugField(): хранит строку, которая может содержать только буквы в нижнем регистре, цифры, дефис и знак подчеркивания;
– URLField(): хранит строку, которая представляет валидный
URL-адрес;
– UUIDField(): хранит строку, которая представляет UUID-идентификатор;
– JSONField(): хранит данные в формате JSON, который представляет UUID-идентификатор.
Подробнее про типы полей можно узнать тут: https://docs.
djangoproject.com/en/4.2/ref/models/fields/#field–types
Задание 3. Примените миграции для модели Person.
Ход работы
1. Изучите методические рекомендации.
2. Примените миграции для модели Person, созданные в задании 2.
После создания миграций необходимо применить их, чтобы обновить структуру базы данных. Для этого выполните команду
python manage.py migrate [название проекта]
или
241
2. Примените
миграции для
модели Person, созданные в задании 2.
1. Изучите методические
рекомендации.
После
созданиямиграции
миграций
чтобы
2. Примените
для необходимо
модели Person,применить
созданные вих,
задании
2. обновить
структуруПосле
базысоздания
данных.миграций
Для этого
выполните
команду
manage.py
необходимо
применить
их, python
чтобы обновить
структуру
базы
данных. Для
этого
выполните
команду
python manage.py
migrate
[название
проекта]
илиmigrate
py manage.py
migrate
[название
проекта].
py manage.py
[название
проекта].
migrate [название проекта] или py manage.py migrate [название проекта].
Длясервиса
сервиса Replit
Replit необходимо
использовать
команду
python manage.py
Для
необходимо
использовать
команду
Для сервиса Replit необходимо использовать команду python manage.py
migrate
[название
папки
проекта].
python
manage.py
migrate [название папки проекта].
migrate
[название
папки проекта].
Команда migrate применяет
применяет все миграции,
в том числе
миграцию
для
Команда
миграции,
том
числе
миграКоманда migrate
migrate применяет все все
миграции,
в том вчисле
миграцию
для
модели Person, и обновляет базу данных, создавая таблицы и поля согласно
цию
дляPerson,
модели
Person, ибазу
обновляет
данных,
создавая
модели
и обновляет
данных, базу
создавая
таблицы
и поля таблицы
согласно
определению модели.
иопределению
поля согласно
определению модели.
модели.
Задания для самостоятельного выполнения
1.
Задания
для самостоятельного
выполнения
Создайте
модель
для хранения информации
о пользователях (имя,
Задания для самостоятельного выполнения
1.
Создайте
модель для
хранения информации о пользователях (имя,
фамилия,
email) и примените
миграции.
1. Создайте
модель
длядля
хранения
информации о пользователях
Создайте
модельмиграции.
хранения категорий товаров и примените
фамилия,2.email)
и примените
(имя,
фамилия,
email)
и
примените
миграции.
миграции.
2.
Создайте модель для хранения категорий товаров и примените
2. Создайте
модель
длядля
хранения
категорий
товаров
и примениСоздайте
модель
хранения товаров
(название,
описание,
цена,
миграции.3.
те миграции.
категория) и примените миграции.
3.
Создайте модель для хранения товаров (название, описание, цена,
3. Создайте
модель
дляUser
хранения
товаров
(название,
описание,
4.
Создайте
модель
для хранения
информации
о пользователях.
категория) и примените миграции.
цена,Включите
категория)
и
примените
миграции.
поля, такие как имя, фамилия, электронная почта и дата регистрации.
4.
Создайте модель User для хранения информации о пользователях.
4. Создайте модель User для хранения информации о пользоваВключите поля, такие как имя, фамилия, электронная почта и дата регистрации.
телях. Включите поля, такие как имя, фамилия, электронная почта
и дата регистрации. Создайте соответствующую таблицу в базе данных и напишите код для создания нового пользователя и получения
списка всех пользователей.
5. Создайте модель Product для хранения информации о продуктах. Включите поля, такие как название, описание, цена и дата
добавления. Создайте соответствующую таблицу в базе данных
и напишите код для добавления нового продукта, изменения
информации о продукте и удаления продукта.
5. Создайте модель Order для хранения информации о заказах.
Включите поля, такие как связь с пользователем, список продуктов,
242
статус заказа и дата создания. Создайте соответствующую таблицу
в базе данных и напишите код для создания нового заказа, обновления статуса заказа и получения списка всех заказов для определенного пользователя.
7. Создайте модель Category для хранения информации о категориях продуктов. Включите поле для названия категории. Создайте соответствующую таблицу в базе данных и напишите код для
добавления новой категории, получения списка всех категорий
и получения списка продуктов для определенной категории.
8. Создайте модель Review для хранения информации об отзывах пользователей о продуктах. Включите поля, такие как связь
с пользователем, связь с продуктом, текст отзыва и рейтинг. Создайте соответствующую таблицу в базе данных и напишите код
для добавления нового отзыва, получения списка отзывов для
определенного продукта и получения среднего рейтинга продукта.
9. Создайте модель Address для хранения информации об адресах пользователей. Включите поля, такие как связь с пользователем,
улица, город и почтовый индекс. Создайте соответствующую таблицу в базе данных и напишите код для добавления нового адреса
для пользователя и получения списка адресов для определенного
пользователя.
10. Создайте модель Event для хранения информации о событиях. Включите поля, такие как название, описание, дата и время начала, дата и время окончания. Создайте соответствующую таблицу
в базе данных и напишите код для создания нового события, получения списка всех событий и получения списка событий в определенном временном диапазоне.
Тема «Django ORM: работа с данными и формами»
Задание 1. Используйте Django ORM для взаимодействия с базой данных. В предыдущей работе создана модель Person с полями name и age. Введите данные в базу через Django shell, проверьте
их наличие, а затем отобразите их на главной странице вебприложения. Используйте файлы views.py и urls.py для настройки
отображения данных и index.html для визуализации. Запустите сервер, чтобы убедиться в корректности отображения данных.
243
Ход работы
1. Изучите методические рекомендации.
2. На основе созданной модели внесите данные в базу данных.
Ход работы
По результатам выполнения предыдущих заданий в базе данных
1. Изучите методические рекомендации.
создалась таблица по модели с необходимыми полями.
2. На основе созданной модели внесите данные в базу данных.
Попробуем внести данные в базу.
По результатам выполнения предыдущих заданий в базе данОткрываем Django shell командой
ных создалась
таблица по модели с необходимыми полями.
python
manage.py
shell
Попробуем внести
данные в базу.
илиОткрываем Django shell командой
py manage.py shell python manage.py shell
или Для сервиса replit команды идентичны.
py manage.py shell
Для сервиса replit команды идентичны.
Убеждаемся, что
пустая,
то есть
не содержит
(в
Убеждаемся,
чтомодель
модель
пустая,
тотаблица
есть таблица
не данных
содержит
квадратных
скобках пусто).скобках пусто).
данных
(в квадратных
Для сервиса replit команды будут выглядеть следующим образом.
Для
сервиса replit
replit команды
команды
будут
выглядеть
следующим
образом.образом.
Для
сервиса
команды
будут
выглядеть
следующим
Для
сервиса
replit
будут
выглядеть
следующим
образом.
Если в терминале будет выведена строка <QuerySet []> – таблица не
Если
вв терминале
будет
<QuerySet
[]>
таблица
не
содержит
записей.
Еслив
терминале будет
будет выведена
выведена
строка
<QuerySet
[]> ––[]>
таблица
не
Если
терминале
выведенастрока
строка
<QuerySet
– таблисодержит
Для записей.
тестирования
модели внесем данные и сохраним изменения.
ца
не содержит
записей.
содержит
записей.
тестирования
внесем
данные
и
изменения.
Для
этого в том жемодели
Django
Shell
впишем
следующие
команды:
Для
тестирования
модели
внесем
данные
и сохраним
изменения.
тестирования
модели
внесем
данные
и сохраним
сохраним
изменения.
Для
этого
том
Shell
впишем
следующие
команды:
Для
томже
жеDjango
Django
Shell
впишем
следующие
person1
age=18)
Дляэтого
этого= ввPerson(name='Студент1',
том
же
Django
Shell
впишем
следующие
команды:команды:
person1
=
Person(name=’Студент1’,
age=18)
person1
=
Person(name='Студент1',
age=18)
person1.save()
person1 = Person(name='Студент1', age=18)
person1.save()
person1.save()
Person.objects.all()
person1.save()
Person.objects.all()
Person.objects.all()
Person.objects.all()
Данныевнесены,
внесены, так
так как
как QuerySet
QuerySet содержит
данные
в квадратных
Данные
содержит
данные
в квадратДанные
скобках.
Данные внесены,
внесены, так
так как
как QuerySet
QuerySet содержит
содержит данные
данные вв квадратных
квадратных
ных
скобках.
скобках.
Теперь выйдем из Django shell, прописав в терминале команду exit()
скобках.
Теперь
прописав
в терминале команду exit()
Теперь выйдем
выйдем из
из Django
Django shell,
shell,
прописав
244
в терминале команду exit()
Данные внесены, так как QuerySet содержит данные в квадратных
скобках.
Теперь выйдем из Django shell, прописав в терминале команду
exit() Теперь выйдем из Django shell, прописав в терминале команду exit()
Дляполучения
получения данных
из модели
перейдем
в файл views.py
и исправим
Для
данных
из модели
перейдем
в файл
views.py
дав логичное
функцииназвание
и получив функции
все данные и
изполучив
таблицы Person.
икод,
исправим
код,название
дав логичное
все данные из таблицы Person.
Теперь,
чтобы
данные,
добавим
вв шаблон
Теперь,чтобы
чтобы отразить
отразить
данные,
добавим
шаблонв index.html
index.html
следующий
Теперь,
отразить
данные,
добавим
шаблон следующий
index.html
Теперь,
чтобы
отразить
данные,
добавим
в шаблон
index.html
следующий
код:
код:
следующий
код:
код:
Подсказка:
формирования
структуры
html
можно
вв
Подсказка: для
для
быстрого
формирования
структуры
html файла
файла
можно
Подсказка:
для быстрого
быстрого
формирования
структуры
html
файла
Подсказка:
для
быстрого
формирования
структуры
html
файла
можно
в
редакторе
Visual
Code написать
«!»
Enter.
можно
в редакторе
Studio Code
написать
редакторе
Visual Studio
StudioVisual
Code
написать
«!» и
и нажать
нажать
Enter.«!» и нажать Enter.
редакторе
Visual
Studio
Code написать
«!»
и
нажать
Enter.
Сформируется
шаблон.
Сформируется
Сформируется шаблон.
шаблон.
245
Сформируется шаблон.
Теперь
изменим файл
urls.py
Теперь
изменим
файл
Теперь изменим
файл urls.py
urls.py
Теперь изменим файл urls.py
Запустим сервер командой python manage.py runserver или py
Запустим сервер командой
manage.py runserver и посмотрим на результат.
python manage.py runserver
или
Запустим сервер командой python manage.py runserver или py
manage.py runserver
и посмотрим на результат.
Теперь внесенные данные отображаются на главной странице.
Запустим сервер командой
python
manage.py runserver или py
py manage.py
runserver
Методические указания
manage.py runserver
и посмотрим на результат.
и посмотрим
на результат.
Django
Shell представляет собой интерактивную
Python-оболочку,
интегрированную с вашим Django-проектом. Она позволяет напрямую
Теперь внесенные данные отображаются на главной странице.
взаимодействовать с моделями данных, что полезно для тестирования и
Методические указания
манипуляции данными без необходимости создавать веб-интерфейсы. Запуск
Теперь
внесенные данные отображаются на главной странице.
Теперь
внесенные
данные отображаются
на главной
странице.
Django
Shell представляет
собой интерактивную
Python-оболочку,
Методические указания
интегрированную с вашим Django-проектом. Она позволяет напрямую
Методические
Django Shellуказания
представляет собой интерактивную Python-оболочку,
взаимодействовать с моделями данных, что полезно для тестирования и
Django
Shell спредставляет
собой Она
интерактивную
Pythonинтегрированную
вашим Django-проектом.
позволяет напрямую
манипуляции данными без необходимости создавать веб-интерфейсы. Запуск
оболочку,
интегрированную
вашимчтоDjango-проектом.
Она позвовзаимодействовать
с моделями сданных,
полезно для тестирования
и
ляетманипуляции
напрямуюданными
взаимодействовать
моделями
данных, что
полезбез необходимостис создавать
веб-интерфейсы.
Запуск
но для тестирования и манипуляции данными без необходимости
создавать веб-интерфейсы. Запуск Django Shell осуществляется командой python manage.py shell, что дает прямой доступ к API Django
ORM для работы с базой данных.
В Django каждая модель связана с таблицей в базе данных. Формирование новых записей в таблице модели осуществляется путем
246
создания экземпляра модели и вызова метода save(). Например,
person1 = Person(name=’Студент1’, age=18) создает новый объект,
а person1.save() сохраняет его в базе данных. Это добавляет запись
в таблицу, соответствующую модели Person.
Для просмотра данных в модели используется метод objects.
all(), который возвращает QuerySet всех объектов данной модели.
Этот QuerySet может быть использован для дальнейших операций
фильтрации, оценки или преобразования данных.
Для отображения данных из модели в веб-интерфейсе необходимо изменить файл views.py. В этом файле создается функция
представления, которая извлекает данные из базы данных и передает их в шаблон. Например, функция может извлекать все объекты
Person и передавать их в HTML-шаблон для отображения.
HTML-шаблоны в Django используются для определения
структуры веб-страницы. Данные, передаваемые из представления, могут быть вставлены в шаблон с помощью Django Template
Language. Это позволяет динамически генерировать HTML
на основе данных, полученных из базы данных.
Файл urls.py в Django-проекте управляет маршрутизацией
веб-запросов. Он определяет URL-адреса, которые связаны с конкретными представлениями. Изменения в urls.py позволяют направлять запросы на новые или измененные представления, что
важно для правильного отображения данных на соответствующих
веб-страницах.
После внесения изменений в код сервер можно перезапустить
с помощью команды python manage.py runserver. Это запустит локальный сервер разработки, и можно будет проверить, как данные
отображаются на созданной веб-странице, перейдя по соответствующему URL в браузере.
Задание 2. Разработайте и интегрируйте в ваш Django-проект
модель StudentGroup, которая будет содержать информацию о группе студентов и связана с ранее созданной моделью Person. После
создания моделей проведите миграцию данных, используя Django
ORM. Введите данные через Django shell для Person и StudentGroup
247
StudentGroup, которая будет содержать информацию о группе студентов и
связана с ранее созданной моделью Person. После создания моделей проведите
миграцию данных, используя Django ORM. Введите данные через Django shell
убедитесь
в их наличии
через запросы.
Создайте
дляи Person
и StudentGroup
и убедитесь
в их наличии
через представления
запросы. Создайте
и шаблоны для
отображения
информации
о студентах
их группах
представления
и шаблоны
для отображения
информации
о истудентах
и их
на веб-странице и настройте соответствующие маршруты в файле
urls.py. Запустите сервер и проверьте результаты в браузере.
группах на веб-странице и настройте соответствующие маршруты в файле
urls.py. Запустите сервер и проверьте результаты в браузере.
Ход работы
Теперь попробуем создать модель StudentGroup, которая будет
Теперь попробуем создать модель StudentGroup, которая будет содержать
содержать данные о группе студента, и свяжем её с предыдущей
данные
о группе студента, и свяжем её с предыдущей моделью.
моделью.
Создайте
длядля
таблиц,
которые
будутбудут
хранить
ваши ваши
данные
в том
Создайтемодели
модели
таблиц,
которые
хранить
данв том
же файле models.py.
женые
файле
models.py.
Нарисунке
рисунке
показан
конечный
вариант
models.py.
На
показан
конечный
вариант
файла файла
models.py.
Ход работы
Теперьнеобходимо
необходимоудалить
удалитьизизпапки
папкипроекта
проектаследующие
следующиефайлы
фай- и
Теперь
лы
и
каталоги,
если
они
есть
в
проекте:
каталоги, если они есть в проекте:
1) файл
db.sqlite3;
1) файл db.sqlite3;
2) папку migrations;
2) папку migrations;
3) папку __pycache__.
Запустите миграции для создания таблиц в базе данных с помощью команд:
python manage.py makemigrations project
python manage.py migrate project
python manage.py migrate
248
python manage.py makemigrations project
python manage.py migrate project
python manage.py migrate
случае использования
использования сервиса
replit replit
необходимо
перейти вперейти
Shell и
В Вслучае
сервиса
необходимо
следующие команды:
в использовать
Shell и использовать
следующие команды:
python manage.py
django_project django_project
pythonmakemigrations
manage.py makemigrations
pythonmigrate
manage.py
migrate django_project
python manage.py
django_project
pythonmigrate
manage.py migrate
python manage.py
Миграции
прошли
успешно.
Миграции
прошли
успешно.
Теперьсоздайте
создайте
данные
с помощью
Django
Теперь
данные
с помощью
Django
shell. shell.
Для открытия Django shell впишите команду
python manage.py shell
Для открытия Django shell впишите команду python manage.py shell
249
Миграции прошли успешно.
Теперь создайте данные с помощью Django shell.
Для открытия Django shell впишите команду python manage.py shell
from project.models
import
Person,
StudentGroup
from project.models
import
Person,
StudentGroup
group1 ==StudentGroup.objects.create(group='Группа–2203а',
group1
StudentGroup.objects.create(group=’Группа–2203а’,
entry_year=2023,
entry_year=2023,
department='Институт
...')
department=’Институт ...’)
group1.save()
group1.save()
= Person.objects.create(name=’ФИО
студента’,
person1person1
= Person.objects.create(name='ФИО
студента', age=18, info=group1)
age=18, info=group1)
person1.save()
person1.save()
StudentGroup.objects.all()
Person.objects.all()
Для сервиса replit необходимо писать так:
from django_project.models import Person, StudentGroup
group1 = StudentGroup.objects.create(group=’Группа–2203а’,
entry_year=2023,
department=’Институт ...’)
group1.save()
person1 = Person.objects.create(name=’ФИО студента’,
age=18, info=group1)
person1.save()
StudentGroup.objects.all()
Person.objects.all()
250
person1.save()
from django_project.models
import Person, StudentGroup
group1 = StudentGroup.objects.create(group='Группа–2203а', entry_year=2023,
StudentGroup.objects.all()
department='Институт ...')
Person.objects.all()
group1.save()
person1 = Person.objects.create(name='ФИО студента', age=18, info=group1)
person1.save()
StudentGroup.objects.all()
Person.objects.all()
данном примере
группу
и и
студента,
который
привязан
В данном
примеремы
мысоздаем
создаем
группу
студента,
который
при- к
В данном примере мы создаем группу и студента, который привязан к
вязан
к этой группе.
этой
группе.
этой группе.
Теперь,
чтобы
выйти
из
Django
напишите
Теперь,
чтобы
выйти
из Django
Shell,Shell,
напишите
команду
exit() команду
Теперь, чтобы
выйти
из Django
Shell,
напишите
команду
exit() exit()
Далее необходимо получить и обработать данные в существующем
Далее необходимо получить и обработать данные в существупредставлении views.py. В шаблон передаем данные person, которые получаем в
Далее
необходимо получить и обработать данные в существующем
ющем
представлении
строке 6 из таблицы. views.py. В шаблон передаем данные person,
представлении
views.py.
шаблон
передаем
данные
person, которые получаем в
Переопределим
передачу
в шаблон
person_list.html.
которые получаем
вВ
строке
6данных
из
таблицы.
передачу данных в шаблон person_list.html.
строкеПереопределим
6 из таблицы.
Переопределим передачу данных в шаблон person_list.html.
Здесь
все
данные
из таблицы
Здесь получаем
получаем все
данные
из таблицы
Person.Person.
Теперь
необходимо
создать
person_list.html
в папке
Теперь необходимо
создать
шаблоншаблон
person_list.html
в папке templates.
templates. Здесь получаем все данные из таблицы Person.
Теперь необходимо создать шаблон person_list.html в папке templates.
251
Добавим в файл urls.py адрес до представления, который будет вызывать
Добавим в файл urls.py адрес до представления, который будет вызывать
представление views.py.
представление views.py.
выводимв виде
в виде«списка»
«списка» имена,
и информацию
о
ЗдесьЗдесь
выводим
имена,возраст
возраст
и информацию
студентах.
о студентах.
Добавим в файл urls.py адрес до представления, который будет
Добавим в файл urls.py адрес до представления, который будет вызывать
вызывать представление
views.py.
представление views.py.
Запустим приложение через терминал py manage.py runserver.
Запустим
через
терминал
py manage.py
Запустим приложение
приложение через
терминал
py manage.py
runserver. runserver.
Запустим приложение через терминал py manage.py runserver.
Запустится сервер по адресу http://127.0.0.1:8000/
http://127.0.0.1:8000/
Запустится сервер
сервер попо
адресу
Запустится
адресу
http://127.0.0.1:8000/
Запустится сервер по адресу http://127.0.0.1:8000/
Теперь откроем браузер, перейдем по адресу 127.0.0.1:8000/students или
localhost:8000/students и увидим результат работы. В браузере выводятся данные
о студенте: его Ф. И. О., возраст и группа.
Теперь откроем браузер, перейдем по адресу 127.0.0.1:8000/students или
Теперь откроем браузер, перейдем по адресу 127.0.0.1:8000/students или
localhost:8000/students и увидим результат работы. В браузере выводятся данные
localhost:8000/students и увидим результат работы. В браузере выводятся данные
о студенте: его Ф. И. О., возраст и группа.
252
о студенте: его Ф. И. О., возраст и группа.
Теперь откроем браузер, перейдем по адресу 127.0.0.1:8000/
students или localhost:8000/students и увидим результат работы.
В браузере выводятся данные о студенте: его Ф. И. О., возраст
и группа.
В случае использования сервиса replit запустим проект кнопкой
В случае
случае использования
использования сервиса
сервиса replit
replit запустим
запустим проект
проект кнопкой
кнопкой Run.
Run.
В
Run.
В случае использования сервиса replit запустим проект кнопкой Run.
В случае использования сервиса replit запустим проект кнопкой Run.
В
откроется
проект,
будет
Page
В webview
откроется
в котором
будет ––ошибка,
– Page not
В webview
webview
откроется проект,
проект, вв котором
котором
будет ошибка,
ошибка,
Page not
not found.
found.
found.В webview откроется проект, в котором будет ошибка, – Page not found.
В webview откроется проект, в котором будет ошибка, – Page not found.
Откроем
Откроем созданное
созданное приложение
приложение вв новой
новой вкладке.
вкладке.
Откроем созданное
созданное приложение
в новой
вкладке.вкладке.
Откроем
приложение
в новой
Откроем созданное приложение
в новой
вкладке.
И
И вв адресной
адресной строке
строке добавим
добавим открытие
открытие страницы
страницы students.
students.
И в адресной строке добавим открытие страницы students.
И в адресной строке добавим открытие страницы students.
253
И в адресной строке добавим открытие страницы students.
Методические указания
Методические указания
В Django модель представляет собой класс Python, который определяется
ВдляDjango
модель представляет собой класс Python, который
каждой таблицы базы данных. Модели включают поля и поведение данных.
определяется
для каждой
таблицы
базы
данных.Person,
Модели
включаСоздание модели
StudentGroup,
связанной
с моделью
позволяет
ют поля
и
поведение
данных.
Создание
модели
StudentGroup,
структурировать информацию о студенческих группах и отношениях между связанной
с моделью
Person,Модель
позволяет
структурировать
студентами
и их группами.
StudentGroup
может содержать информацию
поля, такие
о студенческих
группах
и отношениях
между студентами и их групкак название группы,
год поступления
и кафедра.
пами. Модель
StudentGroup
можетдлясодержать
как наМиграции
в Django используются
применения поля,
и откататакие
изменений,
внесенных
в модели.
После созданияи кафедра.
или изменения моделей необходимо
звание
группы,
год поступления
выполнить миграции
для обновления
схемы базыдля
данных.
Это включает висебя
Миграции
в Django
используются
применения
отката
команды
makemigrations,
которая
генерирует
скрипты
миграции,
migrate,
изменений, внесенных в модели. После создания илии изменения
котораянеобходимо
применяет их к базе
данных.
моделей
выполнить
миграции для обновления схемы
Django
Shell
является
мощным
инструментом
работы с объектами
базы данных. Это включает
в себя
командыдля
makemigrations,
котомодели напрямую. Он позволяет создавать, изменять, удалять и запрашивать
рая генерирует скрипты миграции, и migrate, которая применяет
данные в интерактивном режиме. Это полезно для тестирования моделей и
их к базе данных.
быстрого внесения изменений в данные.
Django Shell является мощным инструментом для работы с объПредставления в Django обрабатывают бизнес-логику и взаимодействуют
ектами модели напрямую. Он позволяет создавать, изменять, удас моделями для передачи данных в шаблоны. Шаблоны отвечают за
лять и запрашивать данные в интерактивном режиме. Это полезно
формирование внешнего вида веб-страницы и могут динамически отображать
для тестирования
моделей и быстрого внесения изменений в данные.
данные, полученные из представлений. Создание эффективных представлений
Представления
в Django
обрабатывают
бизнес-логику
и взаи соответствующих шаблонов
позволяет
представлять данные
о студентах и их
имодействуют
с
моделями
для
передачи
данных
в
шаблоны.
Шагруппах на веб-странице.
блоны отвечают за формирование внешнего вида веб-страницы
и могут динамически отображать данные, полученные из представлений. Создание эффективных представлений и соответствующих
шаблонов позволяет представлять данные о студентах и их группах
на веб-странице.
254
Маршрутизация в Django управляет тем, как запросы к веб-приложению обрабатываются представлениями. Она определяется
в файле urls.py, где URL-адреса связываются с конкретными представлениями. Правильная настройка маршрутов позволяет пользователям переходить к нужным страницам для просмотра информации о студентах и их группах.
После разработки моделей, представлений, шаблонов и настройки маршрутизации важно тестировать приложение, запуская
его на локальном сервере. Это позволяет проверить, как приложение работает в браузере, и убедиться, что все компоненты взаимодействуют корректно.
Задание 3. Разработайте форму для добавления студентов
в ваш Django-проект, используя форму, созданную из модели.
Создайте файл forms.py для определения формы и интегрируйте
её в ваши представления в файле views.py. Измените файл index.
html для отображения формы и настройте маршруты в файле urls.py,
чтобы форма была доступна на главной странице сайта. Запустите
сервер и проверьте работоспособность формы, убедитесь, что данные формы корректно добавляются в базу данных через интерфейс
веб-страницы.
Ход работы
Создадим форму для добавления студентов.
Формы в Django бывают двух видов:
1) форма, определяемая «вручную»;
2) форма, создаваемая из модели (models.py).
Оба типа формы определяются в файле forms.py.
Определим форму на основе модели, созданной в предыдущих
практических работах.
Создадим файл forms.py
255
внесем ввнего
код: код:
и ивнесем
негоследующий
следующий
и внесем в него следующий код:
Теперь
перейдемв вфайл
файл views.py,
views.py, чтобы
вызвать
нашу нашу
форму форму
на
Теперь
перейдем
чтобы
вызвать
Теперь перейдем в файл views.py, чтобы вызвать нашу форму на
странице.
на странице.
странице.
256
Переименуйте
существующий
файл
'index.html'
в в ''person_list.html''
Переименуйте
существующий
файл
‘index.html’
в''person_list.html''
‘’person_list. и и
Переименуйте
существующий
файл
'index.html'
создайте
новый
index.html
каталоге
templates.
html’’
и создайте
новый
index.html
в каталоге templates.
создайте
новый
index.html
ввкаталоге
templates.
Затемнеобходимо
необходимо
задать,
чтобы
форма
открывалась
на главной
Затем
задать,
чтобы
форма
открывалась
на главной
странице.
странице.
Для
этого
в
файле
urls.py
добавим
строку,
чтобы
он
приЗатем
необходимо
задать,
чтобы
форма
открывалась
на
главной
странице.
Для этого в файле urls.py добавим строку, чтобы он принял следующий вид:
нял следующий
вид:добавим строку, чтобы он принял следующий вид:
Для этого
в файле urls.py
257
Теперьоткроем
откроем файл
index.html
и передадим
в него созданную
форму.
Теперь
файл
index.html
и передадим
в него созданную
форму.Теперь откроем файл index.html и передадим в него созданную форму.
Теперь откроем файл index.html и передадим в него созданную форму.
Запустим сервер командой py manage.py runserver или python
Запустим сервер
сервер командой py manage.py runserver или python
Запустим
manage.py
runserver командой
manage.py runserver
py manage.py runserver
или Запустим сервер командой py manage.py runserver или python
python manage.py runserver
manage.py runserver
Откроем сайт по адресу http://127.0.0.1:8000/ или http://localhost:8000/
Откроем сайт по адресу http://127.0.0.1:8000/ или http://localhost:8000/
Откроем сайт
по адресу
http://127.0.0.1:8000/
или http://localhost:8000/
Откроем
сайт
по адресу
http://127.0.0.1:8000/
или http://
localhost:8000/
258
НаНаэкране
созданная
форма.
экране появится
появится созданная
форма.
На экране появится созданная форма.
На экране появится созданная форма.
В случае использования
Replitнанажмите
на кнопку Run.
В случае использования сервиса
сервиса Replit нажмите
кнопку Run.
В случае
использования сервиса
Replit
нажмите
на кнопку
Run.
В случае
использования
сервиса
Replit
нажмите
на кнопку
Run.
Приложение будет доступно по адресу https://project1.{ваш_логин}.repl.co
Приложение будет доступно по адресу https://project1.{ваш_логин}.repl.co
Приложение будет доступно по адресу https://project1.{ваш_логин}.repl.co
Приложение будет доступно по адресу https://project1.{ваш_логин}.repl.co
Теперь при отправке формы данные будут добавляться в базу данных.
Методические указания
Теперь при отправке формы данные будут добавляться в базу
данных. Теперь при отправке формы данные будут добавляться в базу данных.
Методические указания
Методические указания
Формы в Django служат для сбора и обработки данных, вводимых пользователем через веб-интерфейс. Django предлагает два
Теперь при отправке формы данные будут добавляться в базу данных.
основных способа создания форм:
Методические указания
1) форма, определяемая «вручную»: позволяет разработчикам
явно определять поля формы, их типы и валидацию;
2) форма, создаваемая из модели: использует информацию о полях модели для автоматического создания соответствующих полей
формы, что ускоряет разработку и минимизирует дублирование кода.
259
Файл forms.py предназначен для определения форм Django.
Здесь формы описываются через классы, наследующие от django.
forms.ModelForm или django.forms.Form. Определение формы на основе модели включает автоматическое создание полей формы, соответствующих полям модели, что упрощает процесс разработки.
Для использования формы в приложении она должна быть
интегрирована в представления (views.py). Представление загружает форму при GET-запросе и обрабатывает данные формы
при POST-запросе. Обработка обычно включает проверку валидности данных и их сохранение или другие действия в зависимости
от результатов валидации.
Маршрутизация в Django управляется файлом urls.py, который
определяет URL-адреса и связывает их с конкретными представлениями. Добавление маршрута для формы позволяет пользователям
переходить по определенному URL для доступа к форме.
Шаблоны (index.html) используются для отображения формы пользователю. В шаблоне можно определить, как форма будет
отображаться, включая расположение и стилизацию полей и кнопок отправки.
Задания для самостоятельного выполнения
1. Напишите запрос, чтобы получить все объекты Product с рейтингом не ниже 4.
2. Отфильтруйте объекты User по имени и дате регистрации.
3. Отсортируйте объекты Event по дате и времени окончания.
4. Объедините объекты из моделей Product и Category с помощью запроса JOIN.
5. Аннотируйте объекты Product средним рейтингом отзывов.
6. Создайте форму набора для сбора нескольких адресов для одного пользователя.
7. Добавьте поля валидации к форме набора для обеспечения
допустимых форматов адресов.
8. Обработайте и сохраните данные, отправленные через форму
набора, в модель Address.
260
9. Создайте модельную форму для редактирования информации о пользователе.
10. Настройте представление, которое использует как форму
набора, так и модельную форму.
Тема «Сборка и запуск приложения на Python»
Задание 1. Интегрируйте ранее созданные модели данных
в административную панель Django Admin вашего проекта.
Ход работы
1. Изучите методические рекомендации.
2. Зарегистрируйте созданные модели в файле admin.py.
Создадим файл в проекте.
Теперь необходимо создать администратора. Для этого в терминале
Теперь
необходимо
создать
администратора.
этого
в термиТеперь
необходимо
создать createsuperuser
администратора.
ДляДля
этого
в терминале
введите команду
python manage.py
нале
введите
команду
python
manage.py
createsuperuser
введите команду python manage.py createsuperuser
Введите имя пользователя, адрес электронной почты и пароль от учетной
записи администратора.
Если
пароль
не будет удовлетворять
требованиям, почты
то его все
равно можно
Введите
имя
пользователя,
адрес электронной
и пароль
от учетной
применить, подтвердив действие.
записи администратора.
Если пароль не будет удовлетворять
то его все равно можно
261 требованиям,
применить, подтвердив действие.
Введите имя пользователя, адрес электронной почты и пароль
от учетной записи администратора.
Если пароль не будет удовлетворять требованиям, то его все
равно можно применить, подтвердив действие.
В случаеиспользования
использования сервиса
replit
припри
создании
суперпользователя
В случае
сервиса
replit
создании
суперпольпоявится
ошибка.
зователя
появится
ошибка.
В случае использования сервиса replit при создании суперпользователя
появится ошибка.
Дляеё
её исправления
откройте
Shell и введите
следующую
touch
Для
исправления
откройте
Shell и
введитекоманду:
следующую
/home/runner/.cache/pip/pool/94/b4/cf/common-passwords.txt.gz
Для её touch
исправления
откройте Shell и введите следующую команду: touch
команду:
/home/runner/.cache/pip/pool/94/b4/cf/commonpas-swords.txt.gz
/home/runner/.cache/pip/pool/94/b4/cf/common-passwords.txt.gz
Затем повторите действия по созданию суперпользователя.
Затемповторите
повторите действия
по созданию
суперпользователя.
Затем
действия
по созданию
суперпользователя.
262
Послесоздания
создания суперпользователя
суперпользователя запустим
серверсервер
командой
python
После
запустим
командой
После создания суперпользователя запустим сервер командой python
manage.py
runserver
python
manage.py
runserver
manage.py runserver
На экране появится созданная форма.
случае использования replit нажмите на кнопку Run.
В случаеВ использования
replit нажмите на кнопку Run.
В случае использования сервиса Replit нажмите на кнопку Run.
В случае использования replit нажмите на кнопку Run.
Приложение будет доступно по адресу https://project1.{ваш_логин}.repl.co
Перейдем в браузере по адресу http://127.0.0.1:8000/admin или
Перейдем
в браузере по адресу http://127.0.0.1:8000/admin или
http://localhost:8000/admin, или https://project1.{логин_replit}.repl.co/admin.
http://localhost:8000/admin, или https://project1.{логин_replit}.repl.
co/admin.
Перейдем в браузере по адресу http://127.0.0.1:8000/admin или
http://localhost:8000/admin, или https://project1.{логин_replit}.repl.co/admin.
Теперь при отправке формы данные будут добавляться в базу данных.
Методические указания
Введителогин
логин иипароль
в форму
и нажмите
«Войти».
Введите
пароль
в форму
и нажмите
«Войти».
Вы попали в панель администратора, и в ней представлены созданные
модели.
263
Введите логин и пароль в форму и нажмите «Войти».
ВыВы
попали
в панель
администратора,
и в ней и
представлены
созданные созпопали
в панель
администратора,
в ней представлены
модели.
данные модели.
НаНа
главной
странице
можноможно
видеть видеть
модели Person
и Student
главной
странице
модели
Person group,
и Student
которые
создавали.
group,
которые создавали.
Методические
указания
Методические
указания
Django
Admin
мощный
инструмент
управления
данныDjango
Admin
– –
мощный
инструмент
для для
управления
данными
ми приложения,
которыйадминистраторам
позволяет администраторам
приложения,
который позволяет
визуально работатьвизуальс
но работать
моделями
данных.
Дляданных
того чтобы
моделями
данных.с Для
того чтобы
модели
были модели
доступны данных
в
были доступны
в административной
панели, необходимо
их зареадминистративной
панели,
необходимо их зарегистрировать.
Это делается
гистрировать.
Это делается
специального
путём
добавления специального
кода путём
в файл добавления
admin.py, который
находится в кода
в файл admin.py,
который
находится
в соответствующем
прилосоответствующем
приложении
проекта.
Код регистрации
обычно выглядит как
жении проекта. Код регистрации обычно выглядит как admin.site.
register(ModelName), где ModelName – это имя модели, которую
вы хотите зарегистрировать.
Для доступа к административной панели Django необходим суперпользователь – пользователь с высокими привилегиями, который может управлять всеми аспектами Django-проекта. Создание
суперпользователя происходит через командную строку с использованием команды python manage.py createsuperuser. В процессе создания будут запрошены имя пользователя, адрес электронной почты
и пароль. Система может предупредить о слабом пароле, но позволит его использовать после подтверждения.
После создания суперпользователя необходимо запустить сервер разработки, используя команду python manage.py runserver. Затем можно перейти к административной панели, обычно доступной
по адресу http://127.0.0.1:8000/admin. Вход в систему осуществляется с использованием ранее созданных учётных данных суперпользователя.
264
После входа в административную панель доступны все зарегистрированные модели. Интерфейс администратора позволяет добавлять, изменять и удалять записи в этих моделях, что обеспечивает удобное управление данными проекта.
Задание 2. Настройте систему регистрации и авторизации пользователей в вашем Django-проекте, используя встроенные возможности Django для управления аутентификацией.
Ход работы
Изучите методические рекомендации.
По умолчанию Django поставляется с представлением LoginView
для страницы входа. Нам нужно только настроить несколько параметров в нашем проекте:
– URL-маршруты для системы аутентификации;
– создать HTML-шаблон для страницы входа;
– обновить файл settings.py.
Для начала
добавим
файл
urls.py
страницы
входа
выхода
Для начала
добавим ввфайл
urls.py
страницы
для входадля
и выхода
наиURLна URL-префиксе
accounts.
префиксе accounts.
Далее нужно создать новую директорию под названием registration в
Далее нужно создать новую директорию под названием
папке templates, а внутри нее создать необходимый HTML-файл шаблона.
registration в папке templates, а внутри нее создать необходимый
HTML-файл шаблона.
265
Далее нужно создать новую директорию под названием registration в
папке templates, а внутри нее создать необходимый HTML-файл шаблона.
Теперь
файл
login.html
и добавим
в него
следующий
код: код:
Теперьоткроем
откроем
файл
login.html
и добавим
в него
следующий
На финальном этапе нам нужно уточнить, куда именно перенаправить
На финальном этапе нам нужно уточнить, куда именно перенаправить пользователя после успешного входа. Для этого настроим
LOGIN_REDIRECT_URL.
файле
settings.py
добавляем
строку:
На финальном В
этапе
нам нужно
уточнить,
куда именноследующую
переменную
LOGIN_REDIRECT_URL.
В файлеперенаправить
settings.py
добавпользователя после успешного входа. Для этого настроим переменную
ляем следующую
строку:
LOGIN_REDIRECT_URL. В файле settings.py добавляем следующую строку:
пользователя после успешного входа. Для этого настроим переменную
Теперь пользователь
будетнаправлен
направлен нана
URL-маршрут,
который который
имеет
Теперь пользователь
будет
URL-маршрут,
имеет
Теперь
пользователь
будет
направлен
на
URL-маршрут,
название 'create_student', который является домашней страницей.
название 'create_student',
который является домашней
страницей.
который
имеет
название
и является
страЗапустим
сервер ‘create_student’
командой py manage.py
runserver илидомашней
python
сервер
manage.py
runserverкомандой py manage.py runserver или python
ницей.Запустим
manage.py runserver
266
Теперь пользователь будет направлен на URL-маршрут, который имеет
название 'create_student', который является домашней страницей.
Запустим
py manage.py
manage.py runserver
runserver или
или python
python
Запустим сервер
сервер командой
командой py
manage.py
manage.py runserver
runserver
Проверим
или
Проверим страницу
страницу http://127.0.0.1:8000/accounts/login/
http://127.0.0.1:8000/accounts/login/
или
Проверим
страницу
http://127.0.0.1:8000/accounts/login/
или
http://localhost:8000/accounts/login/,
или
https://project1.{логин_
http://localhost:8000/accounts/login/,
или
http://localhost:8000/accounts/login/, Мы должны оказаться на созданной
или
replit}.repl.co/accounts/login/.
https://project1.{логин_replit}.repl.co/accounts/login/. Мы должны оказаться на
https://project1.{логин_replit}.repl.co/accounts/login/.
Мы должны оказаться на
странице
авторизации.
созданной странице авторизации.
созданной странице авторизации.
На созданной странице появилась форма авторизации. ВпиНа созданной странице появилась форма авторизации. Впишем в нее
шем вНанее
ранее странице
созданные
логинформа
и пароль
от учетной
созданной
появилась
авторизации.
Впишемзаписи
в нее
ранее созданные логин и пароль от учетной записи администратора.
администратора.
ранее созданные логин и пароль от учетной записи администратора.
Нажмем кнопку «Войти».
Нажмем кнопку «Войти».
Нажмем
кнопку
Нас
перевело
на«Войти».
страницу с формой создания студента.
Нас перевело на страницу с формой создания студента.
Нас перевело на страницу с формой создания студента.
267
Перейдем
также
жеже
нана страницу
http://127.0.0.1/admin
или
Перейдем
так
страницу
http://127.0.0.1/admin
или
Перейдем
такна
страницу
http://127.0.0.1/admin
илиhttp://
http://localhost/admin
или
https://project1.{логин_replit}.repl.co/admin.
localhost/admin
или
http://localhost/admin
илиhttps://project1.{логин_replit}.repl.co/admin.
https://project1.{логин_replit}.repl.co/admin.
Как
видим,
в
панели
администратора
мы также
авторизовались.
Как
видим,в впанели
панели
администратора
мы
также
авторизовались.
Как видим,
администратора
мы также
авторизовались.
Это
значит,
что
теперь
можем
входить
в
приложение
как
администратор/пользователь через отдельно созданную страницу.
Для
регистрации
новых
пользователей
также
понадобится
Это
значит,
теперь
можем
входить
в приложение
как адмиЭто
значит,что
что
теперь
в класс
приложение
как
представление
(views).
В Django можем
для этого входить
предусмотрен
формы
нистратор/пользователь
через
отдельно
созданную
страницу.
администратор/пользователь
отдельно
созданную
UserCreationForm, которыйчерез
сильно
упрощает
работу.
Постраницу.
умолчанию
в нем
Для
регистрации
новых
пользователей
также
понадобится
предприсутствуюn
три
поля:
username,
password
и
password2.
Для регистрации новых пользователей также понадобится
Для
страницы
регистрации
создадим
новое
приложение
accounts
ставление (views). В Django для этого предусмотрен класс формы
представление (views). В Django для этого предусмотрен класс формы
командой python manage.py
startapp
accounts
UserCreationForm,
который
сильно
упрощает работу. По умолчаUserCreationForm, который сильно упрощает работу. По умолчанию в нем
нию в нем присутствуют три поля: username, password и password2.
присутствуюn три поля: username, password и password2.
Для страницы регистрации создадим новое приложение
Для страницы регистрации создадим новое приложение accounts
accounts
командой python manage.py startapp accounts
командой python manage.py startapp accounts
Добавим
приложение
INSTALLED_APPS)
project/settings.py).
основного
в
файл
проекта
268
settings.py
(в
переменную
(django_project/settings.py
или
Добавим
приложение
INSTALLED_APPS)
в
файл
основного
проекта
settings.py
(в
переменную
(django_project/settings.py
или
project/settings.py).
Добавим приложение
в файл settings.py (в переменную
в
файл
settings.py
(в
переменную
INSTALLED_APPS) основного проекта (django_project/settings.py
INSTALLED_APPS) основного проекта (django_project/settings.py или
или project/settings.py).
project/settings.py).
Добавим
приложение
При использовании replit переменная INSTALLED_APPS будет выглядеть
При
replit
переменная
INSTALLED_APPS
будет
Прииспользовании
использовании replit
переменная
INSTALLED_APPS
будет выглядеть
следующим образом:
выглядеть
образом:
следующимследующим
образом:
Далее
добавляем
новый
URL-маршрут
в
project/urls.py
или
django_project/urls.py, указывая на новое приложение.
Далее добавляем
добавляем новый
новый URL-маршрут
URL-маршрут вв project/urls.py
project/urls.py или
Далее
или
django_project/urls.py, указывая
на новое
django_project/urls.py,
указывая
на приложение.
новое приложение.
Теперь в приложении accounts необходимо создать файл urls.py.
269
Теперь
в приложении
accounts
необходимо
создать
Теперь
в приложении accounts
необходимо
создать файл
urls.py.файл urls.py.
Добавим
в негоследующий
следующий код:код:
Добавим
в него
Теперь перейдем
перейдем к кпредставлению
(views.py)
в приложении
accounts и
Теперь
представлению
(views.py)
в приложении
accounts
и встроенный
используем
встроенный
класси UserCreationForm
и обиспользуем
класс
UserCreationForm
общий класс представления
щий
класс представления CreateView.
CreateView.
Теперь необходимо создать шаблон signup.html, который указали в
представлении.
Создадим в приложении accounts
папку templates и в папке templates
270
создадим файл signup.html.
Теперь необходимо создать шаблон signup.html, который указали в представлении.
Создадим в приложении accounts папку templates и в папке
templates создадим файл signup.html.
Теперь добавим в файл signup.html следующий код.
Теперь
файл
signup.html
следующий
код.
Теперьдобавим
добавим ввфайл
signup.html
следующий
код.
Запускаем локальный веб-сервер через команду py manage.py runserver
Запускаем локальный
веб-сервер
через команду
manage.py
Запускаем
локальный
веб-сервер
через py
команду
py runserver
manage.py
runserver
В случае использования replit нажимаем на кнопку Run.
271
В случае использования replit нажимаем на кнопку Run.
В случаеиспользования
использования replit
нажимаем
на кнопку
В случае
replit
нажимаем
на Run.
кнопку Run.
В случае использования replit нажимаем на кнопку Run.
Перейдите вПерейдите
браузере
по адресу http://127.0.0.1:8000/accounts/signup/ или
в браузере по адресу http://127.0.0.1:8000/accounts/signup/ или
https://project1.{ваш_логин}.repl.co/accounts/signup/.
Перейдите
браузере
адресу
http://127.0.0.1:8000/accounts/
https://project1.{ваш_логин}.repl.co/accounts/signup/.
Перейдите
вв браузере
по по
адресу
http://127.0.0.1:8000/accounts/signup/
или
signup/
или
https://project1.{ваш_логин}.repl.co/accounts/signup/.
https://project1.{ваш_логин}.repl.co/accounts/signup/.
Перед нами появилась страница регистрации.
Введите имя пользователя и пароль для нового пользователя.
Перед нами появилась страница регистрации.
Перед нами появилась страница регистрации.
Введите
имя пользователя
и пароль
для нового пользователя.
Перед
нами
страница
Введите
имяпоявилась
пользователя
и регистрации.
пароль для нового пользователя.
Введите имя пользователя и пароль для нового пользователя.
И нажмите кнопку «Зарегистрироваться».
Попробуем перейти по адресу http://127.0.0.1:8000/admin или
После регистрации
мы окажемся на странице http:// 127.0.0.1:
https://project1.{Ваш логин Replit}.repl.co/admin/ и увидим сообщение о том, что
8000/accounts/login/.
создан простой пользователь и у него нет доступа к панели администратора.
272
Попробуем
перейти
по
адресу
http://127.0.0.1:8000/admin
или
Введем данные
нового пользователя
и сообщение
нажмем кнопку
https://project1.{Ваш
логинот
Replit}.repl.co/admin/
и увидим
о том, что
«Войти».
создан
простой пользователь и у него нет доступа к панели администратора.
Если отправит
подобное сообщение
появилось,
значит,
все действия
выполнены
Нас
на страницу
создания
студента
http://127.0.0.1:
8000/create/
логинпод
Replit}.repl.co/create/.
И нажмите
кнопку
«Зарегистрироваться».
верно.
Войдемили
в https://project1.{Ваш
панель
администратора
логином и паролем
администратора, перейдем по адресу http://127.0.0.1:8000/admin/auth/user/ или
https://project1.{Ваш логин Replit}.repl.co/admin/auth/user/ и увидим, что у
нового пользователя статус персонала заблокирован. Это означает, что новый
пользователь зарегистрирован
как обычный пользователь приложения и не
И нажмите кнопку «Зарегистрироваться».
является администратором.
Попробуем
перейти по адресу
или
После
регистрации
нас http://127.0.0.1:8000/admin
перекинет
на
страницу
https://project1.{Ваш
логин
Replit}.repl.co/admin/
и
увидим
сообщеhttp://127.0.0.1:8000/accounts/login/.
После
регистрации
нас
перекинет
на
страницу
ние о
том, данные
что
создан
простой
пользователь
у него
нет доступа
Введем
от нового
пользователя
и нажмемикнопку
«Войти».
http://127.0.0.1:8000/accounts/login/.
к панели администратора.
Введем данные от нового пользователя и нажмем кнопку «Войти».
Нас отправит на страницу создания студента http://127.0.0.1:8000/create/
или https://project1.{Ваш логин Replit}.repl.co/create/.
273
Нас отправит на страницу создания студента http://127.0.0.1:8000/create/
Если подобное сообщение появилось, значит, все действия
выполнены верно. Войдем в панель администратора под логином
и паролем администратора, перейдем по адресу http://127.0.0.1:8000/
admin/auth/user/ или https://project1.{Ваш логин Replit}.repl.co/
admin/auth/user/ и увидим, что у нового пользователя статус персонала заблокирован. Это означает, что новый пользователь зарегистрирован как обычный пользователь приложения и не является
администратором.
Методические указания
Django предоставляет обширные встроенные средства для управМетодические указания
ления аутентификацией пользователей, включая страницы входа
Django предоставляет обширные встроенные средства для управления
и выхода, а также систему управления сессиями. Эти функции
аутентификацией пользователей, включая страницы входа и выхода, а также
помогают разработчикам быстро и безопасно реализовать необхосистему
сессиями.
Эти функции помогают разработчикам быстро и
димые управления
механизмы
авторизации.
безопасно
реализовать
необходимые
механизмы
авторизации.
Настройка
маршрутов
в Django
выполняется
путём добавления
Настройка
маршрутов
в
Django
выполняется
путём добавления
специальных путей в файл urls.py проекта. Для системы
аутентиспециальных
путей создаются
в файл urls.py
проекта.для
Для
системывхода
аутентификации
фикации обычно
маршруты
страниц
и выхода,
а такжесоздаются
для регистрации
новых
пользователей.
Эти амаршруты
обычно
маршруты для
страниц
входа и выхода,
также для
обеспечивают
переход
к
соответствующим
представлениям,
кото-к
регистрации новых пользователей. Эти маршруты обеспечивают переход
рые обрабатывают
формы входакоторые
и регистрации.
соответствующим
представлениям,
обрабатывают формы входа и
HTML-шаблоны для аутентификации создаются в директории
регистрации.
registration в папке templates. Шаблон login.html обычно содержит
HTML-шаблоны для аутентификации создаются в директории registration
форму входа, которая позволяет пользователям аутентифициров папке templates. Шаблон login.html обычно содержит форму входа, которая
ваться в системе. В шаблоне могут быть использованы стандартные
позволяет
пользователям
в системе.
В шаблоне
могут
поля Django
для ввода аутентифицироваться
логина и пароля, а также
кнопки
для отправбыть
использованы стандартные поля Django для ввода логина и пароля, а
ки формы.
также кнопки для отправки формы.
В файле settings.py проекта необходимо указать дополнительные
параметры конфигурации, такие как LOGIN_REDIRECT_URL, который
определяет URL, на который будет перенаправлен пользователь после
274
успешного входа. Этот параметр обеспечивает более гладкий пользовательский
опыт,
направляя
пользователей
на
нужную
страницу
сразу
после
В файле settings.py проекта необходимо указать дополнительные параметры конфигурации, такие как LOGIN_REDIRECT_
URL, который определяет URL, на который будет перенаправлен
пользователь после успешного входа. Этот параметр обеспечивает
более гладкий пользовательский опыт, направляя пользователей
на нужную страницу сразу после аутентификации.
Для регистрации новых пользователей берется класс формы
UserCreationForm, который включает поля для имени пользователя
и пароля. Эта форма обычно размещается на странице регистрации
и позволяет быстро и безопасно добавлять новых пользователей
в систему. После заполнения и отправки формы данные проверяются на валидность, и при успешной регистрации пользователь
может использовать свои учетные данные для входа в систему.
После настройки маршрутов, создания шаблонов и конфигурации параметров необходимо провести тестирование системы.
Запуск локального сервера и переход по соответствующим URL
позволят проверить работоспособность страниц входа и регистрации, а также корректность перенаправлений и обработки форм.
Тестирование должно также включать проверку безопасности
системы аутентификации.
Задание 3. Настройте и проведите тестирование моделей вашего веб-приложения на Django.
Методические указания
Для отладки веб-приложения необходимо произвести его
тестирование. Тестирование может распространяться на все компоненты: модели, представления и так далее.
Для тестирования модели в приложении необходимо создать
файл tests.py в папке project.
275
ВВ Вслучае
случае
использования
replit
создайте файл
файл tests.py
tests.pyвв папке
впапке
папке
файл
tests.py
случаеиспользования
использования replit
replit создайте
создайте
django_project.
django_project.
django_project.
Напишите следующий тест-кейс в файл tests.py
Напишите следующий тест-кейс в файл tests.py
276
Напишите следующий тест-кейс в файл tests.py
Запуститетест
тест
командойpython
python
manage.py
Запустите
командой
manage.py
testtest
Тесты успешно пройдены.
Тесты успешно пройдены.
Задание 4. Разверните ваше Django-веб-приложение, используя
сервис ngrok для организации доступа к нему из Интернета.
Ход
работы4. Разверните ваше Django-веб-приложение, используя серв
Задание
После окончания разработки веб-приложение должно быть
ngrok для организации доступа к нему из Интернета.
размещено в Интернете, чтобы общественность могла получить
Ход
работы
доступ
к нему
из любого места.
После
окончания приложения
разработки веб-приложение
должносервер.
быть размещено
Для
развертывания
понадобится отдельный
Перейдем
к публикации.
Для публикации
будемдоступ
использовать
Интернете,
чтобы
общественность
могла получить
к нему из любо
ngrok.
места.
Ngrok – это сервис, который позволяет организовать удалёнДля развертывания
понадобится
отдельный
сервер.
ный доступ
на веб-серверприложения
или какой-то
другой сервис,
запущенный
на вашем
ПК. к публикации. Для публикации будем использовать ngrok.
Перейдем
Зарегистрируйтесь на сайте https://dashboard.ngrok.com/signup.
Ngrok – это сервис, который позволяет организовать удалённый доступ
На главной странице скачайте ngrok.
веб-сервер или какой-то другой сервис, запущенный на вашем ПК.
Зарегистрируйтесь на сайте https://dashboard.ngrok.com/signup.
На главной странице скачайте ngrok.
277
Скачается архив
с ngrok.
Скачается
архив
ngrok.
Скачаетсясархив
с ngrok.
Скачается архив с ngrok.
Разархивируйте его.
Разархивируйте
его. его.
Разархивируйте
Разархивируйте его.
Перейдите обратно в браузер, пролистайте страницу ниже, скопируйте
команду
для добавления
приложения
Перейдите
обратнотокена
в браузер,
пролистайте страницу ниже, скопируйте
Перейдите
обратно в браузер, пролистайте страницу ниже, скокоманду для добавления токена приложения
пируйте команду для добавления токена приложения
Перейдите обратно в браузер, пролистайте страницу ниже, скопируйте
команду для добавления токена приложения
и
командной
строки
вызовите
следующую
и
из
командной
строки
вызовите
следующую
команду:
и изиз
командной
строки
вызовите
следующую
команду:команду:
ngrok.exe
config add–authtoken
*ваш_токен*
ngrok.exe
configadd–authtoken
add–authtoken
*ваш_токен*
ngrok.exe
config
*ваш_токен*
Токен для авторизации сохранится в конфигурационном файле ngrok.yml.
Токендля
дляавторизации
авторизации
сохранится
в конфигурационном
файле
Токен
сохранится
в конфигурационном
файле ngrok.yml.
Запустите сервер ngrok через командную строку командой ngrok.exe http
ngrok.yml.
Запустите сервер ngrok через командную строку командой ngrok.exe http
8000, где 8000 – порт, на котором будет запущен проект Django.
8000, где 8000 – порт, на котором будет запущен проект Django.
278
Токени из
для
авторизации
сохранится
в конфигурационном
файле ngrok.yml.
командной
строки вызовите
следующую
команду:
add–authtoken
*ваш_токен*
Запуститеngrok.exe
серверconfig
ngrok
через командную
строку командой ngrok.exe http
8000,
где 8000 – порт,
на котором
запущен
проект Django.
Запустите
сервер
ngrokбудет
через
командную
строку командой
Токен для авторизации сохранится в конфигурационном файле ngrok.yml.
ngrok.exe http Запустите
8000, где
8000 – порт, на котором будет запущен просервер ngrok через командную строку командой ngrok.exe http
ект Django.
8000, где 8000 – порт, на котором будет запущен проект Django.
В результате вы получите следующее окно:
В результате
вы получите следующее окно:
В результате вы получите следующее окно:
Если вы использовали сайт repl.it, то скачайте с него ваш проект, нажав
три точки в списке файлов и выбрав пункт Download as zip.
Есливы
вы использовали
использовали сайт
repl.it,
то скачайте
с него ваш
проект,
Если
сайт
repl.it,
то скачайте
с него
вашнажав
протри точки
в списке
файлов ви выбрав
Download
as zip. пункт Download
ект,
нажав
три точки
спискепункт
файлов
и выбрав
as zip.
Выберите пункт Download as zip.
279
Выберите
Download
as zip.
Выберите пункт
пункт Download
as zip.
Скачается архив
архив с спроектом;
его необходимо
разархивировать.
Скачается
проектом;
его необходимо
разархивировать.
Для этого нажмем по архиву правой кнопкой мыши и выберем пункт
Для этого
нажмем
по архиву правой кнопкой мыши и выберем
«Извлечь
все».нажмем по архиву правой кнопкой мыши и выберем пункт
Для этого
пункт «Извлечь
все».
«Извлечь все».
Нажимаем кнопку «Извлечь».
Нажимаем кнопку «Извлечь».
280
Нажимаем кнопку «Извлечь».
В папке Project1 появились извлеченные файлы.
В папке Project1 появились извлеченные файлы.
В папке Project1 появились извлеченные файлы.
Перейдите
откройте файл
файл settings.py
settings.pyпроекта
проекта
Перейдите вв папку
папку django_project,
django_project, откройте
Перейдите в папку django_project, откройте файл settings.py
Django
и
добавьте/измените
параметры:
Django и добавьте/измените параметры:
проекта Django и добавьте/измените параметры:
– –параметру
False;
параметруDEBUG
DEBUGустановите
установите значение
значение False;
– DEBUG установите значение False;
– ALLOWED_HOSTS определите как «[‘*’]» для возможности принятия запросов (без кавычек);
– CSRF_TRUSTED_ORIGINS (необходимо добавить после параметра ALLOWED_HOSTS), который представляет список
281
принятия запросов (без кавычек);
– параметр ALLOWED_HOSTS определите как «['*']» для возможности
– параметр ALLOWED_HOSTS определите как «['*']» для возможности
– параметр
CSRF_TRUSTED_ORIGINS (необходимо добавить после
принятия
запросов
(без(без
кавычек);
принятия
запросов
кавычек);
параметра ALLOWED_HOSTS), который представляет список доверенных
– параметр
CSRF_TRUSTED_ORIGINS
(необходимо
добавить
– параметр
CSRF_TRUSTED_ORIGINS (необходимо
добавить
после после
доверенных
адресов
для выполнения
запросов
со значением
адресов
для выполнения
запросов
сокоторый
значением
['https://*.ngrok-free.app/'].
параметра
ALLOWED_HOSTS),
представляет
список
доверенных
параметра ALLOWED_HOSTS), который представляет список доверенных
[‘https://*.ngrok-free.app/’].
адресов для выполнения запросов со значением ['https://*.ngrok-free.app/'].
адресов для выполнения запросов со значением ['https://*.ngrok-free.app/'].
Запустите сервер Django командой py manage.py runserver
Запустите
Django
командой
py manage.py
runserver
Запустите сервер
сервер Django
командой
py manage.py
runserver
Запустите сервер Django командой py manage.py runserver
Перейдите в ngrok. URL-адрес, который выдает ngrok в строке Forwarding,
скопируйте-вставьте/перепишите в адресную строку браузера.
Перейдите вв ngrok.
URL-адрес,
который
выдает ngrok
в строке
Forwarding,
Перейдите
ngrok.
URL-адрес,
который
выдает
ngrok
в строке
скопируйте-вставьте/перепишите
в адресную строку браузера.
Forwarding,
скопируйте-вставьте/перепишите
в
адресную
строку
Перейдите в ngrok. URL-адрес, который выдает ngrok в строке Forwarding,
браузера.
скопируйте-вставьте/перепишите в адресную строку браузера.
Ваш Django-проект успешно размещен в Интернете, и теперь
Django-проект
успешно
в Интернете,
и теперь
он и
будет
он будет Ваш
работать
каждый
раз,размещен
когда вы
запускаете
ngrok
сервер
работать
каждый
раз,
когда
вы
запускаете
ngrok
и
сервер
Django.
Django.
Методические указания
Django предоставляет мощные средства для создания и обработки форм.
Мы можем создавать HTML-формы с помощью классов Form и ModelForm.
Кроме того, Django предоставляет встроенную валидацию данных, введенных в
формы.
282
После того как пользователь отправит форму, данные будут проверены на
Методические указания
Django предоставляет мощные средства для создания и обработки форм. Мы можем создавать HTML-формы с помощью классов
Form и ModelForm. Кроме того, Django предоставляет встроенную
валидацию данных, введенных в формы.
После того как пользователь отправит форму, данные будут
проверены на валидность. Если данные не прошли валидацию,
Django вернет ошибки, которые можем отобразить пользователю
для исправления.
Далее можно приступить к развертыванию приложения на сервере. Для этого нам необходимо настроить базу данных, статические файлы и другие параметры в файле настроек проекта.
Для развертывания приложения Django на сервере нам нужно
установить Django и все его зависимости на сервере, скопировать
файлы проекта на сервер, настроить базу данных и другие параметры в файле настроек и запустить сервер Django. В качестве сервера можно использовать ngrok.
Во время развертывания приложения на сервере необходимо
настроить обработку статических файлов, таких как изображения,
CSS и JavaScript. Django предоставляет возможности для хранения
и обслуживания статических файлов.
Один из ключевых элементов Django – его административная
панель. Административная панель позволяет управлять данными
вашего приложения, такими как пользователи, группы, записи
блога и другие, без необходимости писать дополнительный код.
Для того чтобы начать использовать административную панель
Django, следует зарегистрировать модели данных в административной панели с помощью классов ModelAdmin. После этого сможем
добавлять, удалять и изменять данные в административной панели.
Задания для самостоятельного выполнения
1. Создайте административный интерфейс для модели User, который позволит добавлять новых пользователей и просматривать
список всех пользователей.
2. Реализуйте административный интерфейс для модели Category,
который позволит добавлять новые категории товаров и просматривать список всех категорий.
283
3. Создайте административный интерфейс для модели Product,
который позволит добавлять новые товары, просматривать и изменять информацию о них, а также удалять товары.
4. Реализуйте возможность создания новых заказов через административный интерфейс для модели Order. Добавьте функциональность для обновления статуса заказа и просмотра списка всех
заказов для каждого пользователя.
5. Создайте административный интерфейс для модели Review,
который позволит добавлять новые отзывы о продуктах, просматривать отзывы для каждого продукта и получать средний рейтинг
для каждого продукта.
6. Реализуйте функционал добавления новых адресов пользователей через административный интерфейс для модели Address.
Добавьте возможность просмотра списка адресов для каждого
пользователя.
7. Создайте административный интерфейс для модели Event,
который позволит добавлять новые события, просматривать список всех событий и получать список событий в определенном временном диапазоне.
8. Реализуйте функционал поиска пользователей по имени или
фамилии через административный интерфейс для модели User.
Добавьте возможность отображения списка пользователей, удовлетворяющих заданному критерию поиска.
9. Создайте административный интерфейс для модели Category,
который позволит изменять информацию о категориях товаров.
Добавьте функциональность для обновления названия каждой
категории.
10. Реализуйте возможность фильтрации продуктов по цене
в административном интерфейсе для модели Product. Добавьте
функциональность для отображения списка продуктов, удовлетворяющих заданному диапазону цены.
284
Модуль 3. ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ
И МАШИННОЕ ОБУЧЕНИЕ. ПРИМЕРЫ
НА PYTHON
Тема 8. Введение в искусственный интеллект
и основные методы машинного обучения
Основные задачи систем искусственного интеллекта
Искусственный интеллект (ИИ) – область компьютерных наук,
которая занимается созданием систем, способных имитировать интеллектуальное поведение человека.
Системы искусственного интеллекта (ИИ) представляют собой
программные или аппаратные системы, способные выполнять задачи, которые требуют интеллектуальных способностей, обычно
связанных с человеческим разумом. ИИ-системы используют различные методы и алгоритмы для анализа данных, обучения, принятия решений и выполнения задач, которые раньше требовали
присутствия человека.
К системам искусственного интеллекта относятся:
– экспертные системы: системы, которые используют базы
знаний, созданные экспертами в определенной области, чтобы
принимать решения и решать проблемы, которые обычно требуют
экспертных знаний;
– системы обработки естественного языка (Natural Language
Processing, NLP): системы позволяют компьютерам взаимодействовать с людьми на естественном языке. Они способны анализировать, понимать и генерировать текст, распознавать речь и выполнять задачи, связанные с языком;
– системы машинного обучения: используют алгоритмы и статистические модели для обучения на основе данных и прогнозирования или принятия решений без явного программирования.
Примеры включают нейронные сети, решающие деревья, методы
кластеризации и многое другое;
– системы компьютерного зрения: позволяют компьютерам
«видеть» и анализировать изображения и видео. Эти системы ис-
285
пользуют алгоритмы для распознавания образов, классификации
объектов, обнаружения движения и других задач, связанных с обработкой визуальной информации;
– робототехника: сочетание ИИ и робототехники, где физические роботы обладают способностью воспринимать окружающую
среду, принимать решения и взаимодействовать с ней. Роботы могут выполнять различные задачи – от промышленных операций
до помощи в домашних делах и медицинских процедурах;
– системы автоматического планирования и принятия решений: используют алгоритмы и модели для принятия оптимальных
решений и планирования действий. Они могут использоваться
в таких областях, как логистика, автономные транспортные средства и управление ресурсами. Системы ИИ стремятся выполнять задачи, требующие понимания, обучения, решения проблем
и адаптации на основе предоставленных данных.
Системы ИИ позволяют компьютерам обрабатывать и анализировать большие объемы данных, распознавать образы, принимать
решения на основе логики и опыта, а также обучаться на основе
предыдущих данных для улучшения своей производительности.
Системы искусственного интеллекта (ИИ) имеют широкий спектр
задач, которые они могут решать. Некоторые из основных задач,
которые часто встречаются в системах искусственного интеллекта,
включают классификацию, кластеризацию и регрессию.
Классификация в ИИ – задача, в которой модель обучается присваивать новым данным определенные метки классов на основе
предварительно известных классов. В Python для классификации
широко используется библиотека scikit-learn.
На рис. 133 представлен фрагмент кода, описывающий задачу
классификации цифровых изображений рукописных чисел. Есть
набор изображений рукописных цифр (0–9), каждое изображение
сопровождается соответствующей меткой с указанием правильной цифры. На основе этого набора данных модель может быть
обучена распознавать и классифицировать новые изображения
рукописных чисел.
286
набора данных модель может быть обучена распознавать и классифицировать
новые изображения рукописных чисел.
Рис.133.
133.Пример
Пример классификации
классификации
Рис.
Кластеризация в ИИ – задача, в которой модель группирует данные на
Кластеризация в ИИ – задача, в которой модель группирует данные на основе их сходства без предварительно известных классов.
также используется библиотека scikit-learn для выполнения кластеризации.
В примере (рис. 134) также используется библиотека scikit-learn
Рассмотрим задачу кластеризации набора данных о покупках в интернетдля выполнения кластеризации.
основе их сходства без предварительно известных классов. В примере (рис. 134)
магазине. У нас есть информация о покупках различных пользователей – сумма
покупки, количество товаров и время покупки. Модель может группировать
пользователей на основе их сходства в покупках для выявления сегментов или
групп покупателей с похожими покупательскими предпочтениями.
Р
ис.134.
134.Пример
Пример кластеризации
Рис.
кластеризации
Регрессия в ИИ – задача, в которой модель предсказывает непрерывные
Рассмотрим задачу кластеризации набора данных о покупках
значения на основе предоставленных данных.
в интернет-магазине. У нас есть информация о покупках различНапример, рассмотрим задачу предсказания цены домов на основе их
ных пользователей – сумма покупки, количество товаров и время
характеристик, таких как площадь, количество комнат, расположение и т. д.
Модель регрессии (рис. 135) может быть обучена на основе известных данных о
287
домах и их ценах для предсказания цены нового дома на основе его
характеристик.
покупки. Модель может группировать пользователей на основе
Р
их сходства в покупках
для
выявления
сегментов
или
групп
покупаис. 134. Пример кластеризации
телей с похожими покупательскими предпочтениями.
Регрессия в ИИ – задача, в которой модель предсказывает непрерывные
Регрессия в ИИ – задача, в которой модель предсказывает незначения на основе предоставленных данных.
прерывные значения на основе предоставленных данных.
Например, рассмотрим задачу предсказания цены домов на основе их
Например, рассмотрим задачу предсказания цены домов на осхарактеристик, таких как площадь, количество комнат, расположение и т. д.
нове их характеристик, таких как площадь, количество комнат, расМодель регрессии (рис. 135) может быть обучена на основе известных данных о
положение и т. д. Модель регрессии (рис. 135) может быть обучена
домах и их ценах для предсказания цены нового дома на основе его
на основе известных данных о домах и их ценах для предсказания
характеристик.
цены нового дома на основе его характеристик.
Рис.135.
135.Пример
Пример регрессии
Рис.
регрессии
В рассмотренных примерах представлены базовые задачи ИИ –
классификация, кластеризация и регрессия. Эти задачи позволяют системам ИИ обрабатывать данные, обнаруживать паттерны
и структуры в информации, а также принимать решения на основе
этих анализов.
Машинное обучение является подмножеством ИИ и представляет собой метод, который позволяет компьютерной системе автоматически извлекать знания из данных и использовать их для принятия решений или предсказания результатов на новых данных.
Машинное обучение позволяет системам ИИ обучаться на больших объемах данных и автоматически находить скрытые паттерны
и зависимости. Это позволяет им обрабатывать сложные и неструктурированные данные, такие как изображения, аудио и тексты.
288
Модели машинного обучения могут быть обучены классифицировать объекты на основе их признаков или предсказывать значения
на основе имеющихся данных.
Выделяют следующие типы машинного обучения.
Обучение с учителем (Supervised Learning). В обучении с учителем модель обучается на основе помеченных данных, где каждый образец данных имеет соответствующую выходную метку
или правильный ответ. Задача модели состоит в том, чтобы научиться
предсказывать правильные ответы для новых данных, которые ещё
не были встречены во время обучения. В Python для реализации
обучения с учителем можно использовать библиотеки scikit-learn
или TensorFlow.
Например, есть набор данных о ценах домов, включающий информацию о площади, количестве комнат и цене продажи. Задача
состоит в том, чтобы построить модель, которая может предсказывать цену дома на основе его характеристик. Можно использовать
обучение с учителем (рис. 136), где входные данные (площадь, количество комнат) являются признаками, а цена – выходной меткой
или целевой переменной.
Рис.136.
136.Обучение
Обучение ссучителем
Рис.
учителем
Обучение без учителя (Unsupervised Learning). В обучении без
Обучение без учителя (Unsupervised Learning). В обучении без учиучителя модель обучается на непомеченных данных, то есть данных без явных
теля модель обучается на непомеченных данных, то есть данных без
выходных меток. Задача модели в этом случае заключается в выявлении
скрытых структур, паттернов или группировке
289 данных на основе их сходства. В
Python для реализации обучения без учителя можно использовать библиотеки:
scikit-learn или TensorFlow.
явных выходных меток. Задача модели в этом случае заключается
в выявлении скрытых структур, паттернов или группировке данных
на основе их сходства. В Python для реализации обучения без учителя можно использовать библиотеки scikit-learn или TensorFlow.
Например, есть набор данных о покупках в интернет-магазине,
но без информации о категориях или классах покупок. Задача состоит в том, чтобы исследовать данные и выявить группы или кластеры покупок на основе их сходства. Можно использовать обучение
без учителя (например, алгоритм кластеризации), чтобы автоматически группировать покупки в различные сегменты (рис. 137).
Рис.
137. Обучение без учителя
Рис. 137. Обучение без учителя
Обучение с частичным привлечением учителя (Semi-Supervised
Обучение с частичным привлечением учителя (Semi-Supervised
Learning).
В обучении с частичным привлечением учителя модель
Learning).
В
обучении
с частичным
привлечением
учителянекоторые
модель обучается
на
обучается на наборе
данных,
в котором только
образцы
наборе
данных,
в котором
толькометки,
некоторые
образцы
имеютнеявные
выходные
имеют
явные
выходные
а другие
образцы
имеют
меток.
позволяет
модели
использовать
из помеченных
метки,Это
а другие
образцы
не имеют
меток. Этоинформацию
позволяет модели
использовать
и
непомеченных
данных
для
обучения.
В
Python
для
реализации
информацию из помеченных и непомеченных данных для обучения.
В Python
обучения с частичным привлечением учителя можно использовать
для реализации обучения с частичным привлечением учителя можно
библиотеку scikit-learn.
использовать библиотеку scikit-learn.
Например, есть набор данных о пациентах, включающий
Например, есть
набор данных
о пациентах,
включающийНекотов себя
медицинские
показатели
и информацию
о заболеваниях.
медицинские показатели и информацию о заболеваниях. Некоторые пациенты
имеют явно указанные диагнозы, а другие пациенты – нет. Задача состоит в том,
290
чтобы построить модель, которая может классифицировать пациентов на основе
рые пациенты имеют явно указанные диагнозы, а другие пациенты – нет. Задача состоит в том, чтобы построить модель, которая
может классифицировать пациентов на основе их медицинских
показателей и предсказывать диагнозы. Можно использовать обучение с частичным привлечением учителя (рис. 138), где помеченные данные используются для обучения модели, а непомеченные
данные помогают выявить скрытые зависимости между показателями и диагнозами.
Рис.
138.ССчастичным
частичным привлечением
учителя
Рис.
138.
привлечением
учителя
Обучение с подкреплением (Reinforcement Learning). Здесь мо
Обучение с подкреплением (Reinforcement Learning). Здесь
дель обучается на основе взаимодействия с окружающей средой.
модель обучается на основе взаимодействия с окружающей средой. Модель
Модель
принимает решения и выполняет действия, а затем полупринимает
решения и выполняет
действия, а затем
получает
положительные
чает положительные
или отрицательные
награды
за свои
действия.
или
отрицательные
награды
за
свои
действия.
Цель
модели
состоит
в том,
Цель модели состоит в том, чтобы максимизировать
суммарную
чтобы максимизировать
суммарную
награду,
используя обратную
связь
от
награду,
используя обратную
связь
от окружающей
среды. В
Python
окружающей среды. В Python для реализации обучения с подкреплением можно
использовать библиотеку TensorFlow или фреймворк OpenAI Gym.
291
Например, рассмотрим задачу
обучения
агента игре в компьютерную
игру. Агент начинает с некоторого состояния в игре и принимает действия,
для реализации обучения с подкреплением можно использовать
библиотеку TensorFlow или фреймворк OpenAI Gym.
Например, рассмотрим задачу обучения агента компьютерной
игре. Агент начинает с некоторого состояния в игре и принимает
действия, чтобы максимизировать свою награду, которая может
быть связана с достижением определенного уровня, набором очков
достижением определенного уровня, набором очков или победой в игре. Агент
или победой в игре. Агент использует обратную связь от окружаюиспользует обратную связь от окружающей среды, чтобы корректировать свои
щей среды, чтобы корректировать свои действия и улучшать свою
действия и улучшать свою стратегию во времени (рис. 139).
стратегию во времени (рис. 139).
Рис. 139. С подкреплением
Рис. 139. С подкреплением
Классификация на примере алгоритма k-ближайших соседей (kNN)
292
Классификация на примере алгоритма
k-ближайших соседей (kNN)
Алгоритм k-ближайших соседей (kNN) является простым и популярным методом классификации. Он основывается на идее, что
объекты, близкие в пространстве признаков, склонны иметь одинаковый класс.
Алгоритм k-ближайших соседей основывается на принципе
«похожие находят похожих». Он относит новый объект к классу,
который является наиболее распространенным среди k в пространстве признаков.
Для классификации алгоритм kNN выполняет ряд шагов.
• Загрузка данных: сначала необходимо загрузить данные, на которых будет выполняться классификация. Набор данных должен
содержать примеры объектов и соответствующие им метки классов.
• Подготовка обучающей и тестовой выборок: для оценки производительности модели необходимо разделить данные на обучающую и тестовую выборки. Обучающая выборка используется
для обучения модели, а тестовая выборка используется для оценки
ее точности.
• Определение числа соседей k: параметр k указывает, сколько ближайших соседей будет использовано для классификации
нового объекта. Значение k должно быть положительным целым
числом, обычно выбирается экспериментально или с помощью
кросс-валидации.
• Вычисление расстояний: для определения ближайших соседей необходимо вычислить расстояние между новым объектом
и каждым объектом обучающей выборки. Расстояние может быть
измерено различными метриками, такими как евклидово расстояние, манхэттенское расстояние и другие.
• Определение k-ближайших соседей: выбираются k объектов
из обучающей выборки, наиболее близких к новому объекту на основе вычисленных расстояний.
• Прогнозирование класса: определяется класс, который является наиболее распространенным среди k-ближайших соседей.
Этот класс становится предсказанным классом для нового объекта.
293
• Оценка точности: сравнивается предсказанный класс с фактическим классом из тестовой выборки для оценки точности
модели. Это может быть выполнено с помощью различных метрик,
таких как точность (accuracy), матрица ошибок (confusion matrix)
выполнено с помощью различных метрик, таких как точность (accuracy),
и другие.
матрица
ошибок
(confusion matrix)пример
и другие. кода на Python, демонстрируНа рис.
140 представлен
На рис. 140 представлен
пример кода на алгоритма
Python, демонстрирующий
ющий классификацию
с использованием
k-ближайших
классификацию
с
использованием
алгоритма
k-ближайших
соседей.
соседей.
Рис. 140. Классификация с использованием алгоритма
Рис. 140. Классификация k-ближайших
с использованием
алгоритма k-ближайших соседей
соседей
В этом примере нами используется набор данных Iris из библиотеки scikit-
В этом примере нами используется набор данных Iris из библиlearn. Сначала загружаем данные и разделяем их на обучающую и тестовую
отеки scikit-learn. Сначала загружаем данные и разделяем их на обувыборки с помощью функции train_test_split(). Затем создаем модель
чающую и тестовую выборки с помощью функции train_test_split().
KNeighborsClassifier с числом соседей k = 3. Далее обучаем модель на
Затем создаем модель KNeighborsClassifier с числом соседей k = 3.
обучающей выборке с помощью метода fit(), а затем классифицируем тестовые
Далее обучаем модель на обучающей выборке с помощью метода
fit(), а затем классифицируем тестовые данные с помощью метода
predict(). Наконец, оцениваем точность модели с помощью функ 294
ции accuracy_score(), сравнивая предсказанные классы y_pred
с фактическими классами y_test.
Рассмотрим основные метрики оценки классификации.
Точность (Precision): отношение числа верно классифицированных положительных примеров к общему числу примеров, которые были предсказаны как положительные.
Полнота (Recall): отношение числа верно классифицированных положительных примеров к общему числу истинно положительных примеров.
F1-мера (F1-score): сбалансированная метрика, которая
объединяет точность и полноту. F1-мера является гармоническим
средним между точностью и полнотой.
ROC-кривая (Receiver Operating Characteristic curve): график,
который отображает зависимость между частотой истинных положительных классификаций и частотой ложных положительных
классификаций при изменении порога классификации.
AUC-ROC (Area Under the ROC Curve): метрика, которая вычисляет площадь под ROC-кривой и представляет собой меру качества классификатора. Значение AUC-ROC находится в диапазоне
от 0 до 1, где 1 означает идеальный классификатор.
Для осуществления классификации применяются валидационная и тестовая выборки:
– валидационная выборка используется для настройки параметров модели и выбора наилучших моделей. Она отделяется
от обучающей выборки и используется для оценки производительности модели на разных комбинациях параметров;
– тестовая выборка используется для финальной оценки производительности модели после того, как параметры были настроены с использованием валидационной выборки. Тестовая выборка
должна быть независимой от обучающей и валидационной выборок и представлять реальные данные, на которых модель будет использоваться.
Для оценки производительности модели применяется кроссвалидация, которая позволяет использовать все доступные данные
для обучения и оценки модели. В процессе кросс-валидации данные разбиваются на несколько фолдов (подвыборок). Затем модель
295
обучается и оценивается несколько раз, каждый раз используя разные комбинации фолдов для обучения и оценки.
Кросс-валидация позволяет получить более надежные оценки
производительности модели и снизить возможность переобучения.
Кластеризация. Метрики оценки кластеризации
Кластеризация – задача машинного обучения, которая относит
объекты к группам (кластерам) на основе их сходства или близости
друг к другу.
Рассмотрим некоторые популярные алгоритмы кластеризации
и метрики оценки качества кластеризации.
K-средних (k-means) – один из наиболее распространенных
алгоритмов кластеризации. Он разбивает набор данных на заранее
заданное количество кластеров (k). Алгоритм начинается с инициализации случайных центров кластеров, а затем выполняет итеративные шаги перераспределения объектов между кластерами и обновления центров кластеров до сходимости.
На рис. 141 приведен пример использования алгоритма K-средних (k-means) с помощью библиотеки scikit-learn.
Рис.
141.
Примериспользования
использования алгоритма
K-средних
Рис.
141.
Пример
алгоритма
K-средних
K-средних++ (k-means++) является улучшенной версией алгоритма K-
296
инициализации начальных центров
средних. Он предлагает улучшенный
метод
кластеров, что помогает избежать проблемы попадания в локальные оптимумы.
K-средних++ (k-means++) является улучшенной версией алгоритма K-средних. Он предлагает улучшенный метод инициализации начальных центров кластеров, что помогает избежать проблемы попадания в локальные оптимумы.
DBSCAN (Density-Based Spatial Clustering of Applications with
Noise) – это алгоритм, который основывается на плотности объектов в пространстве. Он определяет кластеры как плотные регионы
в пространстве объектов, разделенные областями более низкой
плотности. DBSCAN способен обнаруживать кластеры произвольной формы и обрабатывать выбросы (шум) в данных.
На рис. 142 приведен пример использования алгоритма
DBSCAN с помощью библиотеки scikit-learn.
Рис.
142.
Примериспользования
использования алгоритма
DBSCAN
Рис.
142.
Пример
алгоритма
DBSCAN
После проведения кластеризации важно оценить качество полученных
После проведения кластеризации важно оценить качество покластеров. К наиболее распространенным метрикам оценки кластеризации
лученных кластеров. К наиболее распространенным метрикам
относятся:
оценки кластеризации относятся:
– Adjusted Rand Index (ARI): измеряет сходство между фактическими
– Adjusted Rand Index (ARI): измеряет сходство между фактичеметками и метками, присвоенными алгоритмом кластеризации. Значение ARI
скими метками и метками, присвоенными алгоритмом кластеризаможет находиться в диапазоне от -1 до 1, где 1 указывает на идеальное
ции. Значение ARI может находиться в диапазоне от -1 до 1, где 1
совпадение меток, а отрицательное значение указывает на случайное
указывает на идеальное совпадение меток, а отрицательное значесовпадение;
ние
указывает на случайное совпадение;
– Silhouette Coefficient: рассчитывает качество кластеризации, учитывая
внутрикластерное сходство и разделение между кластерами. Значение Silhouette
Coefficient находится в диапазоне от -1 до 1, где значения ближе к 1 указывают
297
на хорошую кластеризацию, а значения ближе к -1 указывают на неправильную
классификацию;
– Silhouette Coefficient: рассчитывает качество кластеризации,
учитывая внутрикластерное сходство и разделение между кластерами. Значение Silhouette Coefficient находится в диапазоне от -1
до 1, где значения ближе к 1 указывают на хорошую кластеризацию, а значения ближе к -1 указывают на неправильную классификацию;
– Calinski-Harabasz Index: использует межкластерное разделение и внутрикластерную дисперсию для оценки качества кластеризации. Высокое значение индекса Calinski-Harabasz указывает
на хорошую кластеризацию;
– Dunn Index: измеряет отношение межкластерного разделения
к внутрикластерной дисперсии. Чем выше значение индекса Dunn,
тем лучше кластеризация.
Тема 9. Системы глубокого обучения
Нейронные сети
Нейронные сети являются мощным инструментом машинного
обучения, вдохновленным работой нейронов в человеческом мозге. Они состоят из искусственных нейронов, которые объединены
в слои и позволяют моделировать сложные функции.
Определение функции ошибки (или функции потерь) является
важной частью обучения нейронных сетей. Функция ошибки измеряет расхождение между предсказанными значениями модели
и фактическими значениями (целевыми метками) и используется
для настройки параметров модели в процессе обучения.
Рассмотрим наиболее распространенные функции ошибки,
которые часто используются при обучении нейронных сетей.
Среднеквадратичная ошибка (Mean Squared Error, MSE):
данная функция ошибки вычисляет среднеквадратичную разницу между предсказанными значениями и целевыми метками. Она
часто используется в задачах регрессии.
Перекрестная энтропия (Cross-Entropy): эта функция ошибки широко применяется в задачах классификации. Она вычисляет
сумму логарифмических разниц между предсказанными вероятностями и целевыми метками.
298
Категориальная перекрестная энтропия (Categorical CrossEntropy): эта функция ошибки также используется в задачах классификации, когда у нас есть несколько классов. Она обобщает перекрестную энтропию на случай многоклассовой классификации.
Логистическая потеря (Log Loss): эта функция ошибки вычисляет сумму логарифмических разниц между предсказанными
вероятностями и целевыми метками. Она также используется в задачах бинарной классификации.
Конкретный выбор функции ошибки зависит от типа задачи
и особенностей данных. Важно выбрать подходящую функцию
ошибки, которая будет подходить для конкретной задачи и поможет модели достичь желаемых результатов при обучении.
Одним из ключевых аспектов нейронных сетей является их способность к обучению на основе данных. Обучение нейронной сети
заключается в настройке весов и смещений нейронов, чтобы минимизировать ошибку между прогнозируемыми значениями модели
и фактическими значениями целевой переменной.
Для оптимизации весов нейронов используется метод обратного распространения градиента. Этот метод основан на градиентном спуске, который позволяет найти локальный минимум функции ошибки. Обратное распространение градиента работает путем
вычисления градиента функции ошибки по каждому весу в сети
и последующего обновления весов в направлении, противоположном градиенту.
Процесс обучения нейронной сети обычно выполняется на основе батчей и эпох.
Батч – подмножество обучающих примеров, которое используется для вычисления градиента и обновления весов. Выбор размера
батча зависит от доступных ресурсов и размера обучающего набора
данных.
Эпоха – один проход по всем обучающим примерам в обучающем наборе. В процессе обучения нейронной сети обычно выполняется несколько эпох, чтобы модель могла улучшить свои прогнозы и снизить ошибку.
299
Процесс обучения нейронной сети с использованием обратного распространения градиента идет через следующие шаги.
1. Инициализация весов и смещений: веса и смещения нейронов инициализируются случайными значениями или другими методами инициализации.
2. Прямое распространение (forward propagation): входные данные передаются через сеть, и каждый нейрон вычисляет свой выход
на основе взвешенной суммы входов и активационной функции.
3. Вычисление функции ошибки: сравниваются прогнозируемые значения сети с фактическими значениями целевой переменной и вычисляется функция ошибки.
4. Обратное распространение (backward propagation): градиент
функции ошибки вычисляется по каждому весу в сети путем применения правила цепочки. Градиент показывает, как изменение
веса влияет на ошибку.
5. Обновление весов: веса нейронов обновляются в направлении, противоположном градиенту функции ошибки, с использованием градиентного спуска или других оптимизационных алгоритмов.
6. Повторение шагов 2–5 на каждом батче: процесс прямого
и обратного распространения выполняется несколько раз на каждом батче данных из обучающего набора.
7. Повторение шагов 2–6 на нескольких эпохах: процесс обучения повторяется на нескольких эпохах, чтобы модель могла улучшить свои прогнозы и снизить ошибку.
8. Оценка модели: после завершения обучения модель оценивается на отложенном тестовом наборе данных, чтобы оценить
ее производительность.
Процесс обучения нейронной сети с помощью обратного распространения градиента может быть дополнен различными методами оптимизации, регуляризацией, выбором активационных
функций и другими техниками, чтобы улучшить производительность модели и предотвратить переобучение.
Ниже представлен программный код примера определения
нейронной сети с одним скрытым слоем.
300
import numpy as np
# Инициализация весов
def initialize_parameters(input_size, hidden_size, output_size):
np.random.seed(0)
W1 = np.random.randn(hidden_size, input_size) * 0.01
b1 = np.zeros((hidden_size, 1))
W2 = np.random.randn(output_size, hidden_size) * 0.01
b2 = np.zeros((output_size, 1))
parameters = {“W1”: W1, “b1”: b1, “W2”: W2, “b2”: b2}
return parameters
# Прямое распространение
def forward_propagation(X, parameters):
W1 = parameters[“W1”]
b1 = parameters[“b1”]
W2 = parameters[“W2”]
b2 = parameters[“b2”]
Z1 = np.dot(W1, X) + b1
A1 = np.tanh(Z1)
Z2 = np.dot(W2, A1) + b2
A2 = sigmoid(Z2)
cache = {“Z1”: Z1, “A1”: A1, “Z2”: Z2, “A2”: A2}
return A2, cache
# Обратное распространение
def backward_propagation(X, Y, cache, parameters):
m = X.shape[1]
A1 = cache[“A1”]
A2 = cache[“A2”]
W2 = parameters[“W2”]
dZ2 = A2 – Y
dW2 = np.dot(dZ2, A1.T) / m
db2 = np.sum(dZ2, axis=1, keepdims=True) / m
dZ1 = np.dot(W2.T, dZ2) * (1 – np.power(A1, 2))
dW1 = np.dot(dZ1, X.T) / m
db1 = np.sum(dZ1, axis=1, keepdims=True) / m
grads = {“dW1”: dW1, “db1”: db1, “dW2”: dW2, “db2”: db2}
return grads
301
# Обновление весов
def update_parameters(parameters, grads, learning_rate):
W1 = parameters[“W1”]
b1 = parameters[“b1”]
W2 = parameters[“W2”]
b2 = parameters[“b2”]
dW1 = grads[“dW1”]
db1 = grads[“db1”]
dW2 = grads[“dW2”]
db2 = grads[“db2”]
W1 -= learning_rate * dW1
b1 -= learning_rate * db1
W2 -= learning_rate * dW2
b2 -= learning_rate * db2
parameters = {“W1”: W1, “b1”: b1, “W2”: W2, “b2”: b2}
return parameters
# Обучение модели
def train_model(X, Y, hidden_size, num_iterations, learning_rate):
input_size = X.shape[0]
output_size = Y.shape[0]
parameters = initialize_parameters(input_size, hidden_size,
output_size)
for i in range(num_iterations):
A2, cache = forward_propagation(X, parameters)
grads = backward_propagation(X, Y, cache, parameters)
parameters = update_parameters(parameters, grads, learning_
rate)
if i % 100 == 0:
cost = compute_cost(A2, Y)
print(f”Iteration {i}: Cost = {cost}”)
return parameters
302
# Пример использования
X = np.array([[0, 0, 1, 1], [0, 1, 0, 1]])
Y = np.array([[0, 1, 1, 0]])
hidden_size = 4
num_iterations = 1000
learning_rate = 0.1
parameters = train_model(X, Y, hidden_size, num_iterations,
learning_rate)
parameters = train_model(X, Y, hidden_size, num_iterations, learning_rate)
рис.143
143показан
показан пример
пример использования
библиотеки
Keras Keras
для
НаНарис.
использования
библиотеки
обучения
нейронной
сети.
для
обучения
нейронной
сети.
Рис. 143. Пример
определения
нейронной сети
с одним скрытым
Рис. 143.
Пример определения
нейронной
сети слоем
с одним
слоем
Эти примеры на языке
Pythonскрытым
показывают
обучение нейронной сети с
помощью
обратного на
распространения
градиента.
Эти примеры
языке Python
показывают обучение нейронной
сети с помощью обратного распространения градиента.
Работа с изображениями с помощью нейронных сетей
Это одна из важных областей глубокого обучения. Для работы с
303
изображениями часто используются сверточные нейронные сети
(Convolutional Neural Networks, CNN), которые специально разработаны для
Работа с изображениями с помощью нейронных сетей
Это одна из важных областей глубокого обучения. Для работы
с изображениями часто используются сверточные нейронные сети
(Convolutional Neural Networks, CNN), которые специально разработаны для анализа и обработки двумерных данных, таких как изображения. Сверточные нейронные сети состоят из нескольких слоанализа и обработки двумерных данных, таких как изображения. Сверточные
ев, включая сверточные слои, слои пулинга и полносвязные слои.
нейронные сети состоят из нескольких слоев, включая сверточные слои, слои
Сверточные нейронные сети (CNN) используют операции свертпулинга и полносвязные слои.
ки и пулинга для изучения иерархических признаков изображений.
Сверточные нейронные сети (CNN) используют операции свертки и
Операция свертки является одной из ключевых операций в сверпулинга для изучения иерархических признаков изображений.
точных нейронных
сетях. Она применяет фильтры (ядра свертки)
Операция свертки является одной из ключевых операций в сверточных
к входным
данным
и
вычисляет
свертку
и соответнейронных сетях. Она применяет
фильтры
(ядра между
свертки) фильтром
к входным данным
и
ствующей
областью
изображения.
Это позволяет
нейронной
сети вывычисляет
свертку между
фильтром и соответствующей
областью
изображения.
делять
признаки,
такие
как границы,
текстурытакие
и формы.
Эторазличные
позволяет нейронной
сети
выделять
различные признаки,
как
На
рис.текстуры
144 представлен
пример кода на Python, который деграницы,
и формы.
монстрирует
свертки
с на
использованием
библиотеки
На рис. операцию
144 представлен
пример кода
Python, который демонстрирует
операцию свертки с использованием библиотеки TensorFlow.
TensorFlow.
Рис. 144. Применение свертки к входному изображению
Рис. 144. Применение свертки к входному изображению
Операция
пулинга
(например,
max-pooling)
Операция
пулинга (например,
max-pooling)
используетсяиспользуется
для уменьшения для
уменьшения
и сокращения
параметров
размерности размерности
и сокращения количества
параметров количества
в сверточных нейронных
сетях. Она выбирает
максимальное
значение
в заданной
области и создает
в сверточных
нейронных
сетях. Она
выбирает
максимальное
значение в заданной области и создает уменьшенное представление признаков. На рис. 145 представлен пример кода на Python.
304
уменьшенное представление признаков. На рис. 145 представлен пример кода
на Python.
Р
Применениеmax-pooling
max-pooling кк входному
Рис. ис.
145.145.
Применение
входномуизображению
изображению
Рассмотрим наиболее популярные архитектуры сверточных нейронных
Рассмотрим наиболее популярные архитектуры сверточных
нейронных сетей, которые демонстрируют высокую производиобработки изображений.
тельность
на задачах обработки изображений.
AlexNet:
это одна
первыхглубоких
глубоких сверточных
нейронных
сетей,
AlexNet:
это одна
из из
первых
сверточных
нейронных
которая
привлекла
широкое
внимание
в
сообществе
машинного
обучения.
сетей, которая привлекла широкое внимание в сообществе машинАрхитектура
AlexNet
состоит из пяти
сверточных
слоев,из
которые
со
ного
обучения.
Архитектура
AlexNet
состоит
пяти чередуются
сверточных
слоями
пулинга, ачередуются
также нескольких
полносвязных
слоев.а также нескольких
слоев,
которые
со слоями
пулинга,
VGG:
архитектура
VGG
(Visual
Geometry
Group) также имеет
полносвязных слоев.
выдающуюся
производительность
в задачахGeometry
классификации
изображений.
Она
VGG: архитектура
VGG (Visual
Group)
также имеет
выдающуюся
производительность
в задачах
классификации
изосостоит из множества
сверточных слоев,
включая
несколько блоков
с
бражений.
Она
состоит из
множества
сверточных
слоев, включая
несколькими
сверточными
слоями
и слоями
пулинга. Архитектура
VGG
несколько
блоков
несколькими
сверточными
слоями
и слоями
отличается от
других смоделей
своей глубиной,
что позволяет
ей извлекать
более
пулинга.
Архитектура
VGG
отличается
от
других
моделей
своей
глусложные признаки.
биной,что позволяет
ей извлекать
более сложные
признаки.
Inception (GoogLeNet):
архитектура
Inception, также
известная как
Inception
(GoogLeNet):
архитектура
Inception,
также
GoogLeNet, разработана Google. Она использует модули Inception, известкоторые
ная как GoogLeNet, разработана Google. Она использует модули
Inception, которые объединяют свертку разных размеров и слои пулинга для извлечения признаков на разных уровнях детализации.
Архитектура Inception является эффективной и успешно использует вычислительные ресурсы.
ResNet: архитектура ResNet (Residual Network) предложила
новый подход к глубоким сверточным нейронным сетям с использованием блоков соединения с остаточными связями. Это позвосетей, которые демонстрируют высокую производительность на задачах
305
ляет обучать глубокие модели без проблемы затухания градиентов
и позволяет добавлять больше слоев, улучшая производительность.
В контексте сверточных нейронных сетей предобученные модели, которые были обучены на больших наборах данных, могут
быть использованы как источник знаний для новых задач. Путем
удаления последних слоев и замены их новыми слоями, специфичными для конкретной задачи, можно достичь хорошей производительности с меньшими вычислительными затратами.
Трансферное обучение (Transfer Learning) – методика, которая
позволяет использовать предварительно обученные модели на одной задаче для решения другой задачи. Вместо обучения модели
с нуля можно использовать предварительно обученные веса нейронной сети на большом наборе данных и дообучить модель
на относительно небольшом наборе данных для новой задачи.
Трансферное обучение позволяет извлечь высокоуровневые признаки из предварительно обученной модели, которые могут быть
полезны для новой задачи. Это особенно полезно, когда у вас есть
ограниченное количество данных для обучения новой модели.
В трансферном обучении используются два подхода:
– Fine-tuning (тонкая настройка): в этом подходе предварительно обученная модель размораживается, и последние слои (или несколько последних слоев) модели переобучаются на новом наборе
данных. Это позволяет модели адаптироваться к новым признакам
и классам, учитывая уже изученные низкоуровневые признаки;
– Feature Extraction (извлечение признаков): в этом подходе предварительно обученная модель используется как фиксированный «экстрактор признаков». Веса модели замораживаются,
и входные данные проходят через модель для извлечения признаков. Затем эти признаки могут быть переданы в новую модель
(обычно полносвязные слои) для решения новой задачи.
Трансферное обучение позволяет сократить время обучения,
улучшить обобщающую способность модели и достичь лучших результатов на новом наборе данных, особенно когда у вас ограниченное количество данных для обучения.
306
Обработка текстов
Обработка текстов с использованием нейронных сетей является
важной областью обработки естественного языка (Natural Language
Processing, NLP). Нейронные сети позволяют моделировать сложные зависимости и структуры в текстовых данных, что делает
их мощным инструментом для обработки и анализа текста.
Нейронные сети широко применяются во многих задачах обработки текстов, включая следующие:
– классификация текста: нейронные сети могут использоваться
для классификации текстовых документов на разные категории или
метки. Например, задача определения тональности текста (положительная, отрицательная, нейтральная) или классификация спама;
– извлечение информации: нейронные сети могут быть применены для извлечения структурированной информации из текстовых
данных. Например, извлечение именованных сущностей (имен людей, мест, организаций) или извлечение ключевых фраз из текста;
– машинный перевод: нейронные сети, особенно модели
на основе трансформера, показывают отличные результаты в задачах машинного перевода, позволяя переводить текст между различными языками;
– генерация текста: нейронные сети могут быть использованы
для генерации текста на основе заданного контекста. Например,
генерация описаний изображений или автоматическое создание
текстовых статей;
– вопросно-ответные системы: нейронные сети могут быть применены для создания систем вопросно-ответных пар, позволяя отвечать на вопросы пользователей на основе доступной информации;
– сентимент-анализ: нейронные сети могут использоваться для
анализа эмоциональной окраски текста и определения тональности выражений (позитивная, негативная, нейтральная).
Нейронные сети широко применяются во многих задачах обработки текстов. Векторные представления для текста играют значительную роль в этих задачах, поскольку позволяют представить
слова или фразы в виде числовых векторов. Это упрощает обработку текста нейронными сетями, поскольку они могут работать
с числовыми данными и использовать их для обучения моделей
307
и принятия решений. Векторные представления помогают сетям улавливать семантические и синтаксические свойства текста,
а также выявлять сходства и различия между словами и фразами,
что способствует более точным и эффективным результатам в задачах обработки естественного языка.
Векторные представления для текста позволяют представить
слова или фразы в виде числовых векторов, что упрощает их обработку нейронными сетями. Наиболее популярными методами векторизации текста являются:
– Word2Vec: метод, который позволяет преобразовать слова в плотные векторы фиксированной размерности. Он основан
на идее, что слова, используемые в схожих контекстах, имеют похожие значения. Word2Vec включает две основные модели: Skipgram и Continuous Bag-of-Words (CBOW). Skip-gram предсказывает
соседние слова на основе текущего слова, а CBOW предсказывает
текущее слово на основе его соседей;
– FastText: метод, разработанный Facebook Research, который
расширяет идеи Word2Vec, учитывая также подсловные (subword)
информации. Он строит векторное представление для каждого слова путем усреднения векторов его подслов. Это позволяет справляться с неизвестными словами и редкими словами лучше, чем методы, основанные только на словах.
Векторные представления для текста позволяют представить
слова или фразы в виде числовых векторов, что упрощает их обработку нейронными сетями. Это особенно полезно при работе
с последовательными данными, такими как текст. В этом контексте для обработки текста можно использовать рекуррентные нейронные сети (RNN). RNN представляют собой класс нейронных
сетей, специально созданных для работы с последовательными
данными, включая текст. Они имеют внутреннюю память, которая позволяет учитывать контекст и зависимости между элементами последовательности. Это делает RNN мощным инструментом
для анализа и обработки текста, например, в задачах машинного
перевода, генерации текста, распознавания речи и других приложениях обработки естественного языка, где важен контекст.
308
Рекуррентные нейронные сети (RNN) представляют собой класс
нейронных сетей, специально созданных для работы с последовательными данными, такими как текст. RNN имеют внутреннюю
память, которая позволяет им учитывать контекст и последовательность входных данных.
LSTM (Long Short-Term Memory) и GRU (Gated Recurrent Unit)
являются двумя расширениями RNN, которые были разработаны
для преодоления проблемы затухания и взрыва градиентов. Они
добавляют дополнительные механизмы, которые помогают сети
сохранять и забывать информацию внутри себя, что позволяет
им лучше улавливать долгосрочные зависимости в тексте.
На рис. 146 показан пример, демонстрирующий базовую обработку текста с использованием библиотеки NLTK (Natural Language
Toolkit).
Рис.146.
146.Базовая
Базовая обработка
Рис.
обработкатекста
текста
В примере мы использовали nltk.tokenize.word_tokenize для разделения
309
привели все слова к нижнему
текста на отдельные слова (токены).
Затем
регистру
с
помощью
генератора
списка.
Далее
использовали
В примере мы использовали nltk.tokenize.word_tokenize для
разделения текста на отдельные слова (токены). Затем привели все
слова к нижнему регистру с помощью генератора списка. Далее использовали nltk.corpus.stopwords для загрузки стоп-слов на русском
языке и удалили их из списка токенов. Наконец, применили лемматизацию с помощью nltk.stem.WordNetLemmatizer для приведения слов к их базовой форме.
Обработанные токены были сохранены в переменной tokens
и выведены на экран. В результате был получен список токенов,
прошедших обработку, который может быть использован для дальнейшего анализа или обработки текста.
Контрольные вопросы
1. Что такое искусственный интеллект (ИИ) и какие задачи он решает?
2. Какие основные методы машинного обучения используются
в системах искусственного интеллекта?
3. Что такое экспертные системы и как они используются в ИИ?
4. Какие задачи решает система обработки естественного языка
(NLP)?
5. Что такое системы компьютерного зрения и какие задачи они
могут выполнять?
6. Каково сочетание искусственного интеллекта и робототехники?
7. Какие задачи решает система автоматического планирования
и принятия решений?
8. Какие преимущества предоставляют системы искусственного
интеллекта?
9. Каковы основные задачи классификации, кластеризации и регрессии в ИИ?
10. Какие библиотеки машинного обучения широко используются
для классификации в Python?
11. Что такое задача кластеризации и какие библиотеки могут
использоваться для ее выполнения?
12. Какую информацию можно получить из задачи кластеризации
данных о покупках в интернет-магазине?
310
13. Что такое задача регрессии в ИИ и какие данные она предсказывает?
14. Какие характеристики домов могут быть использованы для
задачи регрессии в предсказании их цен?
15. Как машинное обучение отличается от искусственного интеллекта?
16. Что такое обучение с учителем в машинном обучении и какие
примеры задач относятся к этому типу?
17. Что такое обучение без учителя в машинном обучении и какие
примеры задач относятся к этому типу?
18. Что такое обучение с подкреплением в машинном обучении
и какие примеры задач относятся к этому типу?
19. Какие преимущества предоставляет машинное обучение?
20. Какие типы данных могут быть обработаны с помощью методов
машинного обучения?
Тесты для самоконтроля
(ответы см. в приложении)
1. Что такое искусственный интеллект? (один вариант ответа)
а) область компьютерных наук, занимающаяся созданием систем,
способных имитировать интеллектуальное поведение человека
б) методика программирования компьютеров
в) система искусственного производства
г) технология создания физических роботов
2. Какие задачи могут решать системы искусственного интеллекта? (один вариант ответа)
а) анализ данных, обучение, принятие решений
б) печать документов, сканирование изображений
в) обработка платежей, управление складом
г) чтение электронных писем, отправка сообщений
3. Что представляют собой системы обработки естественного
языка (NLP)? (один вариант ответа)
а) системы, позволяющие компьютерам взаимодействовать с людьми на естественном языке
б) системы для распознавания образов и классификации объектов
311
в) системы для решения оптимизационных задач
г) системы для управления автономными транспортными средствами
4. Что такое системы машинного обучения? (один вариант ответа)
а) системы, использующие алгоритмы и статистические модели для
обучения на основе данных и принятия решений без явного программирования
б) системы для автоматического планирования и принятия решений
в) системы для обработки и анализа больших объемов данных
г) системы для распознавания речи и выполнения задач, связанных
с языком
5. Что делают системы компьютерного зрения? (один вариант
ответа)
а) позволяют компьютерам «видеть» и анализировать изображения
и видео
б) позволяют компьютерам обрабатывать и анализировать большие
объемы данных
в) позволяют компьютерам взаимодействовать с людьми на естественном языке
г) позволяют компьютерам автоматически принимать оптимальные решения
6. В каких областях могут использоваться системы искусственного интеллекта? (несколько вариантов ответа)
а) логистика, автономные транспортные средства, управление ресурсами
б) печать документов, сканирование изображений
в) чтение электронных писем, отправка сообщений
г) обработка платежей, управление складом
7. Что позволяют системы искусственного интеллекта делать
с данными? (несколько вариантов ответа)
а) обрабатывать и анализировать большие объемы данных
б) распознавать образы и классифицировать объекты
312
в) принимать решения на основе логики и опыта
г) взаимодействовать с людьми на естественном языке
8. Что такое нейронные сети? (один вариант ответа)
а) методы кластеризации данных
б) алгоритмы для распознавания образов и классификации объектов
в) алгоритмы и статистические модели для обучения на основе
данных
г) методы работы с текстовыми данными
9. Что такое глубокое обучение? (несколько вариантов ответа)
а) подход к машинному обучению, основанный на нейронных
сетях с большим количеством слоев
б) методика программирования компьютеров
в) технология создания физических роботов
г) системы для обработки и анализа больших объемов данных
10. Что такое алгоритмы кластеризации? (один вариант ответа)
а) алгоритмы, используемые для распознавания образов и классификации объектов
б) алгоритмы и статистические модели для обучения на основе
данных
в) алгоритмы, используемые для группировки данных на основе
их сходства
г) алгоритмы для распознавания речи и выполнения задач, связанных с языком
11. Что такое обучение с подкреплением? (один вариант ответа)
а) подход к машинному обучению, в котором агент осуществляет
действия в среде и получает награду или штраф в зависимости
от результатов
б) методика программирования компьютеров
в) системы для обработки и анализа больших объемов данных
г) системы, использующие базы знаний для принятия решений
в определенной области
12. Что представляют собой методы обработки естественного
языка (Natural Language Processing)? (один вариант ответа)
а) методы для распознавания образов и классификации объектов
б) методы для обработки и анализа больших объемов данных
313
в) методы для обработки и анализа текстов на естественных языках
г) методы для управления автономными транспортными средствами
13. Что такое обучение с учителем? (один вариант ответа)
а) подход к машинному обучению, в котором модель обучается
на основе предоставленных ей примеров входных данных и соответствующих им выходных меток
б) методика программирования компьютеров
в) системы для обработки и анализа текстов на естественных языках
г) системы, использующие базы знаний для принятия решений
в определенной области
14. Что такое обучение без учителя? (один вариант ответа)
а) подход к машинному обучению, в котором модель самостоятельно находит закономерности и структуру в данных без предоставления выходных меток
б) алгоритмы для распознавания образов и классификации объектов
в) методы для обработки и анализа больших объемов данных
г) системы для обработки языка
15. Что такое переобучение (overfitting) в контексте машинного
обучения? (один вариант ответа)
а) ситуация, когда модель слишком хорошо запоминает обучающие
данные и плохо обобщает новые данные
б) ситуация, когда модель не может достичь высокой точности
на обучающих данных
в) ситуация, когда модель не может адекватно анализировать большие объемы данных
г) ситуация, когда модель не может принимать решения на основе
логики и опыта
16. Какие методы машинного обучения используются для задач
классификации? (один вариант ответа)
а) логистическая регрессия, метод опорных векторов (SVM), случайный
б) методы для обработки и анализа текстов на естественных языках
в) методы для распознавания образов и классификации объектов
г) методы для управления автономными транспортными средствами
314
17. Что такое регрессия в контексте машинного обучения? (один
вариант ответа)
а) метод для классификации объектов на основе их признаков и выделения классов
б) метод для определения оптимальной стратегии принятия решений в условиях неопределенности
в) метод для предсказания числовых значений на основе зависимостей между переменными
г) метод для обработки и анализа текстов на естественных языках
18. Какие методы машинного обучения используются для задач
кластеризации? (один вариант ответа)
а) k-средних, иерархическая кластеризация, DBSCAN
б) методы для распознавания образов и классификации объектов
в) методы для обработки и анализа текстов на естественных языках
г) методы для управления автономными транспортными средствами
19. Что такое сверточные нейронные сети (Convolutional Neural
Networks)? (один вариант ответа)
а) методы для распознавания речи и выполнения задач, связанных
с языком
б) методы для обработки и анализа текстов на естественных языках
в) методы для обработки и анализа изображений, использующие
сверточные слои для извлечения признаков
г) методы для управления автономными транспортными средствами
20. Какие методы машинного обучения используются для
обработки и анализа текстов на естественных языках? (один вариант ответа)
а) методы глубокого обучения, рекуррентные нейронные сети,
методы обработки последовательностей
б) методы для распознавания образов и классификации объектов
в) методы для определения оптимальной стратегии принятия решений в условиях неопределенности
г) методы для управления автономными транспортными средствами
315
21. Какие методы машинного обучения используются для обработки речи и выполнения задач, связанных с языком? (один вариант ответа)
а) рекуррентные нейронные сети (RNN), сверточные нейронные
сети (CNN), трансформеры
б) методы для обработки и анализа текстов на естественных языках
в) методы для распознавания образов и классификации объектов
г) методы для управления автономными транспортными средствами
22. Что такое глубокое обучение (deep learning)? (один вариант
ответа)
а) подход к машинному обучению, использующий глубокие нейронные сети с большим количеством слоев для извлечения
и представления сложных зависимостей в данных
б) методы для обработки и анализа текстов на естественных языках
в) методы для распознавания образов и классификации объектов
г) методы для управления автономными транспортными средствами
23. Что такое алгоритмы кластеризации? (один вариант ответа)
а) методы для распознавания речи и выполнения задач, связанных
с языком
б) методы для обработки и анализа текстов на естественных языках
в) методы для группировки объектов на основе их схожести в некотором пространстве признаков
г) методы для управления автономными транспортными средствами
24. В чем заключается основная задача искусственного интеллекта (ИИ)? (один вариант ответа)
а) производство высококачественных компьютеров
б) имитация интеллектуального поведения человека
в) разработка новых операционных систем
г) создание электронных устройств
25. Какие системы относятся к системам искусственного интеллекта? (один вариант ответа)
а)системы обработки естественного языка
б) системы автоматического планирования и принятия решений
316
в) системы компьютерного зрения
г) все вышеперечисленное
26. Что позволяют делать системы обработки естественного
языка (Natural Language Processing, NLP)? (один вариант ответа)
а) взаимодействовать с компьютерами на естественном языке
б) распознавать образы и классифицировать объекты
в) анализировать и генерировать текст на естественном языке
г) планировать и принимать оптимальные решения
27. Какие методы используются в системах машинного обучения? (один вариант ответа)
а) алгоритмы и статистические модели
б) базы знаний, созданные экспертами
в) алгоритмы для распознавания образов
г) библиотека scikit-learn
28. Что позволяют делать системы компьютерного зрения?
(один вариант ответа)
а) обрабатывать и анализировать большие объемы данных
б) распознавать образы и классифицировать объекты
в) взаимодействовать с компьютерами на естественном языке
г) принимать оптимальные решения и планировать действия
29. Как называются системы, способные воспринимать окружающую среду, принимать решения и взаимодействовать с ней?
(один вариант ответа)
а) системы обработки естественного языка
б) робототехника
в) системы автоматического планирования и принятия решений
г) системы машинного обучения
30. Как называются системы, использующие алгоритмы и модели для принятия оптимальных решений и планирования действий? (один вариант ответа)
а) экспертные системы
б) системы обработки естественного языка
в) системы компьютерного зрения
г) системы автоматического планирования и принятия решений
317
Практические задания по темам модуля 3
Тема «Введение в искусственный интеллект
и основные методы машинного обучения»
Задание
1.
набор
цветах
Задание
1. Создайте
Создайте и
ии проанализируйте
проанализируйте
набор данных
данных
цветах ириса.
ириса.
Задание
1. Создайте
проанализируйте
набороо данных
о цвеИспользуйте библиотеки
библиотеки Pandas
Pandas для
для работы
работы сс данными
данными и
и Matplotlib
Matplotlib для
для
Используйте
Задание 1. Создайтебиблиотеки
и проанализируйте
набор данных
о цветах ириса.
тах ириса. Используйте
Pandas
для работы
с данными
визуализации
результатов
данных.
визуализации
агрегации
данных.
Используйте
библиотекиагрегации
Pandas для
работы с данными и Matplotlib для
и Matplotlib
длярезультатов
визуализации
результатов
агрегации данных.
Ход
работы
визуализации
результатов агрегации данных.
Ход работы
Ход работы
1. Изучите
Изучите
методические рекомендации.
рекомендации.
Ход работы
1.
методические
1. Изучите
методические
рекомендации.
Изучите создайте
методические
2. В
В1.проекте
проекте
создайте
файлрекомендации.
iris.csv со
со следующим
следующим содержимым:
содержимым:
2.
файл
iris.csv
2. В проекте
создайте
файл
iris.csv
со следующим
2. В проекте создайте файл iris.csv
со следующим
содержимым: содержимым:
3. Загрузите данные из CSV-файла в Pandas DataFrame. Это возможно с
3. Загрузите
данные
CSV-файла
в Pandas
DataFrame.
Этосс воз3.
данные из
из
вв Pandas
DataFrame.
Это
3. Загрузите
Загрузите
из CSV-файла
CSV-файла
Pandas
DataFrame.
Это возможно
возможно
помощью
методаданные
pd.read_csv().
можно
с помощью
метода pd.read_csv().
помощью
метода pd.read_csv().
pd.read_csv().
помощью
метода
4. Посмотрите и оцените данные, которые были загружены. Чтобы
взглянуть
на загруженные
данные, выведите первые
5 строк.
4.
оцените
которые
были
Чтобы
Посмотрите
данные,
которые
были загружены.
4. Посмотрите
Посмотритеии
и оцените
оцените данные,
данные,
которые
были загружены.
загружены.
Чтобы
4.
взглянуть
на
данные,
первые
55 строк.
Чтобы
взглянуть
на загруженные
данные,
первые 5 строк.
взглянуть
на загруженные
загруженные
данные, выведите
выведите
первыевыведите
строк.
В результате вывода получится, что есть 4 числовых столбца
с признаками iris (длина и ширина лепестков и чашелистиков)
и один столбец class с видом цветка (setosa, versicolor или virginica).
318
В результате вывода получится, что есть 4 числовых столбца с
признаками iris (длина и ширина лепестков и чашелистиков) и один столбец
В результате вывода получится, что есть 4 числовых столбца с
class с видом цветка (setosa, versicolor или virginica).
признаками iris (длина и ширина лепестков и чашелистиков) и один столбец
class с видом цветка (setosa, versicolor или virginica).
На основе получившихся данных постройте график.
5. На 5.основе
получившихся данных постройте график.
основе получившихся данных постройте график.
Для5. На
этого
необходимо задать само построение графика на основе
Для этого
необходимо
задать само построение графика на осноДля этого необходимо задать само построение графика на основе
имеющихся данных.
ве имеющихся
имеющихсяданных.
данных.
Данный
строитстолбчатую
столбчатую диаграмму
диаграмму на
рассчитанных
ранее
Данный
строит
наоснове
основе
рассчитанных
ранее
Данный
кодкодкод
строит
столбчатую
диаграмму
на основе
рассчиагрегированных
данных
о
средней
длине
чашелистика
для
разных
видов
агрегированных
данных
о
средней
длине
чашелистика
для
разных
видов
танных ранее агрегированных данных о средней длине чашелистиирисов.
ирисов.
ка для
разных
видов ирисов.
mean_sepal_length.plot.bar() – строит столбчатую диаграмму из данных в
mean_sepal_length.plot.bar() – строит столбчатую диаграмму из данных в
mean_sepal_length.plot.bar()
– столбец
строит
диаграмму
переменной mean_sepal_length. Каждый
будетстолбчатую
соответствовать одному
переменной mean_sepal_length. Каждый столбец будет соответствовать одному
виду в
iris.
из данных
переменной mean_sepal_length. Каждый столбец будет
виду iris. plt.ylabel('Средняя длина чашелистика') – добавляет подпись к оси Y,
соответствовать
одному виду iris.
plt.ylabel('Средняя
длина
– добавляет подпись к оси Y,
чтобы
было понятно, что
значатчашелистика')
значения по вертикали.
plt.ylabel(‘Средняя
длина
чашелистика’) – добавляет подпись
чтобы было
понятно,
что значат
значения по диаграмму.
вертикали.
plt.show()
– отображает
получившуюся
к оси Y, чтобы было понятно, что значат данные по вертикали.
В результате
итоговыйполучившуюся
код должен выглядеть
следующим образом.
plt.show()
– отображает
диаграмму.
plt.show()
– отображает получившуюся диаграмму.
В результате итоговый код должен выглядеть следующим образом.
В результате итоговый код должен выглядеть следующим
образом.
6. Запустите код с помощью кнопки Run.
319
В результате выполнения данного кода будет получен следующий
6. Запустите
кодкод
с помощью
кнопки
Run.Run.
6. Запустите
с помощью
кнопки
В результатевыполнения
выполненияданного
данного кода
кода будет
В результате
будетполучен
полученследуюследующий
щий график.
график.
На
графике отражена
отражена столбчатая
столбчатая диаграмма,
диаграмма, которая
которая показыпоказывает
На графике
вает соотношение
длины чашелистиков
для разных
соотношение
длины чашелистиков
для разных видов
ирисов.видов ирисов.
Методические
Методическиеуказания
указания
Дляработы
работыс табличными
с табличными
данными
в Python
используется
Для
данными
в Python
используется
библиотека
библиотека
Pandas.
Она
позволяет
загружать
данные
из
разных
Pandas. Она позволяет загружать данные из разных источников,
источников, преобразовывать и анализировать их.
преобразовывать и анализировать их.
Для визуализации данных может использоваться библиотека
Для визуализации данных может использоваться библиотека matplotlib.
matplotlib. Matplotlib – библиотека для визуализации и построения
Matplotlib
– библиотека
для визуализации
и построения
графиков в Python.
графиков
в Python. Основные
возможности
Matplotlib:
Основные
возможности
Matplotlib: типов диаграмм: линейных, столбча– построение
разнообразных
тых,
круговых,разнообразных
точечных, гистограмм
и так далее;
– построение
типов диаграмм:
линейных, столбчатых,
– возможность
круговых,
точечных,настройки
гистограммвнешнего
и так далее;вида графиков: цвета, маркеры,
стиль
линий
и
так
далее;
– возможность настройки внешнего вида графиков: цвета, маркеры, стиль
– отображение графиков в различных форматах: в окне програмлиний и так далее;
мы, в веб-браузере, сохранение в файл;
– отображение графиков в различных форматах: в окне программы, в веб-
браузере, сохранение в файл;
320
– большое количество функций для настройки аннотаций на графике:
– большое количество функций для настройки аннотаций на графике: заголовки, подписи осей, легенда и т. п.;
– возможность
построения
графиков
в 3D;
– возможность
построения графиков
в 3D;
– широкий
набор математических функций для визуализации раз– широкий набор математических функций для визуализации различных
личных зависимостей;
зависимостей;
– интеграция с такими библиотеками как NumPy, Pandas, SciPy
– интеграция с такими библиотеками, как NumPy, Pandas, SciPy и
и другими.
другими.
Основное преимущество Matplotlib в том, что с ее помощью
Основное преимущество Matplotlib в том, что с ее помощью можно
можно быстро визуализировать данные и строить графики
быстро визуализировать данные и строить графики publication quality. Это
publication quality. Это удобный и гибкий инструмент для наглядноудобный и гибкий инструмент для наглядного представления результатов
го представления результатов анализа данных в Python.
анализа данных в Python.
Чтобы работать с данными в Python, нам нужно импортироЧтобы работать с данными
в Python,
нам нужно
импортировать
вать соответствующие
библиотеки.
В данном
случае
нам понасоответствующие
библиотеки.
В
данном
случае
нам
понадобятся
для
добятся Pandas для работы с табличными данными и Pandas
Matplotlib
работы
с
табличными
данными
и
Matplotlib
для
визуализации.
для визуализации.
Процесс суммирования
суммирования и обобщения
данных
с цельюс получения
более
Процесс
и обобщения
данных
целью получекомпактного
и информативного
представления называется
агрегацией называданных
ния
более компактного
и информативного
представления
(data
aggregation).
ется агрегацией данных (data aggregation).
Основные
видыагрегации
агрегации
данных:
Основные виды
данных:
– группировка
(grouping)
строк
в группы
по опреде– группировка
(grouping)–– объединение
объединение строк
в группы
по определенным
ленным(например,
критериям
(например,
по странам или годам);
критериям
по странам
или годам);
– суммирование
(summing)
расчет
суммы
значений
в группе
– суммирование
(summing) – –
расчет
суммы
значений
в группе (например,
(например,
сумма
продаж
по
странам);
сумма продаж по странам);
– усреднение
(averaging)
расчет
среднего
значения
в группе
– усреднение
(averaging) ––расчет
среднего
значения
в группе (например,
(например,
средняя
зарплата
по
отделам);
средняя зарплата по отделам);
– подсчет
значений (counting) – подсчет количества записей
– подсчет значений (counting) – подсчет количества записей в группе;
в группе;
– поиск экстремумов (finding minimums/maximums) – нахождение
– поиск экстремумов (finding minimums/maximums) – нахождение
минимального и максимального значения в группе.
минимального и максимального значения в группе.
321
Агрегация
сжатьбольшие
большие
объемы
данных,
выявить
Агрегация позволяет
позволяет сжать
объемы
данных,
выявить
в них
в тенденции
них тенденции
и закономерности.
этап предварии закономерности.
Это важныйЭто
этапважный
предварительного
анализа
тельного
анализа данных (EDA).
данных (EDA).
Производим группировку
данных
методом
groupbygroupby
по столбцу
'class',
Производим
группировку
данных
методом
по столбвиды
ирисов (setosa,
др.). Внутри
каждой группы
цукоторый
‘class’,содержит
который
содержит
видыversicolor
ирисови (setosa,
versicolor
и др.).
Внутри
группы
по виду –берем
‘sepallength’
– длипо видукаждой
берем столбец
'sepallength'
длина столбец
чашелистика.
Затем вычисляем
насреднее
чашелистика.
Затем
вычисляем
среднее
значение
(mean) длины
значение (mean)
длины
чашелистика
для каждой
группы.
чашелистика
для каждой
группы.
Таким образом,
«сжимаем»
детальные данные по каждому цветку, чтобы
Такимтолько
образом,
«сжимаем»
детальные
данные по
цветполучить
одно число
– среднюю
длину чашелистика
длякаждому
каждого вида.
ку, чтобы получить только одно число – среднюю длину чашелистика для
каждого
вида.и сравните модели классификации для определения
Задание
2. Создайте
состояния здоровья пациентов, используя алгоритмы kNN, деревья решений и
логистическую регрессию. Для этого решите задачу.
Задание 2. Создайте и сравните модели классификации для
Даны данные о пациентах с признаками: возраст, пол, наличие
определения
состояния здоровья пациентов, используя алгоритхронических
заболеваний
(да/нет),
температура. Необходимо
построить
мы
kNN, деревья
решений
и логистическую
регрессию.
Длямодели
этого
для
классификации
состояния
пациента
на
«здоров»
и
«болен»
с
помощью
решите задачу.
алгоритма
kNN,данные
дерева решений
и логистической
регрессии.
Сравнить
точность
Имеются
о пациентах
с признаками:
возраст,
пол,
налиполученных
моделей
на
тестовой
выборке.
Выбрать
наиболее
точную
модель.
чие хронических заболеваний (да/нет), температура. Необходимо
Для модели
решения для
можно
использовать состояния
любые библиотеки
машинного
построить
классификации
пациента
на «здообучения
в Python.
Данная задача
позволитkNN,
сравнить
простоту
построения
ров»
и «болен»
с помощью
алгоритма
дерева
решений
и логистической
регрессии. Сравнить
точность
полученныхалгоритмов
моделей
модели, интерпретируемость
и точность
рассматриваемых
наклассификации
тестовой выборке.
Выбрать
наиболее точную модель.
на практическом
примере.
Для
решения
можно
использовать
любые библиотеки машинХод работы
ного обучения
Python. Данная
задача позволит сравнить простоту
1. Изучите вметодические
рекомендации.
построения
модели,
интерпретируемость
2. Импортируйте необходимые библиотеки. и точность рассматриваемых алгоритмов классификации на практическом примере.
Ход работы
1. Изучите методические рекомендации.
2. Импортируйте необходимые библиотеки.
322
данной работе
работе самостоятельно
создается
выборка
данных, данных,
которая
В Вданной
самостоятельно
создается
выборка
будет проанализирована.
которая
будет проанализирована.
3.3.Создайте
данные
в виде
DataFrame
в сPandas
с 4 столбцами:
Создайте данные
в виде
DataFrame
в Pandas
4 столбцами:
‘age’ –– 'age'
случайные
значения
до65;
65;
– случайные
значенияот
от 18
18 до
‘sex’: 0– 'sex'
– для
женского
пола,
1
–
для
мужского;
– 0 для женского пола, 1 для мужского;
‘chronic’:
0 – если
нетнет
хронических
заболеваний,
1–
если есть;
– 'chronic'
– 0 если
хронических заболеваний,
1 если
есть;
‘temp’– 'temp'
– случайные
значения
с
нормальным
распределением
– случайные значения с нормальным распределением вокруг 36.6
вокруг
36.6
и
стандартным
и стандартным отклонением
0.5. отклонением 0.5.
4.4.Добавьте
столбец
‘condition’:
Добавьте столбец 'condition':
0 – если
пациент здоров;
– 0 если пациент здоров;
1 – если пациент болен.
– 1 если пациент болен.
Значения генерируются случайно.
Значения генерируются случайно.
В итоге будут получены данные со 100 строками и 5 столбцами,
В итоге будут получены данные со 100 строками и 5 столбцами, которые
которые можно использовать для последующего моделирования.
можно использовать для последующего моделирования.
Таким образом была сымитирована выборка данных о пациТаким образом была сымитирована выборка данных о пациентах с
ентах с признаками и классом «здоров/болен». Эти сгенерированпризнаками и классом «здоров/болен». Эти сгенерированные данные будут
ные данные будут использоваться далее для сравнения алгоритмов
использоваться далее для сравнения алгоритмов классификации.
классификации.
5. Разделите данные на обучающую и тестовую выборки.
– data.drop('condition', axis=1)– 323
изначальный
датафрейм data, из которого
нами удален столбец 'condition'. Это будут признаки X для обучения модели;
– data['condition'] – целевой столбец y, который мы предсказываем.
Разделите данные
на на
обучающую
и тестовую
выборки.выборки.
5. 5.
Разделите
данные
обучающую
и тестовую
data.drop('condition', axis=1)
– изначальный
датафреймдатафрейм
data, из которого
– –data.drop(‘condition’,
axis=1)
– изначальный
data,
нами
удален столбец
'condition'.
Это будут
признаки X для
модели;
из
которого
нами удален
столбец
‘condition’.
Этообучения
будут признаки
X
для обучения
модели;
– data['condition']
– целевой столбец y, который мы предсказываем.
– Далее
data[‘condition’]
целевой столбец
y, который
предсказыс помощью –
train_test_split
разделяем
X и y намы
обучающую
и
ваем.
тестовую выборки с соотношением 80 % и 20 % соответственно.
Далее
с помощью train_test_split разделяем X и y на обучающую
Получится:
и тестовую
выборки
соотношением
80 %и итестовой
20 % соответственно.
– X_train,
X_test – с
признаки
для обучающей
выборок;
Получится:
– y_train, y_test – целевые значения для обучающей и тестовой выборок.
– X_train,
X_test
– признаки
обучающей
и тестовой выборок;
То есть
исходный
датасет былдля
разделен
на 4 части:
– y_train,
y_test – целевые значения для обучающей и тестовой
– признаки и цель для обучения;
выборок.
– признаки и цель для тестирования.
То есть исходный датасет был разделен на 4 части:
Это позволяет корректно оценить качество модели по отдельным данным,
– признаки и цель для обучения;
которые не использовались для обучения.
– признаки и цель для тестирования.
6. Обучите модель kNN.
Это позволяет корректно оценить качество модели по отдельным данным, которые не использовались для обучения.
6. Обучите модель kNN.
7. Обучитедерево
дерево решений.
7. 7.
Обучите
решений.
Обучите дерево
решений.
8. Обучите логистическую регрессию.
8. Обучите логистическую регрессию.
324
8. Обучите логистическую регрессию.
8. Обучите логистическую регрессию.
Таким
образомпоследовательно
последовательно обучаются
и тестируются
3 модели
Таким
образом
обучаются
и тестируются
3 моклассификации
на сгенерированных
данных, сравнивается
их сравнивается
точность и
дели
классификации
на сгенерированных
данных,
выбирается и
лучшая.
их точность
выбирается лучшая.
В результате выполнения кода будет получена точность kNN, точность
В результате
выполнения кода будет получена точность kNN,
В результате выполнения кода будет получена точность kNN, точность
дерева решений и точность логической регрессии.
точность
дерева
решений
и точность
логической регрессии.
дерева
решений
и точность логической
регрессии.
Методические указания
Методические указания
Классификация – это задача машинного обучения,
Классификация – это задача машинного обучения,
отнести объект к одному из заранее определенных
отнести объект к одному из заранее определенных
325
в которой
в которой
классов.
классов.
необходимо
необходимо
Алгоритмы
Алгоритмы
Методические указания
Классификация – это задача машинного обучения, в которой
необходимо отнести объект к одному из заранее определенных
классов. Алгоритмы классификации используются в различных
приложениях – распознавании изображений, детектировании
спама, прогнозировании и др. Рассмотрим несколько популярных
алгоритмов классификации и сравним их особенности.
k-ближайших соседей (kNN) – простой метод классификации,
основанный
на сравнении
объекта
с k-ближайшими
сосеклассификации
используются нового
в различных
приложениях
– распознавании
детектировании
прогнозировании
и Преимущества
др. Рассмотрим
дямиизображений,
из обучающей
выборки.спама,
Гиперпараметр
– k.
–
несколько
популярных
алгоритмов классификации
и сравним
их особенности.
простота,
нет
необходимости
в обучении.
Недостатки
– высокая
k-ближайших
соседей на
(kNN)
– простой
метод
классификации,
вычислительная
сложность
больших
наборах
данных.
основанный
на
сравнении
нового
объекта
с
k-ближайшими
соседями из
Деревья решений – метод, использующий иерархическую
обучающей
Гиперпараметр
k. Преимущества
– простота,
нет
структуру
для выборки.
построения
модели– на
основе признаков.
Гиперпанеобходимости в обучении. Недостатки – высокая вычислительная сложность
раметры – глубина дерева, число листьев и др. Плюсы – интерна больших наборах данных.
претируемость,
работа с категориальными признаками. Минусы –
Деревья решений – метод, использующий иерархическую структуру для
склонность к переобучению.
построения модели на основе признаков. Гиперпараметры – глубина дерева,
число листьев и др. Плюсы – интерпретируемость, работа с категориальными
признаками. Минусы – склонность к переобучению.
Задание
3. Используя методы регрессии, проведите оценку
и подбор оптимальных параметров для прогнозирования цен
Задание 3. Используя методы регрессии, проведите оценку и подбор
на недвижимость. Обучите и оцените производительность модеоптимальных параметров для прогнозирования цен на недвижимость. Обучите
лей линейной регрессии, регрессионного дерева и случайного леса
и оцените производительность моделей линейной регрессии, регрессионного
на предоставленных данных.
дерева и случайного леса на предоставленных данных.
Ход решения
Ход решения
1. Изучите
методические указания.
1. Изучите методические указания.
2. Для2. решения
прогнозирования
на недвижимость
Для решениязадачи
задачи прогнозирования
цен на цен
недвижимость
сначала
сначала
импортируйте
для работы программы.
импортируйте
библиотекибиблиотеки
для работы программы.
3. Загрузите csv-файл, который содержит необходимые данные. Можно
использовать данные из CSV-файла с помощью Pandas.
326
3. Загрузите csv-файл, который содержит необходимые данные.
Можно использовать данные из CSV-файла с помощью Pandas.
4. Произведите кодирование категориальных признаков с использованием
4. 4.Произведите
кодирование
категориальных
с исПроизведите кодирование
категориальных
признаковпризнаков
с использованием
one-hot encoding:
пользованием
one-hot
encoding:
one-hot encoding:
– pd.get_dummies(data). Используется для создания бинарных (дамми)
– pd.get_dummies(data). Используется для создания бинарных (дамми)
– pd.get_dummies(data).
Используется
создания бинарных
переменных
для каждого уникального
значения в для
категориальных
признаках.
переменных для каждого уникального значения в категориальных признаках.
(дамми)
переменных
для
каждого
уникального
значения
в категоОн автоматически создает столбцы для каждой уникальной категории
и
Он автоматически создает столбцы для каждой уникальной категории и
риальных
автоматически
столбцы
для каприсваиваетпризнаках.
им значения Он
0 или
1, в зависимостисоздает
от наличия
или отсутствия
присваивает
им значения
0 или 1,ив присваивает
зависимости отим
наличия
или отсутствия
ждой
категории
значения
0 или 1,
даннойуникальной
категории в исходных
данных;
данной
категории
в
исходных
данных;
в зависимости
от наличия или отсутствия данной категории в ис– drop_first=True – параметр, указывающий на то, что нужно удалить
– drop_first=True
– параметр, указывающий на то, что нужно удалить
ходных
данных;
первый столбец бинарных переменных для каждого категориального признака.
первый
столбец
бинарных
каждого категориального
признака.
– drop_first=True –переменных
параметр,для
указывающий
на то, что
нужно
Это делается, чтобы избежать ловушки фиктивных переменных, когда одну из
Это делается,
чтобы
избежать
ловушки фиктивных
переменных,
когда одну
из
удалить
первый
столбец
бинарных
переменных
для каждого
категобинарных переменных можно предсказать по остальным. Например, если у вас
бинарных переменных
по остальным.
Например,
если уфиквас
риального
признака.можно
Это предсказать
делается, чтобы
избежать
ловушки
был категориальный признак "Color" с возможными значениями "Red," "Green,"
тивных
переменных,
когда
одну
из бинарных
переменных
можно
был категориальный
признак
"Color"
с возможными
значениями
"Red," "Green,"
и "Blue," кодирование one-hot encoding создаст три новых столбца: "Color_Red,"
предсказать
по остальным.
Например,
у васстолбца:
был категориальи "Blue," кодирование
one-hot encoding
создаст если
три новых
"Color_Red,"
"Color_Green," и "Color_Blue." Если объект имеет красный цвет, то в столбце
ный
признак
«Color»
с
возможными
значениями
«Red,»
"Color_Green," и "Color_Blue." Если объект имеет красный цвет, то в«Green,»
столбце
будет стоять 1, а в остальных – 0. В результате этого шага все
и"Color_Red"
«Blue», кодирование
encoding
создаст
три новых
"Color_Red"
будет стоять one-hot
1, а в остальных
– 0.
В результате
этого столбца:
шага все
категориальные «Color_Green,»
признаки заменяются
бинарными столбцами,
«Color_Red,»
и «Color_Blue.»
Если которые
объект теперь
имеет
категориальные признаки заменяются
бинарными столбцами,
которые
теперь
можно
использовать
для
обучения
моделей
машинного
обучения.
Это
важный
красный
цвет, то вдля
столбце
«Color_Red»
будет стоять
1, Это
а в важный
остальможно использовать
обучения
моделей машинного
обучения.
шаг, –так
как
модели, такие
как
линейная
регрессия, работают
только зас
ных
0.
В
результате
этого
шага
все
категориальные
признаки
шаг, так как модели, такие как линейная регрессия, работают только с
числовыми
данными,
а
не
с
текстовыми
категориями.
меняются бинарными столбцами, которые теперь можно использочисловыми данными, а не с текстовыми категориями.
5. Заполните
пропущенные
значения.
вать для
обучения
моделей машинного
обучения. Это важный шаг,
5. Заполните пропущенные значения.
так как модели, такие как линейная регрессия, работают только
с числовыми данными, а не с текстовыми категориями.
327
5. Заполните пропущенные значения.
В этом шаге обрабатываются пропущенные значения в данных, чтобы
Вмодели
этоммашинного
шаге обрабатываются
пропущенные значения в данных,
обучения могли правильно работать:
чтобы модели
обучения
могли значения
правильно
работать:
этом машинного
шаге обрабатываются
пропущенные
в данных,
чтобы
–В data.median().
Метод median()
используется
для вычисления
медианы
–для
data.median().
Метод
median()
используется
для
вычисления
модели
машинного
обучения
могли
правильно
работать:
каждого столбца в наборе данных. Медиана – среднее значение, которое
медианы
для
каждого
столбца
в наборе
Медиана
– среднее
data.median().
Метод
median()
используется
для метрика
вычисления
медианы
делит –данные
на две равные
половины,
и это данных.
хорошая
центральной
для каждого
столбца
в наборе
данных.
– среднее
значение,
которое
делит
данные
на Медиана
двепозволяет
равные
половины,
икоторое
это хоротенденции
данных.
Вычисление
медианы
нам значение,
найти «среднее»
делит
данные
на
две
равные
половины,
и
это
хорошая
метрика
центральной
шая значение
метрика
тенденции
данных.
Вычисление
медианы
дляцентральной
каждого признака,
которое будет
использоваться
для заполнения
тенденции
данных.
Вычисление
позволяет
нам найтипризнака,
«среднее» копропущенных
значений;
позволяет
нам
найти
«среднее»медианы
значение
для каждого
значение
для
каждого признака,
которое
будет
использоваться
заполнения
– data.fillna(data.median()).
Этот
метод
Pandas
заменяет
вседля
пропущенные
торое
будет
использоваться
для
заполнения
пропущенных
значений;
пропущенных
значений;
в исходных данных медианными
значениями,
которые
вычислили
напро–значения
data.fillna(data.median()).
Этот метод
Pandas
заменяет
все
– data.fillna(data.median()).
Этот
метод
Pandasбыли
заменяет
все пропущенные
предыдущем
шаге.
Таким
образом,
если
в
данных
пропущенные
значения
пущенные значения в исходных данных медианными значениями,
значения
в исходных
данных
медианными
значениями,
которые вычислили
на
в каких-либо
столбцах,
онипредыдущем
будут
заменены
на
соответствующие
медианные
которые
вычислили
на
шаге.
Таким образом,
если
предыдущем
шаге. Таким образом, если в данных были пропущенные значения
значения.
в данных были пропущенные значения в каких-либо столбцах, они
в каких-либо
столбцах,
они будут
заменены
на соответствующие
медианные
Пропущенные
значения
могут
возникать
по разным причинам,
и их
будут заменены на соответствующие медианные значения.
значения. важна, так как многие модели машинного обучения не могут
обработка
Пропущенные значения могут возникать по разным причинам,
Пропущенные
могут
разным причинам,
и их
работать
с данными,значения
в которых
есть возникать
пропуски. по
Заполнение
их медианными
и их обработка
обработка
важна,
такмногие
как многие
модели
машинного
обучения
важна,
так
как
модели
машинного
обучения
не
могут
значениями – один из способов обработки пропущенных данных, и это
не могут
работать
с данными,
в которых
есть
пропуски.
Заполнение
работать
с сохранить
данными,
в которых есть
пропуски.
Заполнение
их медианными
позволяет
информацию
в наборе
данных
и подготовить
его для
их медианными
значениями
–
один
из
способов
обработки
значениями
– один из способов обработки пропущенных данных, и пропуэто
обучения
моделей.
щенных
данных,
и
это
позволяет
сохранить
информацию
в
наборе
позволяет
сохранить
информацию
в
наборе
данных
и
подготовить
его
для
6. Разделите данные на признаки и целевую переменную.
данных
и подготовить
его для обучения моделей.
обучения
моделей.
6. Разделите
данные
напризнаки
признаки
и целевую
переменную.
6. Разделите
данные на
и целевую
переменную.
X = data.drop(‘SalePrice’, axis=1): создает матрицу признаков
X путем удаления столбца ‘SalePrice’ из исходных данных data.
По умолчанию метод drop() удаляет указанный столбец, и axis=1
указывает, что мы хотим удалить столбец (в Pandas 1 – это столбцы,
0 – это строки).
328
X = data.drop('SalePrice', axis=1): создает матрицу признаков X путем
удаления столбца 'SalePrice' из исходных данных data. По умолчанию метод
ydrop()
= data[‘SalePrice’]
создаети вектор
целевой
y, коудаляет указанный столбец,
axis=1 указывает,
что переменной
мы хотим удалить
торый
состоит
из 1значений
столбца
‘SalePrice’ из исходных данных
столбец
(в Pandas
– это столбцы,
0 – это строки).
data. В данном
контексте
‘SalePrice’
обычно
представляет
собой цеy = data['SalePrice']
создает
вектор целевой
переменной
y, который состоит
из значений
столбца 'SalePrice'
из мы
исходных
данных
data. В данном
контексте
левую
переменную,
которую
хотим
предсказать
с использоваобычно
представляет собой целевую переменную, которую мы хотим
нием'SalePrice'
моделей
регрессии.
с использованием
моделей
регрессии.
Впредсказать
результате
выполнения
этого
шага получится матрица приВ
результате
выполнения
этого
получится кроме
матрица целевой
признаков X,
знаков X, которая содержит всешага
признаки,
перекоторая
содержит
все
признаки,
кроме
целевой
переменной,
и
вектор
y,
который
менной, и вектор y, который содержит целевую переменную. Они
содержит целевую переменную. Они необходимы для правильной подготовки
необходимы
для правильной подготовки данных перед обучением
данных перед обучением моделей регрессии, где X будет использоваться для
моделей регрессии, где X будет использоваться для предсказания y.
предсказания y.
7. Разделите данные на обучающий и тестовый наборы. Разде7. Разделите данные на обучающий и тестовый наборы. Разделение
ление данных на обучающий и тестовый наборы – важный этап маданных на обучающий и тестовый наборы – важный этап машинного обучения,
шинного обучения, который позволяет оценить производительность
который позволяет оценить производительность моделей на независимых
моделей
на независимых данных. В данном случае данные разделяданных. В данном случае данные разделяются на две части: обучающий набор
ются(часть
на две
части: обучающий набор (часть данных, на которой моданных, на которой модель будет обучаться) и тестовый набор (часть
дель данных,
будет обучаться)
тестовый
набор
(часть данных,
на которой
на которой и модель
будет
тестироваться
для оценки
ее
модель
будет
тестироваться
для
оценки
ее
производительности).
производительности).
X – матрица признаков, которую определили ранее, и она содержит все
X – матрица признаков, которую определили ранее, и она содерпризнаки из набора данных, кроме целевой переменной.
жит все признаки
из набора данных, кроме целевой переменной.
y – вектор целевой переменной, который также определен ранее и
yсодержит
– вектор
целевой
переменной, который также определен разначения, которые хотим предсказать.
нее и содержит значения, которые хотим предсказать.
test_size=0.2 – параметр, который указывает, какую долю данных мы хотим выделить для тестирования. Здесь 0.2 означает: 20 %
данных будет использовано в тестовом наборе и 80 % будет в обучающем наборе.
random_state=42 – seed для генерации случайных чисел. Установив это значение, вы гарантируете, что разделение данных будет
одинаковым при каждом запуске кода. Это полезно для воспроизводимости результатов.
После выполнения этой строки кода должны получиться следующие переменные:
329
значение, вы гарантируете, что разделение данных будет одинаковым при
каждом запуске кода. Это полезно для воспроизводимости результатов.
После выполнения этой строки кода должны получиться следующие
переменные:
X_train
– обучающий набор признаков;
X_train – обучающий набор признаков;
X_test
– тестовый набор признаков;
X_test – тестовый набор признаков;
y_train
– обучающий
набор
целевой
переменной;
y_train
– обучающий набор
целевой
переменной;
y_test
– тестовый
набор
целевой
переменной.
y_test
– тестовый набор
целевой
переменной.
8. Используйте
X_train
и
y_train
для
обучения
моделей
X_test
8. Используйте X_train и y_train для обучения
моделей
и X_testи для
дляпроверки
проверки
и оценки
их производительности.
и оценки
их производительности.
9. Создайте
экземпляры
моделей
регрессии,
которые
будут ис9. Создайте экземпляры моделей
регрессии,
которые будут
использоваться
пользоваться
обучения и предсказания.
для обучения для
и предсказания.
linear_reg = LinearRegression(). Здесь мы создаем экземпляр линейной
linear_reg
= LinearRegression(). Здесь мы создаем экземпляр
линейной регрессии (LinearRegression) из библиотеки scikit-learn.
модель, которая пытается установить линейную зависимость между признаками
Линейная
регрессия – модель, которая пытается установить линейи целевой переменной.
ную зависимость между признаками и целевой переменной.
decision_tree_reg
=
DecisionTreeRegressor().
Создает
экземпляр
decision_tree_reg = DecisionTreeRegressor(). Создает экземпляр
регрессионного дерева (DecisionTreeRegressor). Регрессионное дерево – модель,
регрессионного дерева (DecisionTreeRegressor). Регрессионное
которая разделяет данные на несколько подгрупп на основе признаков и
дерево – модель, которая разделяет данные на несколько подгрупп
прогнозирует целевую переменную на основе среднего значения в каждой
на основе признаков и прогнозирует целевую переменную на осноподгруппе.
ве среднего значения в каждой подгруппе.
random_forest_reg = RandomForestRegressor(). Создает экземrandom_forest_reg = RandomForestRegressor(). Создает экземпляр
пляр случайного леса (RandomForestRegressor). Случайный лес –
случайного леса (RandomForestRegressor). Случайный лес – ансамблевая
ансамблевая модель, которая объединяет несколько регрессионмодель, которая объединяет несколько регрессионных деревьев для улучшения
ных деревьев для улучшения предсказательной способности.
предсказательной способности.
Эти экземпляры моделей являются объектами, которые содерЭти экземпляры моделей являются объектами, которые содержат методы
жат методы и параметры для обучения и предсказания.
и параметры для обучения и предсказания.
10. После
создания экземпляров обучите их на обучающих дан10. После создания экземпляров обучите их на обучающих данных и
ныхиспользуйте
и используйте
для предсказания значений на тестовых данных.
для предсказания значений на тестовых данных.
регрессии (LinearRegression) из библиотеки scikit-learn. Линейная регрессия –
linear_reg.fit(X_train, y_train). Здесь мы обучаем модель линейной
регрессии (linear_reg), используя обучающие
330 данные. Метод fit() принимает два
аргумента: X_train – матрицу признаков из обучающего набора, и y_train –
вектор целевой переменной из обучающего набора. Обучение модели линейной
linear_reg.fit(X_train, y_train). Здесь мы обучаем модель линейной регрессии (linear_reg), используя обучающие данные. Метод
fit() принимает два аргумента: X_train – матрицу признаков из обучающего набора, и y_train – вектор целевой переменной из обучающего набора. Обучение модели линейной регрессии заключается
в нахождении оптимальных весов (коэффициентов) для линейной
комбинации признаков, которая наилучшим образом предсказывает целевую переменную.
decision_tree_reg.fit(X_train, y_train). Здесь мы обучаем модель
регрессионного дерева (decision_tree_reg) на том же обучающем
наборе данных. Регрессионное дерево строит дерево решений, которое разделяет данные на подгруппы и предсказывает целевую переменную в каждой подгруппе.
random_forest_reg.fit(X_train, y_train). В этой строке мы обучаем
модель случайного леса (random_forest_reg) на обучающих данных.
Случайный лес – ансамбль регрессионных деревьев, где каждое
дерево обучается на подмножестве данных и затем их результаты
комбинируются для улучшения предсказаний.
11. Примените обученные модели для создания предсказаний
11. Примените обученные модели для создания предсказаний на тестовом
на тестовом
наборе данных.
наборе данных.
linear_reg_pred = linear_reg.predict(X_test). Используем обученную модель
linear_reg_pred = linear_reg.predict(X_test). Используем обученлинейной регрессии (linear_reg), чтобы предсказать целевую переменную на
ную модель
линейной регрессии (linear_reg), чтобы предсказать
тестовом наборе данных X_test. Метод predict() принимает матрицу признаков
целевую
переменную
на итестовом
наборе данных
X_test.
X_test в качестве аргумента
возвращает предсказанные
значения для
целевой Метод
predict()
принимает
матрицу
признаков
X_test в качестве
аргуменпеременной.
linear_reg_pred
будет
содержать предсказанные
значения для
линейной регрессии.
та и возвращает
предсказанные значения для целевой переменной.
decision_tree_reg_pred = decision_tree_reg.predict(X_test). Аналогично в
linear_reg_pred
будет содержать предсказанные значения для лиэтой строке мы используем обученную модель регрессионного дерева
нейной регрессии.
(decision_tree_reg) для предсказания целевой переменной на тестовом наборе
decision_tree_reg_pred
= decision_tree_reg.predict(X_test). Аналоданных X_test. decision_tree_reg_pred будет содержать предсказанные значения
гично вдляэтой
строке
мы
используем
обученную модель регрессионрегрессионного дерева.
ного дереваrandom_forest_reg_pred
(decision_tree_reg)
предсказания целевойЗдесь
перемен= для
random_forest_reg.predict(X_test).
случайного
(random_forest_reg) для будет
ной наиспользуем
тестовомобученную
наборе модель
данных
X_test. леса
decision_tree_reg_pred
предсказания целевой переменной на тестовом наборе данных X_test.
random_forest_reg_pred
будет
содержать
331 предсказанные
значения
для
случайного леса.
12. Оцените производительность каждой модели на тестовом наборе
содержать предсказанные значения для регрессионного дерева.
random_forest_reg_pred = random_forest_reg.predict(X_test).
Здесь используем обученную модель случайного леса (random_
forest_reg) для предсказания целевой переменной на тестовом наборе данных X_test. random_forest_reg_pred будет содержать предсказанные значения для случайного леса.
12. Оцените производительность каждой модели на тестовом
наборе данных с использованием среднеквадратической ошибки
(MSE).
linear_reg_mse = mean_squared_error(y_test, linear_reg_pred) вычисляет
linear_reg_mse = mean_squared_error(y_test, linear_reg_pred) высреднеквадратическую ошибку (MSE) для предсказаний, полученных от модели
числяет среднеквадратическую ошибку (MSE) для предсказаний,
линейной регрессии. MSE – метрика, которая измеряет среднеквадратичное
полученных
от модели линейной регрессии. MSE – метрика, котоотклонение между фактическими и предсказанными значениями целевой
рая измеряет
среднеквадратичное
отклонение
переменной. Чем
меньше значение MSE, тем
лучше модель.между фактическими и предсказанными
значениями
целевой
переменной.
Чем меньdecision_tree_reg_mse = mean_squared_error(y_test,
decision_tree_reg_pred).
ше значение
тем лучше
АналогичноMSE,
здесь вычисляем
MSEмодель.
для предсказаний, полученных от модели
decision_tree_reg_mse
= позволяет
mean_squared_error(y_test,
decision_
регрессионного дерева. Это
оценить, насколько хорошо
tree_reg_pred).
здесь
вычисляем
MSE
для предсказарегрессионное Аналогично
дерево справляется
с предсказанием
целевой
переменной.
random_forest_reg_mse
=
mean_squared_error(y_test,
ний, полученных
от модели регрессионного
дерева. Это позволяrandom_forest_reg_pred).
Здесь мы регрессионное
вычисляем MSE дерево
для предсказаний,
ет оценить,
насколько хорошо
справляется
полученных от модели
случайного
леса. Сравнение MSE для разных моделей
с предсказанием
целевой
переменной.
позволяет определить, какая =
из mean_squared_error(y_test,
моделей лучше предсказывает целевую
random_forest_reg_mse
random_
переменную
на
тестовых
данных.
Теперь
у насMSE
есть значения
MSE для каждой поforest_reg_pred). Здесь мы вычисляем
для предсказаний,
модели, которые можем использовать для сравнения и определения того, какая
лученных
от модели случайного леса. Сравнение MSE для разных
модель дает наилучшие прогнозы. Модель с наименьшим значением MSE
моделей позволяет определить, какая из моделей лучше предскасчитается наиболее точной и хорошо предсказывающей.
зывает целевую переменную на тестовых данных. Теперь у нас есть
13. Оцените производительность моделей на тестовом наборе данных с
значения MSE для каждой модели, которые можем использовать
использованием коэффициента детерминации (R^2).
для сравнения и определения того, какая модель дает наилучшие
прогнозы. Модель с наименьшим значением MSE считается наиболее точной и хорошо предсказывающей.
332
позволяет определить, какая из моделей лучше предсказывает целевую
переменную на тестовых данных. Теперь у нас есть значения MSE для каждой
модели, которые можем использовать для сравнения и определения того, какая
модель дает наилучшие прогнозы. Модель с наименьшим значением MSE
считается наиболее точной и хорошо предсказывающей.
13. Оцените
производительность моделей на тестовом наборе
13. Оцените производительность моделей на тестовом наборе данных с
данных с использованием
коэффициента
использованием коэффициента
детерминации (R^2). детерминации (R^2).
linear_reg_r2 = r2_score(y_test, linear_reg_pred) вычисляет коэффициент детерминации (R^2) для модели линейной регрессии.
R^2 – метрика, которая измеряет, насколько хорошо модель соответствует данным. Значение R^2 находится в диапазоне от 0 до 1,
где 1 означает, что модель идеально соответствует данным, а 0 – что
модель не объясняет вариацию в данных.
decision_tree_reg_r2 = r2_score(y_test, decision_tree_reg_pred)
вычисляет R^2 для модели регрессионного дерева. Позволяет оцеlinear_reg_r2 = r2_score(y_test, linear_reg_pred) вычисляет коэффициент
нить, насколько
хорошо регрессионное дерево объясняет вариадетерминации (R^2) для модели линейной регрессии. R^2 – метрика, которая
измеряет,
насколько хорошо модель соответствует данным. Значение R^2
цию в целевой
переменной.
находится в диапазоне от 0 до 1, где 1 означает, что модель идеально
random_forest_reg_r2
= r2_score(y_test, random_forest_reg_pred)
соответствует данным, а 0 означает, что модель не объясняет вариацию в
вычисляет R^2
данных.для модели случайного леса. Сравнение R^2 для
r2_score(y_test, decision_tree_reg_pred) вычисляет
разных моделейdecision_tree_reg_r2
позволяет=определить,
какая из моделей лучше соR^2 для модели регрессионного дерева. Позволяет оценить, насколько хорошо
ответствует данным
объясняет
вариацию
в целевой переменной.
регрессионное и
дерево
объясняет вариацию
в целевой переменной.
random_forest_reg_r2
= r2_score(y_test,
random_forest_reg_pred)
вычисляет
После выполнения
этих
строк кода
получились
значения R^2
R^2 для модели случайного леса. Сравнение R^2 для разных моделей позволяет
для каждой определить,
модели,
которые
можно
использовать
для
сравнения
какая из моделей лучше соответствует данным и объясняет
вариацию
в целевой
переменной.
и определения
того,
какая
модель лучше объясняет данные. Модель
После выполнения этих строк кода получились значения R^2 для каждой
с близким к 1 значением
R^2 считается хорошей, так как она хомодели, которые можно использовать для сравнения и определения того, какая
рошо соответствует
в то
время
как
со значением
модель лучше данным,
объясняет данные.
Модель
с близким
к 1 модель
значением R^2
хорошей, так как она хорошо соответствует данным, в то время как
близким к 0 считается
объясняет
данные плохо.
модель со значением близким к 0 объясняет данные плохо.
14. Выведите
параметры
MSE и R^2.
14. Выведите
параметры линейной
линейной регрессиирегрессии
MSE и R^2.
Результатом выполнения этого кода будут значения MSE и R^2 для
Результатом
выполнения
этого
кода
будут
значения
линейной
регрессии, регрессионного
дерева
и случайного
леса.
Эти метрики MSE и R^2
помогут
вам
оценить,
насколько
хорошо
каждая
модель
предсказывает
цену
для линейной регрессии, регрессионного дерева и случайного
леса.
продажи домов, и сравнить их между собой.
Эти метрики помогут вам оценить, насколько хорошо каждая модель
предсказывает цену продажи домов, и сравнить их между собой.
333
Полный листинг кода
Полный листинг кода
334
Методические указания
Регрессия – статистический метод анализа данных, который
используется для моделирования отношений между зависимыми
и независимыми переменными. Задачей регрессии является построение модели, которая предсказывает значение зависимой переменной на основе значений одной или нескольких независимых
переменных. Эта модель может быть линейной или нелинейной,
в зависимости от природы данных.
Линейная регрессия – один из наиболее простых и распространенных методов регрессии. Она предполагает, что связь между зависимой и независимыми переменными линейна. Модель линейной регрессии можно записать как:
Y = β0 + β1X1 + β2X2 + … + βnXn + ε,
где Y – зависимая переменная; Xi – независимые переменные;
β0 – интерсепт (свободный член); βi – коэффициенты регрессии;
ε – остатки (случайная ошибка).
Оценка параметров регрессии – процесс определения значений
коэффициентов (β0, β1, β2, …) модели, которые наилучшим образом
соответствуют наблюдаемым данным. Оценка может производиться
с использованием метода наименьших квадратов (МНК), который
минимизирует сумму квадратов разностей между наблюдаемыми
и предсказанными значениями.
В случаях когда связь между переменными не является линейной, используются нелинейные модели регрессии. Примерами могут служить экспоненциальные, логистические и полиномиальные
модели. Для оценки параметров нелинейной регрессии используются различные методы, включая метод наименьших квадратов
и метод максимального правдоподобия.
Подбор оптимальных параметров регрессии включает выбор
наилучшей модели и настройку её параметров. Это важный шаг, так
как плохой выбор модели или параметров может привести к низкой
точности предсказаний. Для этого используются различные методы, включая кросс-валидацию и оптимизацию.
Кросс-валидация – метод оценки производительности модели
и выбора оптимальных параметров. Он включает в себя разделение
данных на обучающий и тестовый наборы, обучение модели на обу 335
чающем наборе и оценку её производительности на тестовом наборе. Повторение этого процесса несколько раз позволяет получить
усредненную оценку производительности модели.
Для подбора оптимальных параметров модели часто используется метод оптимизации, такой как метод градиентного спуска. Этот
метод позволяет находить значения параметров, которые минимизируют функцию потерь, такую как среднеквадратичная ошибка.
Задания для самостоятельного выполнения
1. Напишите программу, которая генерирует случайные данные
и использует метод линейной регрессии для предсказания значения
зависимой переменной.
2. Создайте программу, которая обучает нейронную сеть распознавать рукописные цифры MNIST. Используйте библиотеку
TensorFlow для реализации.
3. Реализуйте алгоритм классификации k-ближайших соседей
(k-nearest neighbors) для набора данных Iris. Протестируйте его точность на тестовом наборе данных.
4. Напишите программу, которая использует метод опорных
векторов (Support Vector Machines) для классификации изображений собак и кошек. Используйте набор данных CIFAR-10.
5. Создайте программу, которая применяет алгоритм кластеризации K-средних (k-means) к набору данных с информацией о покемонах. Визуализируйте полученные кластеры.
6. Напишите программу, которая использует линейную регрессию для предсказания стоимости дома на основе его площади.
7. Создайте программу, которая обучает модель машинного
обучения для классификации писем на спам и не спам на основе
набора данных SpamAssassin.
8.Реализуйте алгоритм K-средних (k-means) для кластеризации
набора данных с информацией о покемонах.
9. Напишите программу, которая использует дерево решений
(Decision Tree) для классификации пациентов на здоровых и больных на основе набора данных медицинских показателей.
10. Создайте программу, которая использует метод опорных
векторов (Support Vector Machines) для классификации изображений собак и кошек на основе набора данных CIFAR-10.
336
Тема «Системы глубокого обучения»
Задание 1. Классификация изображений. Разработайте сверточную нейронную сеть для классификации изображений из датасета CIFAR-10, используя TensorFlow и Keras в среде Google Colab.
Нормализуйте данные, создайте и обучите модель, оцените её точность на тестовых данных и визуализируйте результаты классификации нескольких изображений.
В рамках данного задания предлагается познакомиться с классификацией изображений на примере датасета CIFAR-10. Датасет
CIFAR-10 состоит из 60 000 цветных изображений, поделенных
на 10 классов. Каждый класс содержит 6000 изображений. Задача
заключается в написании программы, которая сможет классифицировать изображения из этого датасета.
Ход работы
1. Изучите методические указания.
2. Перейдите в ресурсе Google Colab (https://colab.research.
google.com/) и импортируйте ряд библиотек и инструментов.
3.
Загрузите
набор
готовых
изображений,
которые
будут
Загрузитенабор
набор
готовых
изображений,
которые
будут
3.3. Загрузите
готовых
изображений,
которые
будут класклассифицированы (например, CIFAR-10).
сифицированы (например,
CIFAR-10).
классифицированы
(например, CIFAR-10).
4. Проведите предварительную обработку загруженных данных. Для этого
необходимо нормализовать значения пикселей изображений, чтобы они
находились в диапазоне от 0 до 1.
Проведите предварительную
обработку
загруженных данных. данных.
Для этого
4.4.Проведите
предварительную
обработку
5. Создайте
архитектуру нейронной
сети длязагруженных
решения задачи
необходимо
нормализовать
значения
пикселей
изображений,
чтобы
они
В данном
случае используется
сверточная
нейронная
сеть
Для этогоклассификации.
необходимо
нормализовать
значения
пикселей
изобра(Convolutional
Neural
Network,
CNN),
которая
является
эффективным
находились
в диапазоне
от 0 до 1. в диапазоне от 0 до 1.
жений, чтобы
они находились
инструментом для обработки и классификации изображений.
Создайте архитектуру
архитектуру нейронной
нейронной сети
сети для
для решения
решения задачи
задачи
5.5. Создайте
классификации.
В данном
случае
используется
сверточная
классификации.
В данном
случае
используется
сверточная
нейроннаянейсеть
ронная сеть (Convolutional
Neural
Network,
которая
являет(Convolutional
Neural Network,
CNN),
котораяCNN),
является
эффективным
ся
эффективным
инструментом
для
обработки
и
классификации
инструментом для обработки и классификации изображений.
изображений.
Вариант Keras, называемый Sequential, позволяет строить модель путем
друг
337задругом (строка 6).
последовательного добавления слоев
6. Добавьте сверточные слои (строки 7, 9). Сверточные слои – основные
строительные блоки сверточных нейронных сетей. Они обрабатывают
классификации. В данном случае используется сверточная нейронная сеть
(Convolutional
Neural
Network,
CNN),
которая
является
эффективным
инструментом для обработки и классификации изображений.
ВариантKeras,
Keras, называемый
Sequential,
позволяет
строить модель
путем
Вариант
называемый
Sequential,
позволяет
строить
мопоследовательного
добавления слоев друг
за другом (строка
дель
путем последовательного
добавления
слоев6).друг за другом
6. 6).
Добавьте сверточные слои (строки 7, 9). Сверточные слои – основные
(строка
6. Добавьтеблоки
сверточные
слоинейронных
(строки 7,сетей.
9). Сверточные
слои –
строительные
сверточных
Они обрабатывают
основные
строительные
сверточных при
нейронных
Они
изображения,
выделяя из блоки
них характеристики
помощи сетей.
сверточных
обрабатывают
изображения,
выделяясверточный
из них характеристики
при
операций. В данном
случае мы добавляем
слой с 32 фильтрами
помощи сверточных операций. В данном случае мы добавляем сверточный слой с 32 фильтрами размером 3×3, функцией активации
ReLU и указываем размерность входных данных (32×32 пикселя
и 3 канала цветности).
7. Определите пулинговые слои (строки 8, 10). Пулинговые
слои предназначены для уменьшения размерности данных и извлечения наиболее важных функций изображения. В данном случае мы добавляем слой пулинга с размером окна 2×2, что позволяет
уменьшить размерность изображения в два раза.
8. Определите Flatten-слой (строка 11), который преобразует
данные из двумерного массива (например, после сверточных слоев
и слоев пулинга) в одномерный массив для передачи на следующие
слои. Он выпрямляет данные в список пикселей.
9. Добавьте полносвязные слои (строки 12, 13). Полносвязные
слои – обычные слои нейронной сети с полным соединением каждого нейрона с предыдущим слоем. В данном случае будут добавлены
два полносвязных слоя. Первый слой имеет 64 нейрона и функцию
активации ReLU, а второй слой имеет 10 нейронов, соответствующих количеству классов в задаче классификации изображений.
10. После определения полносвязных слоев произведите компиляцию модели. Компиляция модели – шаг, указывающий дополнительные настройки модели, которые позволяют определить, как
будет выполняться обучение модели.
338
модели. Компиляция модели – шаг, в котором указываются дополнительные
настройки модели, которые позволяют определить, как будет выполняться
обучение модели.
данном коде
коде модель
модель компилируется
компилируется с сиспользованием
следующих
ВВданном
использованием
следупараметров:
ющих параметров:
optimizer='adam'. Оптимизатор
'adam'
является
распространенным
–– optimizer=’adam’.
Оптимизатор
‘adam’
является
распростраметодом
для моделейдля
глубокого
Онобучения.
адаптивно
ненным оптимизации
методом оптимизации
моделейобучения.
глубокого
Он адаптивно настраивает скорость обучения на основе градиентов,
что позволяет
достигать
более градиентов,
быстрого что
и точного
настраивает
скорость обучения
на основе
позволяетобучения
достигать
модели;
более быстрого и точного обучения модели;
– функция потерь loss (строка 8). Функция потерь
–
функция
потерь
loss
(строка
8).
Функция
потерь
SparseCategoricalCrossentropy используется для задач многокласSparseCategoricalCrossentropy используется для задач многоклассовой
совой классификации, где метки классов представлены в виде цеклассификации, где метки классов представлены в виде целых чисел вместо
лых чисел вместо one-hot кодирования. Параметр from_logits=True
one-hot кодирования. Параметр from_logits=True указывает, что модель
указывает, что модель возвращает необработанные значения (logits)
необработанные
значения (logits)
в последнем
слое,функцию
а не значения,
ввозвращает
последнем
слое, а не значения,
пропущенные
через
акпропущенные
через
функцию
активации
softmax;
тивации softmax;
метрики (строка
(строка 9).
9). Указываем
Указываем метрику
метрику ‘accuracy’
'accuracy' для
–– метрики
для оценки
оценпроизводительности
модели.модели.
МетрикаМетрика
'accuracy' ‘accuracy’
определяет, определяет,
как точно модель
ки
производительности
как
точно
модель
классифицирует
данные,
вычисляя
отношение
праклассифицирует данные, вычисляя отношение правильных предсказаний к
вильных
предсказаний
к общему количеству предсказаний.
общему количеству
предсказаний.
11.
Обучите
модель
11. Обучите модель нанатренировочных
тренировочных данных
данных сс использованииспользованием
ем
заданных
оптимизатора,
функции
потерь
и
метрики.
заданных оптимизатора, функции потерь и метрики.
Модель
обучается
на
тренировочных
данных
с
использованием
Модель обучается на тренировочных данных с использованием
следующих параметров:
следующих
параметров:
обучающие данные
x_train,
y_train.
x_trainx_train
представляют
собой массив
–– обучающие
данные
x_train,
y_train.
представляют
сотренировочных
изображений, а изображений,
y_train – метки а классов
бой
массив тренировочных
y_train соответствующих
– метки класизображений.
Эти данные изображений.
используются дляЭти
обучения
модели;
сов
соответствующих
данные
используются для
обучения
модели;
– количество эпох epochs=10. Параметр epochs определяет, сколько раз
модель пройдет через весь тренировочный набор данных. За одну эпоху модель
проходит через все изображения и обновляет свои веса соответственно;
–
валидационные
данные 339
validation_data=(x_test,
y_test).
x_test
представляет собой массив тестовых изображений, а y_test – метки классов
– количество эпох epochs=10. Параметр epochs определяет,
сколько раз модель пройдет через весь тренировочный набор данных. За одну эпоху модель проходит через все изображения и обновляет свои веса соответственно;
– валидационные данные validation_data=(x_test, y_test). x_test
представляет собой массив тестовых изображений, а y_test – метки
классов соответствующих изображений. Эти данные используются
для оценки производительности модели во время обучения.
В результате выполнения этого кода модель будет обучаться
на тренировочных
данных в течение
10 модель
эпох. Во
время
обучения
В результате выполнения
этого кода
будет
обучаться
на
модель будет обновлять свои веса, минимизируя функцию потерь,
тренировочных данных в течение 10 эпох. Во время обучения модель будет
и оценивать свою производительность на валидационных данных.
обновлять свои веса, минимизируя функцию потерь, и оценивать свою
12. После завершения обучения оцените точность получившейпроизводительность на валидационных данных.
ся модели.
12. После завершения обучения оцените точность получившейся модели.
Функция evaluate (строка 22) принимает входные данные x_test и их
Функция evaluate (строка 22) принимает входные данные x_test
и их метки y_test в качестве аргументов и возвращает значение
модели на
тестовых данных.
данном
случаеданных.
test_loss В
содержит
потерь
и точности
моделиВ на
тестовых
данномзначение
случае
потерь
(ошибки)
модели
на
тестовых
данных,
а
test_acc
содержит
точность
test_loss содержит значение потерь (ошибки) модели на тестовых
модели (процент
правильных
предсказаний).
данных,
а test_acc
содержит
точность модели (процент правильных
На
строке
23
выводится
значение
точности модели на тестовых данных с
предсказаний).
помощью
функции
print(). Точность
показывает,
какой модели
процент на
изображений
На строке
23 выводится
значение
точности
тестовых
данных
с помощью
функции
print(). Точность показывает, какой
был правильно
классифицирован
моделью.
процент
изображений
был
правильно
классифицирован
моделью.
13. После обучения модели протестируйте
её на реальном
примере.
13. После
моделикод.
протестируйте её на реальном приДобавьте
в конецобучения
файла следующий
мере. Добавьте в конец файла следующий код.
метки y_test в качестве аргументов и возвращает значение потерь и точности
340
14. Для начала создайте список class_names, содержащий имена классов
14. Для начала создайте список class_names, содержащий имена
из
датасета
CIFAR-10.CIFAR-10.
Эти именаЭти
соответствуют
различным различклассам
классов
из датасета
имена соответствуют
изображений,
которые
наша
модель
может
классифицировать
(строки
4,
5).
ным классам изображений, которые наша модель может классифиЗатем,(строки
используя
цировать
4, 5).функцию predict, модель получает предсказания
вероятностей
для каждого функцию
класса для каждого
из тестового
набора
Затем, используя
predict,изображения
модель получает
предскаданныхвероятностей
(строка 8).
зания
для каждого класса для каждого изображения
из тестового набора данных (строка 8).
15. Визуализируйте классификацию изображений (строки 11–
30). Используя библиотеку Matplotlib, выводите классификацию
нескольких изображений из тестового набора данных, чтобы увидеть, как модель классифицирует эти изображения. Цвет текста под
каждым изображением отображает правильность предсказания:
зеленым цветом обозначаются правильные предсказания, а красным – неправильные. Класс, предсказанный моделью, отображается под каждым изображением.
341
В результате должен получиться следующий код для классификации изображений:
342
16. Запустите
Запустите написанную
написанную сверточную
сверточную нейронную
нейронную сеть
сетьдля для
16.
классификации
изображений,
в результате
выполнения
классификации
изображений,
в результате
выполнения
которойкоторой
получится
получится
набор
классифицированных
изображений
из
датасета
набор классифицированных изображений из датасета CIFAR-10, где зеленым
CIFAR-10, где зеленым цветом отмечен текст для верно классифицветом отмечен текст для верно классифицированных изображений, а красным
цированных изображений, а красным – прогноз с погрешностью.
– прогноз с погрешностью.
Методические указания
Методические указания
Классификация изображений является важной задачей в обКлассификация изображений является важной задачей в области
ласти компьютерного зрения. Она позволяет автоматически опрекомпьютерного
зрения. Она содержимое
позволяет автоматически
делять и классифицировать
изображений, определять
что имеет и
классифицировать
содержимое
изображений,
что имеет
широкое
применение
широкое применение
в различных
областях,
включая
медицину,
ро- в
бототехнику, автоматическое распознавание лиц и многое другое.
343
В данном случае мы импортируем 3 библиотеки, которые необходимы для классификации изображений:
– NumPy. Библиотека очень полезна при классификации изображений, поскольку позволяет эффективно работать с массивами и матрицами чисел. В контексте классификации изображений
происходит работа с пикселями изображений, которые могут быть
представлены в виде массивов чисел. NumPy предоставляет удобные функции и операции для выполнения математических операций с этими массивами, таких как вычисление среднего значения,
нормализация или обработка данных, а также инструменты для
создания, изменения и переформатирования массивов, что поможет подготовить данные для классификации;
– TensorFlow. Является мощным инструментом для классификации изображений. Обеспечивает создание, тренировку и использование моделей машинного обучения для классификации изображений. С помощью TensorFlow вы можете построить различные
типы моделей, включая нейронные сети, которые позволяют точно
классифицировать изображения. TensorFlow предоставляет эффективные методы для обучения моделей, включая метод градиентного
спуска, который автоматически обновляет параметры модели, чтобы минимизировать ошибку классификации. Это позволяет моделям классифицировать изображения с высокой точностью;
– Keras. Удобный высокоуровневый интерфейс, который работает поверх TensorFlow. Он делает процесс создания и обучения
моделей глубокого обучения более простым и интуитивным. Keras
предоставляет простые функции для определения архитектуры модели, таких как слои сверточных нейронных сетей и полносвязные
слои. Он также предлагает инструменты для компиляции модели
с функцией потерь и оптимизатором. Keras позволяет быстро определить и обучить модель классификации изображений без необходимости погружаться в детали реализации.
Нормализация значений пикселей изображений до диапазона
от 0 до 1 является важным шагом предварительной обработки данных перед обучением модели классификации изображений.
344
Можно выделить несколько причин необходимости нормализации.
1. Стабильность обучения. Нормализация позволяет обеспечить стабильность обучения модели. Входные данные, содержащие
числа большого масштаба, могут затруднить сходимость алгоритма
оптимизации при обучении модели. Нормализация данных путем
масштабирования значений пикселей от 0 до 1 помогает обеспечить более стабильное и эффективное обучение модели.
2. Совместимость с функциями активации. Некоторые активационные функции, такие как сигмоида или гиперболический
тангенс, работают лучше с входными данными, находящимися
в диапазоне от 0 до 1. Нормализация позволяет сохранять значения
пикселей в этом диапазоне, что может способствовать улучшению
производительности модели.
3. Предотвращение доминирования. Если значения пикселей
входных данных не нормализованы, существует риск доминирования некоторых пикселей над другими. Это может привести к неправильному влиянию на обучение модели, где более яркие пиксели могут играть более существенную роль в принятии решения,
а менее яркие пиксели могут быть незаметными. Нормализация
позволяет уравновесить вклад каждого пикселя в общий контекст
изображения.
Задание 2. Подготовьте обучающий набор данных с текстовыми
отзывами, разделенными на категории «положительный», «отрицательный», «нейтральный».
Ход работ
1. Изучите методические указания.
2. Импортируйте необходимые библиотеки для работы классификатора:
– Pandas;
– Sklearn;
– Nltk;
– Random.
345
– Nltk;
– Random.
– Nltk;
– Random.
3.
Загрузите
необходимые
модели
категоризации
отзывов.
Здесь
3. Загрузите необходимые модели категоризации отзывов. Здесь
загружаются готовые категории отзывов, где stopwords – запрещенные слова,
загружаются готовые категории отзывов, где stopwords – запрещенpunkt – знаки
пунктуации
и movie_reviews
– готовый
набор шаблонных
3. Загрузите
необходимые
модели
категоризации
отзывов. отзывов.
Здесь
ные слова, punkt – знаки пунктуации и movie_reviews – готовый назагружаются готовые категории отзывов, где stopwords – запрещенные слова,
бор шаблонных
отзывов.
punkt – знаки пунктуации и movie_reviews – готовый набор шаблонных отзывов.
4. Создайте некоторый набор данных из меток-отзывов с распределением
на категории:
4. Создайте некоторый набор данных из меток-отзывов с распределением
– positive.некоторый
Означает, что отзыв
о фильме
положительный;
4. Создайте
набор
данных
из меток-отзывов с расна категории:
– negative – отзыв отрицательный;
пределением
на категории:
– positive.
Означает, что отзыв о фильме положительный;
– neutral – отзыв нейтральный.
– positive. Означает,
чтоотрицательный;
отзыв о фильме положительный;
– negative – отзыв
– отзыв
нейтральный.
– negative –– neutral
отзыв
отрицательный;
– neutral – отзыв нейтральный.
5. Создайте DataFrame из набора представленных отзывов и сохранить его
в csv-файл.
346
5. Создайте
DataFrame
набора
представленных
отзывовегои со5. Создайте
DataFrame изиз
набора
представленных
отзывов и сохранить
храните
его в csv-файл.
в csv-файл.
В данном случае DataFrame состоит из двух столбцов:
В данном случае DataFrame состоит из двух столбцов:
– "text";
– «text»;
– "sentiment".
– «sentiment».
Задание 3. Работа с текстами и их векторными представлениями текстов.
Разработайте программу для автоматической классификации текстовых
Задание 3. Работа с текстами и их векторными представлениями
отзывов на английском языке в категории «положительный», «отрицательный»
текстов. Разработайте программу для автоматической классификации текстовых отзывов на английском языке в категории «положительный», «отрицательный» и «нейтральный». Используйте методы
векторизации текста, такие как TF-IDF и Word2Vec, и алгоритмы
и «нейтральный». Используйте методы векторизации текста, такие как TF-IDF
машинного обучения для анализа и классификации текстов. Сози Word2Vec, и алгоритмы машинного обучения для анализа и классификации
дайте и сохраните обучающий набор данных в формате CSV, загрутекстов. Создайте и сохраните обучающий набор данных в формате CSV,
зите данные, обучите модель и оцените её эффективность на новых
загрузите данные, обучите модель и оцените её эффективность на новых
примерах.
примерах.
1. Загрузите
сохраненные отзывы из файла dataset.csv из преды1. Загрузите сохраненные отзывы из файла dataset.csv из предыдущего
дущего
задания
и
задания и выведитевыведите
их на экран. их на экран.
2. Теперь, когда у вас есть набор текстовых данных, прочитайте новый
отзыв и проведите его векторизацию.
347
2. Теперь, когда у вас есть набор текстовых данных, прочитайте
2. Теперь, когда у вас есть набор текстовых данных, прочитайте новый
новый отзыв и проведите его векторизацию.
отзыв и проведите его векторизацию.
Векторизованный отзыв хранится в переменной X_new (строка 53). Перед
Векторизованный отзыв хранится в переменной X_new (строиспользованием модели отзыв проходит через процесс предобработки текста,
ка 53). Перед использованием модели отзыв проходит через прокоторый включает удаление стоп-слов (stopwords), лемматизацию или другие
цесс предобработки текста, который включает удаление стоп-слов
(stopwords), лемматизацию или другие шаги для подготовки текста
к векторизации. Затем отзыв векторизуется с использованием переменной vectorizer, которая предварительно инициализирована
и обучена на соответствующем наборе данных. Дальше векторизованный отзыв передается в модель для предсказания категории.
Модель, которая была предварительно инициализирована и обучена, используется для выполнения предсказания. Она возвращает предсказанную категорию, которая сохраняется в переменную
predicted_category (строка 56).
По итогам выполнения работы должен получиться следующий
код для работы с текстами и их векторными представлениями:
348
В результате выполнения данной программы на выходе будет
получена категория введенного отзыва.
349
В результате выполнения данной программы на выходе будет получена
категория введенного отзыва.
Методические указания
указания
ВМетодические
настоящее время
текстовые данные являются одним из осВ
настоящее
время
текстовые
данные
являются
одним из работать
основных
новных источников информации,
и умение
эффективно
источников
информации,
и умение
эффективно
с ними является
с ними является
важным
навыком
в сфере работать
искусственного
интелважным
навыком
в
сфере
искусственного
интеллекта
и
машинного
обучения.
лекта и машинного обучения.
Векторные
представлениятекстов
текстовпозволяют
позволяютиспользовать
использовать
меВекторные представления
методы
тоды машинного
обучения
анализатекстовой
и обработки
текстовой инмашинного
обучения для
анализа для
и обработки
информации.
формации.
Одним из методов получения векторных представлений текстов является
Одним из методов получения векторных представлений текстов
word2vec, который был описан в 2013 году. Word2vec использует нейронную
является word2vec, который был описан в 2013 году. Word2vec иссеть для изучения ассоциаций между словами на основе большого корпуса
пользует нейронную сеть для изучения ассоциаций между словами
текста. После обучения модель может определять синонимичные слова или
на основе большого корпуса текста. После обучения модель может
предлагать
слова
дляили
неполного
предложения.
Каждое
определятьдополнительные
синонимичные
слова
предлагать
дополнительные
отдельное
слово
представляется
определенным
набором
чисел,
выбранных
слова для неполного предложения. Каждое отдельное слово предтаким
образом,определенным
чтобы улавливатьнабором
семантические
особенности
ставляется
чисел,и синтаксические
выбранных таким
образом,Простая
чтобы улавливать
семантические
синтаксические
особеннослов.
математическая
функция, такаяикак
косинусное сходство,
может
сти слов. Простая
математическая
функция,
такая как
косинусное
указывать
на
уровень
семантической
близости
между
словами,
сходство,
может
указывать
на
уровень
семантической
близости
представленными этими векторами.
между
словами,
представленными
этими
векторами. текстов является
Другим
методом
получения векторных
представлений
Другим методом получения векторных представлений текстов
GloVe (Global Vectors for Word Representation). GloVe использует матрицу
является GloVe (Global Vectors for Word Representation). GloVe использует матрицу совстречаемости слов для извлечения семантической
информации из текста и создания векторных представлений слов.
Для работы с текстами и их векторными представлениями в модуле используются следующие инструменты и методы:
350
– токенизация. Позволяет разбивать текст на отдельные слова или
токены;
– стемминг и лемматизация. Приведение слов к их основной форме для уменьшения размерности пространства признаков и улучшения качества модели;
– TF-IDF. Метод оценки важности слова в контексте документа
и корпуса текстов;
– Bag-of-Words. Модель представления текста, в которой каждый
документ представляется в виде мешка слов, игнорируя порядок
слов;
– Word2Vec и GloVe. Методы получения векторных представлений
слов и текстов;
– методы машинного обучения. Применение алгоритмов машинного обучения, таких как классификация, кластеризация и регрессия, для анализа и обработки текстовой информации.
DataFrame – структура данных, предоставляемая библиотекой
pandas. Она представляет собой двумерную таблицу с данными, состоящую из рядов и столбцов.
Каждый столбец содержит последовательность значений определенного типа данных (строки).
Столбец text содержит текстовые отзывы, а столбец sentiment
содержит метки, указывающие на эмоциональную окраску отзыва
(positive, negative, neutral).
Метод to_csv() сохраняет данные в csv-файл с именем dataset.
csv. Ниже представлен пример данных, хранящихся в файле.
Векторизация текста позволяет представить тексты в виде числовых
351
векторов, где каждый элемент вектора представляет собой характеристику или
признак текста.
Векторизация текста позволяет представить тексты в виде числовых векторов, где каждый элемент вектора представляет собой
характеристику или признак текста.
Задания для самостоятельного выполнения
1. Напишите программу, которая создает и обучает нейронную
сеть с одним скрытым слоем для решения задачи бинарной классификации на примере набора данных XOR.
2. Реализуйте программу, которая использует предобученную
модель глубокого обучения (например, VGG или ResNet) для классификации изображений из набора данных ImageNet.
3. Создайте простую рекуррентную нейронную сеть (RNN) для
генерации текста на основе набора данных с именами.
4. Напишите программу, которая использует автокодировщик
(Autoencoder) для сжатия и восстановления изображений из набора
данных MNIST.
5. Реализуйте модель глубокого обучения для определения типа
цветка на основе набора данных Iris.
6. Создайте программу, которая использует сверточную нейронную сеть (CNN) для классификации изображений из набора
данных FashionMNIST.
7. Напишите алгоритм глубокого обучения для определения настроения текста (например, позитивное или негативное) на основе
набора данных отзывов.
8. Реализуйте простую генеративно-состязательную сеть
(GAN), которая генерирует новые изображения цифр на основе набора данных MNIST.
9. Создайте программу, которая использует архитектуру глубокой нейронной сети для определения жанра музыкальных композиций на основе набора данных GTZAN.
10. Напишите алгоритм обучения с подкреплением (Reinforcement Learning) для создания агента, который обучается играть
в игру «Камень, ножницы, бумага» с использованием алгоритма
Q-обучения.
352
ЗАКЛЮЧЕНИЕ
В результате изучения учебно-методического пособия
студент:
– освоит основные понятия языка программирования Python:
от простой разработки до веб-разработки;
– рассмотрит принципы объектно ориентированного программирования, которые применяются при создании программ на языке
программирования Python и фреймворке Django;
– выделит основные этапы разработки веб-приложения и создаст
проект с применением БД;
– рассмотрит сферу применения языка программирования Python:
освоит основные понятия систем искусственного интеллекта
и машинного обучения;
преподаватель дисциплины:
– получит методическую копилку для ведения дисциплины, связанной с разработкой программных продуктов на языке программирования Python и фреймворке Django;
– будет иметь примеры применения языка программирования
Python в задачах искусственного интеллекта и машинного обучения;
– получит снижение трудоемкости при подготовке к занятиям;
– получит тестовый материал для проверки знаний студентов;
специалист:
– получит методические рекомендации по созданию программных
продуктов: от базовых понятий до полной инструкции создания
программных проектов;
– систематизирует знания в области разработки программных продуктов с использованием языка программирования Python;
– получит методический набор инструментария, который можно
применять в практической деятельности.
353
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Гуриков, С. Р. Основы алгоритмизации и программирования на
Python : учеб. пособие / С. Р. Гуриков. – Москва : ИНФРА-М,
2023. – 341, [1] с. – (Высшее образование – Бакалавриат). –
URL: znanium.com/catalog/product/1913856 (дата обращения:
31.01.2024). – Режим доступа: по подписке. – ISBN 978-5-16102278-8.
2. Ермаков, С. Р. Основы веб-разработки : учебное пособие / С. Р. Ермаков, П. В. Беляев, А. В. Симонова. – Москва : РТУ МИРЭА,
2024. – 181 с. – ISBN 978-5-7339-2147-1. – Текст : электронный //
Лань : электронно-библиотечная система. – URL: https://e.
lanbook.com/book/420965 (дата обращения: 31.01.2024). – Режим
доступа: для авториз. пользователей.
3. Жуков, Р. А. Язык программирования Python : практикум : учеб.
пособие / Р. А. Жуков. – Москва : ИНФРА-М, 2023. – 214, [1] с. –
(Высшее образование – Бакалавриат). – URL: znanium.com/
catalog/product/1915716 (дата обращения: 31.01.2024). – Режим
доступа: по подписке. – ISBN 978-5-16-107207-3.
4. Карякин, М. И. Технологии программирования и компьютерный практикум на языке Python : учеб. пособие / М. И. Карякин,
К. А. Ватульян, Р. М. Мнухин ; Южный федеральный университет. – Ростов-на-Дону [и др.] : Издательство Южного федерального университета, 2022. – 240 с. – URL: znanium.com/catalog/
product/2057604 (дата обращения: 31.01.2024). – Режим доступа:
по подписке. – ISBN 978-5-9275-4108-9.
5. Никитина, Т. П. Программирование. Основы Python для инженеров : учеб. пособие / Т. П. Никитина, Л. В. Королев. – СанктПетербург [и др.] : Лань, 2023. – 154 с. – URL: e.lanbook.com/
book/302720 (дата обращения: 31.01.2024). – Режим доступа:
по подписке. – ISBN 978-5-507-45284-2.
6. Разработка серверной части веб-ресурса : учеб. пособие / В. В. Никулин, А. А. Олейников, А. А. Сорокин, А. В. Олейникова. –
Санкт-Петербург [и др.] : Лань, 2023. – 131 с. – URL: e.lanbook.
com/book/356102 (дата обращения: 31.01.2024). – Режим доступа:
по подписке. – ISBN 978-5-507-47868-2.
354
7. Рагимханова, Г. С. Программирование на Python : учебное пособие / Г. С. Рагимханова. – Махачкала : ДГПУ, 2022. – 126 с. –
Текст : электронный // Лань : электронно-библиотечная система. – URL: https://e.lanbook.com/book/330071 (дата обращения:
14.11.2024). – Режим доступа: для авториз. пользователей.
8. Советов, П. Н. Программирование на языке Питон : учеб. пособие / П. Н. Советов. – Москва : МИРЭА – Российский технологический университет, 2021. – 105 с. – URL: e.lanbook.com/
book/226562 (дата обращения: 31.01.2024). – Режим доступа:
по подписке.
9. Шевченко, Л. Г. Программирование на PYTHON в среде IDLE :
учеб. пособие / Л. Г. Шевченко, Т. В. Дружинина. – Новосибирск :
Новосибирский государственный технический университет,
2020. – 192, [2] с. – URL: znanium.com/catalog/product/1866915
(дата обращения: 31.01.2024). – Режим доступа: по подписке. –
ISBN 978-5-7782-4215-9.
10. Янцев, В. В. Web-программирование на Python : учеб. пособие /
В. В. Янцев. – Изд. 3-е, перераб. – Санкт-Петербург [и др.] :
Лань, 2024. – 178 с. – URL: e.lanbook.com/book/310289 (дата обращения: 31.01.2024). – Режим доступа: по подписке. – ISBN
978-5-507-48364-8.
355
ГЛОССАРИЙ
Django – бесплатная и открытая библиотека для Python, предназначенная для создания веб-приложений.
Django Admin – встроенная веб-административная панель,
которая предоставляет интерфейс для управления данными
в Django-приложении.
ORM (Object-Relational Mapping) – библиотека, которая позволяет абстрагироваться от физической реализации базы данных
и работать с объектами в памяти, а не с таблицами в базе данных.
Web-разработка – процесс создания веб-сайтов и веб-приложений, которые доступны через Интернет.
Авторизация пользователей – процесс проверки подлинности учетных данных пользователя и предоставления ему доступа
к функциям приложения.
Атрибут – переменная, которая хранит данные объекта.
База данных в Python – организованная коллекция данных,
которую можно хранить, обрабатывать и извлекать в программе
на языке Python.
Библиотеки Python – наборы модулей и пакетов, предназначенные для решения определенных задач.
Виртуальное окружение в Python – изолированная среда, в которой можно устанавливать и использовать различные версии пакетов и модулей Python без влияния на другие проекты.
Вложенные функции – функции, которые могут быть определены внутри других функций.
Декораторы в Python – функции, которые принимают другую
функцию в качестве аргумента и возвращают новую функцию,
изменяющую поведение исходной функции без ее изменения.
Замыкание – функция, которая запоминает значения из окружающей среды даже после того, как эта среда была изменена.
Запуск веб-приложения на Python – процесс создания и запуска
приложения, которое может принимать запросы от клиентов через
Интернет.
Инкапсуляция – концепция, которая обеспечивает скрытие
реализации объекта от пользователей объекта.
356
Исключения в Python – ошибки, которые возникают во время
выполнения программы.
Искусственный интеллект (ИИ) – область компьютерных наук,
которая занимается созданием систем, способных имитировать интеллектуальное поведение человека.
Класс – шаблон или описание объекта, который определяет
свойства и методы объектов класса.
Классификация в ИИ – задача, в которой модель обучается присваивать новым данным определенные метки классов на основе
предварительно известных классов.
Кластеризация в ИИ – задача, в которой модель группирует данные на основе их сходства без предварительно известных классов.
Коллекции (collections) – структуры данных в Python, которые
позволяют хранить и обрабатывать данные в виде коллекций.
Кортежи в Python – упорядоченные коллекции объектов, которые могут содержать объекты разных типов.
Машинное обучение является подмножеством ИИ и представляет собой метод, который позволяет компьютерной системе автоматически извлекать знания из данных и использовать их для принятия решений или предсказания результатов на новых данных.
Метод – функция, которая определена в классе и может изменять данные объекта.
Миграции в Django – механизм, который позволяет автоматически создавать и обновлять схему базы данных на основе изменений,
внесенных в модели Django.
Множества в Python – неупорядоченные коллекции уникальных элементов.
Множественное наследование – возможность класса наследовать свойства и методы сразу от нескольких родительских классов.
Модели в Django – объектно-реляционное отображение (ORM),
которое позволяет определить структуру базы данных приложения.
Модули в Python – файлы, содержащие код, который можно
использовать в других программах.
357
Наследование – механизм, который позволяет создавать новые
классы на основе существующих классов, наследуя их свойства
и методы.
Нейронные сети – мощный инструмент машинного обучения,
вдохновленный работой нейронов в человеческом мозге.
Обучение нейронной сети заключается в настройке весов и смещений нейронов, чтобы минимизировать ошибку между прогнозируемыми значениями модели и фактическими значениями целевой
переменной.
Объект – экземпляр класса, который содержит данные и функциональность, определенные в классе.
Объектно ориентированное программирование (ООП) – парадигма программирования, основанная на концепции объектов, которые объединяют данные и функциональность в единую сущность.
Переменные в Python – именованные области памяти, которые
используются для хранения значений.
Полиморфизм – возможность объектов разных классов использовать одинаковое имя метода, но с различной реализацией.
Развертывание веб-приложения на Python с использованием
Django – процесс подготовки и установки приложения, созданного
с помощью Django фреймворка, на веб-сервере, чтобы пользователи могли получить доступ к нему через Интернет.
Регистрация пользователей – процесс создания учетной записи
для нового пользователя в приложении.
Регрессия в ИИ – задача, в которой модель предсказывает непрерывные значения на основе предоставленных данных.
Сборка и запуск приложения на Python – процесс разработки
и подготовки программного кода на языке Python, который может
быть выполняемым на компьютере или другом устройстве.
Системы искусственного интеллекта (ИИ) представляют собой
программные или аппаратные системы, способные выполнять
задачи, которые требуют интеллектуальных способностей, обычно
связанных с человеческим разумом.
Словари в Python – неупорядоченные коллекции объектов,
которые хранятся в виде пар «ключ-значение».
358
Создание веб-страницы в Django – процесс создания интерфейса
пользователя, который отображается в веб-браузере.
Списки – упорядоченные коллекции объектов, которые могут
содержать объекты разных типов.
Строки в Python – последовательность символов, заключенных
в кавычки.
Управление данными в Django приложении – процесс создания,
чтения, обновления и удаления данных в базе данных, используя
модели Django и ORM (объектно-реляционное отображение).
Установка библиотек в Python – процесс установки пакетов,
которые предоставляют дополнительные функции и возможности
для языка программирования Python.
Формы в Django – удобный способ создания HTML-форм
для взаимодействия с пользователем на веб-сайте.
Функция в Python – блок кода, который может принимать входные аргументы и возвращать результаты.
Шаблоны в Django – файлы, которые содержат HTML-разметку
и дополнительные теги шаблонов Django, позволяющие создавать
динамические веб-страницы.
Шаблоны веб-страниц в Python – повторно используемые блоки HTML-кода, которые позволяют создавать динамические вебстраницы.
359
Приложение
Ответы на тесты
№ вопроса
Вариант ответа
№ вопроса
Вариант ответа
Модуль 1. Введение в программирование на языке Python
1
а
16
в
2
г
17
б
3
а, б, в
18
г
4
в
19
а, б, в
5
в
20
в
6
б
21
б
7
б
22
в
8
б
23
а
9
в
24
а
10
б
25
б
11
б
26
а
12
г
27
а
13
г
28
б
14
а
29
а, г
15
б
30
а, в
Модуль 2. Основы web-разработки на Python с использованием Django
1
в
16
в
2
а
17
а, б, в
3
в
18
а
4
г
19
в
5
б
20
а
6
б, в
21
а, в
7
а, б, в
22
а
8
а
23
в
9
а, б
24
б
10
г
25
а
11
а, г
26
б
12
а, б, в
27
а, б
13
а
28
а, в
14
в
29
а
15
а, б
30
а, б
360
№ вопроса
Вариант ответа
№ вопроса
Вариант ответа
Модуль 3. Искусственный интеллект и машинное обучение.
Примеры на Python
1
а
16
а
2
а
17
в
3
а
18
а
4
а
19
в
5
а
20
а
6
а
21
а
7
а
22
а
8
в
23
в
9
а
24
б
10
в
25
г
11
а
26
в
12
в
27
а
13
а
28
б
14
а
29
б
15
а
30
г
361
Cодержание
ВВЕДЕНИЕ .........................................................................................3
Модуль 1. ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ
НА ЯЗЫКЕ PYTHON .....................................................................5
Тема 1. Базовые структуры языка Python и их обработка ..........5
Тема 2. Файлы, модули и функции в Python .............................23
Тема 3. Объектно ориентированное программирование
на Python .............................................................................48
Контрольные вопросы ..............................................................61
Тесты для самоконтроля ............................................................62
Практические задания по темам модуля 1 ................................68
Модуль 2. ОСНОВЫ WEB-РАЗРАБОТКИ НА PYTHON
С ИСПОЛЬЗОВАНИЕМ DJANGO ..............................................131
Тема 4. Создание веб-приложения на Python
с использованием Django ..................................................131
Тема 5. Базы данных и ORM ....................................................147
Тема 6. Django ORM: работа с данными и формами ...............161
Тема 7. Сборка и запуск приложения,
его публикация в Интернете .............................................183
Контрольные вопросы .............................................................198
Тесты для самоконтроля ..........................................................199
Практические задания по темам модуля 2 ..............................206
Модуль 3. ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ
И МАШИННОЕ ОБУЧЕНИЕ. ПРИМЕРЫ НА PYTHON ............285
Тема 8. Введение в искусственный интеллект
и основные методы машинного обучения .......................285
Тема 9. Системы глубокого обучения .....................................298
Контрольные вопросы .............................................................310
Тесты для самоконтроля ..........................................................311
Практические задания по темам модуля 3 ..............................318
ЗАКЛЮЧЕНИЕ ................................................................................353
БИБЛИОГРАФИЧЕСКИЙ СПИСОК ...............................................354
ГЛОССАРИЙ ...................................................................................356
Приложение ...................................................................................360
362
Учебное издание
Гущина Оксана Михайловна,
Герасимов Антон Владимирович
СРеДСТВА ПРОГРАММнОй РАзРАБОТКИ
нА языКе PYTHON: ВеБ-ПРИлОженИя,
ИСКУССТВенный ИнТеллеКТ
И МАшИннОе ОБУченИе
Учебно-методическое пособие
Редактор Т.М. Воропанова
Технический редактор Н.П. Крюкова
Компьютерная верстка: Л.В. Сызганцева
Дизайн обложки: И.И. Шишкина
При оформлении пособия использованы иллюстрации
от Freepik и kjpargeter на сайте ru.freepik.com
Подписано в печать 01.10.2025. Формат 60×84/16.
Печать оперативная. Усл. п. л. 21,09.
Тираж 100 экз. заказ № 1-18-24.
Издательство Тольяттинского государственного университета
445020, г. Тольятти, ул. Белорусская, 14,
тел. 8 (8482) 44-91-47, www.tltsu.ru