Главная страница
Навигация по странице:

  • Автобус

  • Тестовые вопросы по теме «Цепные передачи». 1 Элементы языка программирования Python, необходимые для разработки программы Автобусный парк 6


    Скачать 426.02 Kb.
    Название1 Элементы языка программирования Python, необходимые для разработки программы Автобусный парк 6
    АнкорТестовые вопросы по теме «Цепные передачи»
    Дата22.02.2022
    Размер426.02 Kb.
    Формат файлаdocx
    Имя файла_8345892.docx
    ТипРеферат
    #369935

    Содержание




    Введение 4

    1 Элементы языка программирования Python, необходимые для разработки программы «Автобусный парк» 6

    1.1Списки в Python 6

    1.2 Классы и объекты в Python 9

    2 Разработка приложения «Автобусный парк» 12

    Заключение 20

    Список использованных источников 21



    Введение


    На сегодняшний день применение информационных технологий осуществляется практические в любой сфере жизни общества. Рабочие процессы модернизируются, легче и более четко контролируются и регулируются благодаря внедрению на предприятиях и в учреждениях информационных систем. С помощью программных конструкций описываются объекты реального мира, выполняемые процессы находят свое отражение в виде программных манипуляций с данными. Таким образом, применение информационных технологий ускоряет работу, способствуют развитие и прогрессу. То же самое касается и сферы транспортных услуг.

    В ходе данной курсовой работы предстоит разработать приложение, которое моделировало бы работу автобусного парка по выезду автобусов на маршрут и их возвращению в парк. Таким образом, цель курсовой работы – разработать на языке программирования Python программу «Автобусный парк».

    Объект исследования – процесс разработки программ на языке программирования Python.

    Предмет исследования – структуры данных для хранения множества объектов, реализация алгоритмов на языке Python.

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

    1. Проанализировать исходную задачу, выделить необходимые для реализации программы аспекты для изучения;

    2. Изучить и проанализировать техническую литературу, мировые информационные ресурсы по исследуемой проблеме.

    3. Систематизировать теоретический материал по соответствующим структурам данных.

    4. Рассмотреть подходы к работе с соответствующими структурами данных в языке программирования Python и, в соответствии с ними, спроектировать необходимые алгоритмы.

    5) Разработать программу «Автобусный парк».

    Для решения поставленных задач были выбраны следующие методы исследования: систематизация специальной литературы и мировых информационных ресурсов по проблеме исследования.

    1 Элементы языка программирования Python, необходимые для разработки программы «Автобусный парк»




    Согласно заданию, требуется составить программу, которая содержит динамическую информацию о наличии автобусов в автобусном парке. Для хранения автобусов в программе используются два списка – автобусы на маршруте и автобусы в парке. Автобусы добавляются и исключаются из обоих списков.

    Рассмотрим существующие в Python возможности, позволяющие реализовать необходимые операции.

      1. Списки в 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 – методы списков

    Метод

    Что делает

    A.append(x)

    Добавляет элемент x в конец списка

    A.insert(i,x)

    Вставляет после i-го элемента значение x

    A.remove(x)

    Удаляет первый элемент в списке, имеющий значение x

    A.pop(i)

    Удаляет i–й элемент в списке и возвращает его. Если индекс не указан, удаляет последний элемент

    A.index(x)

    Возвращает индекс первого элемента x

    A.count(x)

    Возвращает количество элементов со значением x

    A.sort(x)

    Сортирует список

    A.reverse()

    Разворачивает список

    A.clear()

    Очищает список


    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 – Описание атрибутов класса, представляющего автобус

    Название

    Тип

    Описание

    bus_id

    строка

    номер автобуса

    driver

    строка

    фио водителя

    route_id

    целый

    номер маршрута


    Наличие каких либо специфичных методов в классе не требуется. Пожалуй, для удобства можно определить реализацию метода преобразования объекта в строку __str__.

    Для хранения автобусов будут использоваться стандартные списки Python, описанные в п. 1.1. Будет заведено два списка – автобусы на маршруте и автобусы в парке. Взаимодействуя с программой, пользователь будет выбирать, какой автобус выезжает на маршрут или возвращается в парк, тем самым обеспечивая перемещение объектов-автобусов между списками.

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

    Ввод данных об автобусах организуем следующим образом.

    1. Завести пустой список bus_park.

    2. Ввести с клавиатуры n – количество автобусов.

    3. В цикле со счетчиком i = 0..n-1:

      1. Ввести номер автобуса num, имя водителя name, номер маршрута id.

      2. Создать новый автобус b, вызвав конструктор Bus с введенными параметрами;

      3. Добавить автобус b в список bus_park.

    На рисунке 3 представлена блок-схема процесса ввода данных об автобусах.



    Рисунок 3 – Алгоритм заполнения списка автобусов

    Далее необходимо создать пустой список автобусов на маршруте (на данный момент все автобусы в парке) и вести работу с обоими списками. Работу со списками организуем в виде выполнения инструкций циклического текстового меню: пользователь получает список команд, выбирает нужную инструкцию, и программа выполняет соответствующие действия. Меню будет включать следующие команды.

    1. Вывести список автобусов в парке.

    2. Отправить автобус из парка на маршрут.

    3. Отправить автобус с маршрута в парк.

    4. Вывести список автобусов на маршруте.

    5. Выход (пункт меню под номером 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. При разработке программы применялись классы.

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

    Список использованных источников




    1. Бертран Мейер. Объектно-ориентированное конструирование программных систем / Б. Мейер. – Москва: Русская редакция, 2015. – 421 с.

    2. ГОСТ 7.83-2001. Электронные издания. Основные виды и выходные сведения – Москва: Стандартинформ, 2001. – 1 c.

    3. Иванова Г.С. Объектно-ориентированное программирование: учебник для вузов / Иванова Г.С. – Москва: Московский государственный технический университет имени Н. Э. Баумана (МГТУ), 2012 – 384 с.

    4. Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма. – Санкт-Петербург: ДМК Пресс: Питер, 2011. – 408 c.

    5. Россум Г. Язык программирования Python / Россум Г. – Москва: ЛитПресс, 2017. – 289 с.

    6. Шипман Д.Д. Язык программирования Python, Часть 1 / Шипман Д.Д. – Москва: Русская редакция, 2015. – 356 с.

    7. Интернет-источник: Python – Basic Operators, общий доступ: https://www.tutorialspoint.com/python/python_basic_operators.htm (дата обращения: 13.05.21);

    8. Интернет-источник: Списки в python, общий доступ: https://metanit.com/python/tutorial/7.6.php (дата обращения: 14.05.21).




    написать администратору сайта