
лаба1 ООП
.docxМИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
КАФЕДРА САПР
Практическая работа № 1
по дисциплине
«Объектно-ориентированное программирование»
Студентки гр. 3352 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2024
Задание
Написать корректно работающую программу, которая считывает из консоли поисковый запрос пользователя, и выводит результат поиска по Википедии в браузере после выборфа нужной статьи. Без готовых библиотек для работы с Википедией.
Спецификация программы
Описание реализованных классов:
WikipediaAPI
Этот класс отвечает за взаимодействие с API Википедии.
Методы:
__init__(): Инициализирует базовый URL для API.
get_search_results(query): Принимает строку запроса и возвращает результаты поиска в формате JSON.
Article
Этот класс представляет отдельную статью Википедии.
Методы:
__init__(title, link): Инициализирует объект статьи с заголовком и ссылкой.
open(): Открывает ссылку на статью в веб-браузере.
SearchResults
Этот класс обрабатывает результаты поиска и управляет списком статей.
Методы:
__init__(results): Инициализирует объект с результатами поиска, извлекая заголовки и ссылки.
display(): Отображает список статей и предлагает пользователю выбрать одну из них.
WikipediaSearcher
Этот класс управляет основным процессом поиска и взаимодействием с пользователем.
Методы:
__init__(): Инициализирует объект WikipediaAPI.
run(): Запускает цикл, который принимает запросы от пользователя и обрабатывает результаты поиска.
Рисунок 1 - UML-диаграмма классов.
Описание интерфейса пользователя программы
После запуска программы пользователю предлагается ввести запрос, после чего программа выведет в консоль возможные варианты поиска. Каждый вариант пронумерован (рисунок 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. Выводы
В ходе выполнения практической работы была получена программа
способная открывать страницы на Википедии по запросу пользователя,
учитывающая ошибки соединения и некорректного ввода.