Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лаба1 ООП

.docx
Скачиваний:
0
Добавлен:
08.07.2025
Размер:
422.41 Кб
Скачать

МИНОБРНАУКИ РОССИИ

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

КАФЕДРА САПР

Практическая работа № 1

по дисциплине

«Объектно-ориентированное программирование»

 

Студентки гр. 3352

Преподаватель

Санкт-Петербург

2024

  1. Задание

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

  1. Спецификация программы

Описание реализованных классов:

  1. WikipediaAPI

Этот класс отвечает за взаимодействие с API Википедии.

Методы:

  1. __init__(): Инициализирует базовый URL для API.

  2. get_search_results(query): Принимает строку запроса и возвращает результаты поиска в формате JSON.

  1. Article

Этот класс представляет отдельную статью Википедии.

Методы:

  1. __init__(title, link): Инициализирует объект статьи с заголовком и ссылкой.

  2. open(): Открывает ссылку на статью в веб-браузере.

  1. SearchResults

Этот класс обрабатывает результаты поиска и управляет списком статей.

Методы:

  1. __init__(results): Инициализирует объект с результатами поиска, извлекая заголовки и ссылки.

  2. display(): Отображает список статей и предлагает пользователю выбрать одну из них.

  1. WikipediaSearcher

Этот класс управляет основным процессом поиска и взаимодействием с пользователем.

Методы:

  1. __init__(): Инициализирует объект WikipediaAPI.

  2. run(): Запускает цикл, который принимает запросы от пользователя и обрабатывает результаты поиска.

Рисунок 1 - UML-диаграмма классов.

  1. Описание интерфейса пользователя программы

После запуска программы пользователю предлагается ввести запрос, после чего программа выведет в консоль возможные варианты поиска. Каждый вариант пронумерован (рисунок 2). Пользователю требуется ввести цифру запроса, который наиболее удовлетворяет желаемому.

Рисунок 2 – список результатов поиска

После ввода цифры программа открывает результат поиска в Википедии браузера (рисунок 3).

Рисунок 3 – результат поиска по запросу «кошки» - «кошки в древнем Египте»

Далее программа через консоль позволяет пользователю выбрать другую цифру запроса или вернуться в начало для того, чтобы задать новый (рисунок 4).

Рисунок 4 – выход из предыдущих результатов запроса

При некорректно введенных данных программа предупредит, что по заданному запросу ничего не найдено и предложит выйти обратно к новому запросу, чтобы повторить его или закончить работу (рисунок 5).

Рисунок 5 – некорректно введенные данные запроса

Еще один вариант некорректно введенных данных – ввод цифры, отличающейся от возможно предложенных. В этом случае так же выведется сообщение об ошибке и предложение ввести корректные данные (рисунок 6).

Рисунок 6 – ввод некорректных данных вместо цифры

Для завершения работы требуется вывести -1. Тогда в консоли появится сообщение о конце действий (рисунок 7).

Рисунок 7 – завершение работы

4. Текст программы

import requests

class WikipediaAPI:

def __init__(self):

self.base_url = "https://ru.wikipedia.org/w/api.php"

def get_search_results(self, query):

params = {

'action': 'opensearch',

'search': query,

'limit': 10,

'namespace': 0,

'format': 'json'

}

response = requests.get(self.base_url, params=params)

return response.json()

class Article:

def __init__(self, title, link):

self.title = title

self.link = link

def open(self):

import webbrowser

webbrowser.open(self.link)

class SearchResults:

def __init__(self, results):

self.titles = results[1]

self.links = results[3]

self.articles = [Article(title, link) for title, link in zip(self.titles, self.links)]

def display(self):

if not self.titles:

print("Результаты не найдены. Введите -2, чтобы сделать новый запрос")

return

for index, article in enumerate(self.articles, start=1):

print(f"{index}: {article.title}")

print("Укажите номер статьи (или введите -2 для другого запроса)")

class WikipediaSearcher:

def __init__(self):

self.api = WikipediaAPI()

def run(self):

while True:

user_input = input("Введите ваш запрос (или введите -1 для окончания работы): ")

if user_input == "-1":

print("Работа закончена.")

break

results = self.api.get_search_results(user_input)

search_results = SearchResults(results)

while True:

search_results.display()

choice = input("Ваш выбор: ")

if choice == "-2":

break

elif choice.isdigit():

index = int(choice) - 1

if 0 <= index < len(search_results.articles):

print(f"Opening {search_results.articles[index].title} ...")

search_results.articles[index].open()

else:

print("Некорректный ввод.")

else:

print("Неправильный номер. Пожалуйста, введите правильный номер.")

if __name__ == "__main__":

searcher = WikipediaSearcher()

searcher.run()

5. Выводы

В ходе выполнения практической работы была получена программа

способная открывать страницы на Википедии по запросу пользователя,

учитывающая ошибки соединения и некорректного ввода.