53 lines
2.5 KiB
Python
53 lines
2.5 KiB
Python
class Node:
|
||
# класс решений (вопрос или конечный ответ)
|
||
def __init__(self, text: str):
|
||
self.text = text
|
||
self.is_question = text.endswith('?')
|
||
self.left = None # Ссылка на левого потомка (выбор a да)
|
||
self.right = None # Ссылка на правого потомка (выбор n нет)
|
||
|
||
class ZooExpertSystem:
|
||
# Класс для управления системой зоопарка
|
||
# Отвечает за 1чтение данных, 2построение бинарного дерева решений
|
||
# 3валидацию структуры и 4проведение взаимодействия с пользователем
|
||
|
||
def __init__(self):
|
||
# Корень построенного бинарного дерева
|
||
self.root = None
|
||
|
||
# Счетчики элементов всей базы знаний
|
||
self.q_count = 0 # Количество вопросов
|
||
self.a_count = 0 # Количество ответов (животных)
|
||
|
||
# Списки для разделенных строк входа
|
||
self.db_lines = [] # Строки относящиеся к базе знаний (дереву)
|
||
self.user_choices = ([]) # Строки с ответами пользователя (a или n)
|
||
|
||
def run(self):
|
||
# контроллер запускает программу в строгом соответствии с жизненным циклом.
|
||
|
||
print("Expert zo zoo to vie.")
|
||
# Считываем весь поток ввода и разделяем его
|
||
if not self._parse_input(): # _parse_input говорит нам что метод приватый
|
||
print("Chybna databaza")
|
||
return
|
||
|
||
# Строим дерево решений из прочитанных строк
|
||
if not self._build_tree(): # _build_tree создает цыпочку из вопросов которые приводят к ответу да или нет
|
||
print("Chybna databaza")
|
||
return
|
||
|
||
# Выводим информацию о базе знаний
|
||
self._print_stats()
|
||
|
||
# Запускаем интерактивный опрос пользователя
|
||
self._run_quiz()
|
||
|
||
def name():
|
||
lines = []
|
||
text = input().strip("/r")
|
||
while text:
|
||
end_lines = lines.append(text)
|
||
text = input().strip("/r")
|
||
return end_lines
|