Тестовые вопросы по теме «Цепные передачи». 1 Элементы языка программирования Python, необходимые для разработки программы Автобусный парк 6
Скачать 426.02 Kb.
|
СодержаниеВведение 4 1 Элементы языка программирования Python, необходимые для разработки программы «Автобусный парк» 6 1.1Списки в Python 6 1.2 Классы и объекты в Python 9 2 Разработка приложения «Автобусный парк» 12 Заключение 20 Список использованных источников 21 ВведениеНа сегодняшний день применение информационных технологий осуществляется практические в любой сфере жизни общества. Рабочие процессы модернизируются, легче и более четко контролируются и регулируются благодаря внедрению на предприятиях и в учреждениях информационных систем. С помощью программных конструкций описываются объекты реального мира, выполняемые процессы находят свое отражение в виде программных манипуляций с данными. Таким образом, применение информационных технологий ускоряет работу, способствуют развитие и прогрессу. То же самое касается и сферы транспортных услуг. В ходе данной курсовой работы предстоит разработать приложение, которое моделировало бы работу автобусного парка по выезду автобусов на маршрут и их возвращению в парк. Таким образом, цель курсовой работы – разработать на языке программирования Python программу «Автобусный парк». Объект исследования – процесс разработки программ на языке программирования Python. Предмет исследования – структуры данных для хранения множества объектов, реализация алгоритмов на языке Python. Исходя из цели, объекта и предмета исследования, были определены следующие задачи. Проанализировать исходную задачу, выделить необходимые для реализации программы аспекты для изучения; Изучить и проанализировать техническую литературу, мировые информационные ресурсы по исследуемой проблеме. Систематизировать теоретический материал по соответствующим структурам данных. Рассмотреть подходы к работе с соответствующими структурами данных в языке программирования Python и, в соответствии с ними, спроектировать необходимые алгоритмы. 5) Разработать программу «Автобусный парк». Для решения поставленных задач были выбраны следующие методы исследования: систематизация специальной литературы и мировых информационных ресурсов по проблеме исследования. 1 Элементы языка программирования Python, необходимые для разработки программы «Автобусный парк»Согласно заданию, требуется составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Для хранения автобусов в программе используются два списка – автобусы на маршруте и автобусы в парке. Автобусы добавляются и исключаются из обоих списков. Рассмотрим существующие в Python возможности, позволяющие реализовать необходимые операции. Списки в PythonЗачастую работа в программах ведется не с отдельными переменными, а с набором переменных. Если переменные относятся к одному типу и над ними производятся одинаковые операции, их разумно объединить и хранить совместно. Для хранения таких данных можно использовать структуру данных, называемую в языке Python «списком» (в большинстве же языков программирования используется другой термин – «массив»). Кроме того, для работы с наборами данных Python предоставляет такие встроенные типы как кортежи и словари. Список в Python – это набор элементов, каждый из которых имеет свой номер (индекс). Нумерация всегда начинается с нуля, второй по счёту элемент имеет номер 1 и т.д. В отличие от обычных массивов в большинстве языков программирования список – это динамическая структура, его размер можно изменять во время выполнения программы (удалять и добавлять элементы), при этом все операции по управлению памятью берёт на себя транслятор. При создании списка в памяти резервируется область, которую можно условно назвать некоторым “контейнером”, в котором хранятся ссылки на другие элементы данных в памяти. В отличии от таких типов данных как число или строка, содержимое “контейнера” списка можно менять. Для того, чтобы лучше визуально представлять этот процесс, на рисунке 1 изображен пример списка в памяти. Изначально был создан список содержащий ссылки на объекты 1 и 2, после операции a[1] = 3, вторая ссылка в списке стала указывать на объект 3. Рисунок 1 – Пример представления списка в памяти Списки объявляются в квадратных скобках []. Список можно создать перечислением элементов через запятую в квадратных скобках, например, так: z = [3,7,4,2] # Создание списка Каждый элемент списка имеет присвоенный ему индекс. Еще раз подчеркнем, что в Python индекс первого элемента в списке – 0. Соответствие элементов и индексов в списке демонстрируется на рисунке 2. Вторая строка этой таблицы списка Python – индекс элемента списка. Рисунок 2 – Элементы и индексы списка В Python списки часто называют коллекциями, как раз потому что в отличие от массивов они могут содержать объекты разного типа и произвольные структуры данных (словари, множества и т.д.). В списке, указанном выше элементы имеют один и тот же тип int. Не обязательно все элементы списка должны быть одного типа, как показано выше. # Создание списка с разными типам данных B = [3, True, 'Python', 2.0] Этот список содержит int, bool, string и float. Списки в Python изменяемы. Это означает, что после создания списка можно обновить отдельные элементы в списке. Пример: z = [3, 7, 4, 2] # Создание списка z[1] = 10 # Изменяем элемент с индексом 1 на число 10 print(z) [3, 10, 4, 2] Длина списка (количество элементов в нём) определяется с помощью функции len: N = len(z) В таблице один представлены основный методы работы со списками. Таблица 1 – методы списков
1.2 Классы и объекты в PythonПри разработке информационных систем практически всегда требуется обеспечить наличие программных конструкции, соответствующие объектам реального мира (например, счет, контракт, автомобиль – в общем, любой объект из жизни). То есть необходимы конструкции, описывающие и определяющие поведение объекта в той или иной ситуации. Такие идеи легли в основу объектно-ориентированного программирования. Python поддерживает объектно-ориентированную парадигму программирования, а это значит, что мы можем определить компоненты программы в виде классов. Класс является шаблоном или формальным описанием объекта, а объект представляет экземпляр этого класса, его реальное воплощение. Можно провести следующую аналогию: у всех у нас есть некоторое представление о человеке: наличие двух рук, двух ног, головы, пищеварительной, нервной системы, и т.д. Есть некоторый шаблон – этот шаблон можно назвать классом. Реально же существующий человек (фактически экземпляр данного класса) является объектом этого класса. С точки зрения кода класс объединяет набор функций и переменных, которые выполняют определенную задачу. Функции класса называют методами. Они определяют поведение класса. А переменные класса называют атрибутами – они хранят состояние класса. Атрибут может быть статическим и динамическим (уровня объекта класса). Суть в том, что для работы со статическим атрибутом, не требуется создавать экземпляр класса, а для работы с динамическим – нужно Класс состоит из объявления (инструкция class), имени класса и тела класса, которое содержит атрибуты и методы. Определяется он так: class название_класса: методы_класса Для создания объекта класса используется конструктор и применяется следующий синтаксис: название_объекта = название_класса([параметры]) Конструктор – это специальный метод класса, который всегда называется __init__. Первым параметром конструктора всегда является self (ключевое слово ссылается на сам класс). Конструктов может получать значения в виде аргументов, а затем присваивать их соответствующим свойствам объекта, который будет создан. На самом деле, метод __init__ перегружает конструктор класса. Данный метод относится к группе так называемых «магических» методов Python. Такие методы, как правило, вызываются не напрямую, а с помощью встроенных функций или операторов. Например, при выполнении str(obj), выполняется вызов obj.__str__(). Все такие мтеоды начинаются и заканчиваются двойными подчеркиваниями. Приведем список некоторых подобных методов, которые, возможно, потребуются при реализации приложения «Автобусный парк». __new__(cls[, ...]) – управляет созданием экземпляра. В качестве обязательного аргумента принимает класс (не путать с экземпляром). Должен возвращать экземпляр класса для его последующей его передачи методу __init__. __init__(self[, ...]) – как уже было сказано выше, конструктор. __del__(self) – вызывается при удалении объекта сборщиком мусора. __repr__(self) – вызывается встроенной функцией repr; возвращает "сырые" данные, использующиеся для внутреннего представления в python. __str__(self) – вызывается функциями str, print и format. Возвращает строковое представление объекта. __format__(self, format_spec) – используется функцией format (а также методом format у строк). __bool__(self) – вызывается при проверке истинности. Если этот метод не определён, вызывается метод __len__ (объекты, имеющие ненулевую длину, считаются истинными). __len__(self) - длина объекта. __getitem__(self, key) - доступ по индексу (или ключу). __setitem__(self, key, value) - назначение элемента по индексу. __delitem__(self, key) - удаление элемента по индексу. __reversed__(self) - итератор из элементов, следующих в обратном порядке. __contains__(self, item) - проверка на принадлежность элемента контейнеру (item in self). 2 Разработка приложения «Автобусный парк»Разработка приложения «Автобусный парк» будет вестись в среде программирования PyCharm. Приложение будет представлено в виде консольной программы, пользователь будет осуществлять ввод с клавиатуры. Итак, в программе необходимо обеспечить работу с двумя списками автобусов: автобусы в парке и автобусы на маршруты. Определим, как в программе будет описываться автобус. Так как автобус является отдельной и конкретной сущностью, со множеством которых оперирует программа, логичным будет выделить отдельный класс для описания автобуса. Назовем его Bus. Автобус в программе описывается тремя параметрами: номер автобуса; фамилия и инициалы водителя; номер маршрута. Таким образом, в классе Bus необходимо реализовать конструктор для задания значений трем атрибутам объекта. Их описание представлено в таблице 2. Таблица 2 – Описание атрибутов класса, представляющего автобус
Наличие каких либо специфичных методов в классе не требуется. Пожалуй, для удобства можно определить реализацию метода преобразования объекта в строку __str__. Для хранения автобусов будут использоваться стандартные списки Python, описанные в п. 1.1. Будет заведено два списка – автобусы на маршруте и автобусы в парке. Взаимодействуя с программой, пользователь будет выбирать, какой автобус выезжает на маршрут или возвращается в парк, тем самым обеспечивая перемещение объектов-автобусов между списками. Опишем алгоритмы работы программы. Очевидно, что она заключается в выполнение двух основных этапов: начальное заполнение списка автобусов и манипуляции над списками автобусов с выводом их на маршрут и возвращением в парк. Ввод данных об автобусах организуем следующим образом. Завести пустой список bus_park. Ввести с клавиатуры n – количество автобусов. В цикле со счетчиком i = 0..n-1: Ввести номер автобуса num, имя водителя name, номер маршрута id. Создать новый автобус b, вызвав конструктор Bus с введенными параметрами; Добавить автобус b в список bus_park. На рисунке 3 представлена блок-схема процесса ввода данных об автобусах. Рисунок 3 – Алгоритм заполнения списка автобусов Далее необходимо создать пустой список автобусов на маршруте (на данный момент все автобусы в парке) и вести работу с обоими списками. Работу со списками организуем в виде выполнения инструкций циклического текстового меню: пользователь получает список команд, выбирает нужную инструкцию, и программа выполняет соответствующие действия. Меню будет включать следующие команды. Вывести список автобусов в парке. Отправить автобус из парка на маршрут. Отправить автобус с маршрута в парк. Вывести список автобусов на маршруте. Выход (пункт меню под номером 0). После того, как пользователь увидел меню, он вводит номер команды. Номер команды будем хранить в переменной command. В зависимости от введенного значения будут выполнены соответствующие действия. Для вывода списка автобусов реализуем функцию print_buses, получающую на вход список buses и печатающая строковое представление каждого автобуса этого списка. Данная функция будет вызываться при выборе пунктов меню 1 и 4 (с соответствующим список в качестве аргумента). При выборе пункта меню 2 необходимо выбрать автобус из списка автобусов в парке bus_park и поместить его в on_route. Пользователь вводит индекс автобуса в списке, автобус запоминается в переменной b и с помощью операций удаления (remove) и добавления (append) автобус b будет перемещен в список on_route. Аналогично при выборе пункта меню 3 пользователь выбирает индекс автобуса в списке on_route. С помощью операции remove он удаляется оттуда и помещается в список bus_park с помощью операции append. Блок-схема работы меню представлена на рисунке 4. На рисунке 5 представлено продолжение блок-схемы. Рисунок 4 – Алгоритм работы программы Рисунок 5 – Алгоритм работы программы (продолжение) Ниже представлен листинг кода программы. # класс, представляющий автобус class Bus: # конструктор принимаем имя водителя и номер маршрута def __init__(self, bus_id, driver, route_id): self.bus_id = bus_id self.driver = driver self.route_id = route_id # метод для представления автобуса в виде строки def __str__(self): return 'Автобус #' + str(self.bus_id) + 'Маршрут № ' + str(self.route_id) + '. Водитель: ' + self.driver # вывестисписокавтобусов def print_list(buses): for i in range(len(buses)): print(str(i) + '. ' + str(buses[i])) def main(): # формированиеначальногосписка bus_park = [] # списокавтобусоввпарке n = int(input('Введите количество автобусов: ')) for i in range(n): print('\nАвтобус #', i) num = input('Введите номер автобуса: ') name = input('Ввеедите фио водителя: ') id = int(input('Введите номер маршрута: ')) b = Bus(num, name, id) # создаемавтобус bus_park.append(b) # добавляемвпарк on_route = [] # списокавтобусовнамаршруте # работасоспискамичерезменю command = -1 while (command != 0): print('\n1 - Вывести список автобусов в парке') print('2 - Отправить автобус из парка на маршрут') print('3 - Отправить автобус с маршрута в парк') print('4 - Вывести список автобусов на маршруте') print('0 - Выход') command = int(input('\nВведите номер команды: ')) print() if (command == 1): print('Автобусы в парке на данный момент:\n') print_list(bus_park) elif (command == 2): if (len(bus_park) > 0): print_list(bus_park) # выводимсписок idx = int(input('Введите индекс автобуса: ')) while (idx < 0 or idx >= len(bus_park)): idx = int(input('Неверный индекс! Повторите ввод: ')) b = bus_park[idx] # беремавтобусизпарка bus_park.remove(b) # удаляем on_route.append(b) # выводимнамаршрут else: print('В парке не осталось автобусов!') elif (command == 3): if (len(on_route) > 0): print_list(on_route) # выводимсписок idx = int(input('Введите индекс автобуса: ')) while (idx < 0 or idx >= len(on_route)): idx = int(input('Неверный индекс! Повторите ввод: ')) b = on_route[idx] # беремавтобуссмаршрута on_route.remove(b) # удаляем bus_park.append(b) # заводимвпарк else: print('На маршруте нет автобусов!') elif (command == 4): print('Автобусы на маршруте на данный момент:\n') print_list(on_route) elif (command == 0): break else: print('Неверная команда!') if __name__ == '__main__': main() На рисунках 5, 6, 7, 8, 9, 10 представлен пример работы программы. Рисунок 5 – Начальное заполнение списка автобусов Рисунок 6 – Начальное заполнение списка автобусов Рисунок 7 – Список автобусов Рисунок 8 – Отправление автобуса на маршрут Рисунок 9 – Отправление автобуса на маршрут Рисунок 10 – Возвращение автобуса в парк ЗаключениеВ результате выполнения работы было создано приложение «Автобусный парк», отвечающее исходным требованиями задания. В ходе выполнения была изучена динамическая структура данных Python «список». Были рассмотрены аспекты хранения данной структуры в памяти, получены практические навыки программной организации списков и применения методов для работы с ними. Кроме того, были рассмотрены основные аспекты объектно-ориентированного программирования в Python. При разработке программы применялись классы. По итогу выполнения все поставленные на старте работы задачи можно считать выполненными, а цель – достигнутой. Список использованных источниковБертран Мейер. Объектно-ориентированное конструирование программных систем / Б. Мейер. – Москва: Русская редакция, 2015. – 421 с. ГОСТ 7.83-2001. Электронные издания. Основные виды и выходные сведения – Москва: Стандартинформ, 2001. – 1 c. Иванова Г.С. Объектно-ориентированное программирование: учебник для вузов / Иванова Г.С. – Москва: Московский государственный технический университет имени Н. Э. Баумана (МГТУ), 2012 – 384 с. Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма. – Санкт-Петербург: ДМК Пресс: Питер, 2011. – 408 c. Россум Г. Язык программирования Python / Россум Г. – Москва: ЛитПресс, 2017. – 289 с. Шипман Д.Д. Язык программирования Python, Часть 1 / Шипман Д.Д. – Москва: Русская редакция, 2015. – 356 с. Интернет-источник: Python – Basic Operators, общий доступ: https://www.tutorialspoint.com/python/python_basic_operators.htm (дата обращения: 13.05.21); Интернет-источник: Списки в python, общий доступ: https://metanit.com/python/tutorial/7.6.php (дата обращения: 14.05.21). |