This commit is contained in:
Volodymyr Baliasnikov 2026-11-06 01:00:26 +01:00
parent 742e3cede9
commit 4e702378a8

View File

@ -3,8 +3,9 @@ class Node:
def __init__(self, text: str): def __init__(self, text: str):
self.text = text self.text = text
self.is_question = text.endswith('?') self.is_question = text.endswith('?')
self.left = None # Ссылка на левого потомка (выбор t да) self.left = None # Ссылка на левого потомка (выбор a да)
self.right = None # Ссылка на правого потомка (выбор f нет) self.right = None # Ссылка на правого потомка (выбор n нет)
class ZooExpertSystem: class ZooExpertSystem:
# Класс для управления системой зоопарка # Класс для управления системой зоопарка
@ -21,7 +22,7 @@ class ZooExpertSystem:
# Списки для разделенных строк входа # Списки для разделенных строк входа
self.db_lines = [] # Строки относящиеся к базе знаний (дереву) self.db_lines = [] # Строки относящиеся к базе знаний (дереву)
self.user_choices = ([]) # Строки с ответами пользователя (t или f) self.user_choices = [] # Строки с ответами пользователя (a или n)
def run(self): def run(self):
# контроллер запускает программу в строгом соответствии с жизненным циклом. # контроллер запускает программу в строгом соответствии с жизненным циклом.
@ -61,7 +62,7 @@ class ZooExpertSystem:
if not self.db_lines: if not self.db_lines:
return False return False
# Читаем оставшиеся строки с ответами пользователя (t / f) # Читаем оставшиеся строки с ответами пользователя (a / n)
try: try:
while True: while True:
choice = input().rstrip("\r") choice = input().rstrip("\r")
@ -87,7 +88,7 @@ class ZooExpertSystem:
if node.is_question: if node.is_question:
self.q_count += 1 self.q_count += 1
# Сначала собираем левую ветку (Да / 'a'), затем правую (Нет / 'n') # Сначала собираем левую ветку (да a), затем правую (нет n)
node.left = parse_node() node.left = parse_node()
node.right = parse_node() node.right = parse_node()
@ -107,6 +108,44 @@ class ZooExpertSystem:
return True return True
def _print_stats(self):
# Вывод количества вопросов, ответов и подсказки пользователю
print(f"Pocet otazok: {self.q_count}")
print(f"Pocet odpovedi: {self.a_count}")
print("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.")
def _run_quiz(self):
# Пошаговый спуск по дереву от корня к животному
curr = self.root
choice_idx = 0
while True:
# Выводим текущий вопрос или название животного
print(curr.text)
# Дошли до конечной точки (листа с животным)
if not curr.is_question:
print("Koniec")
return
# Если для дальнейшего вопроса у пользователя не осталось ответа
if choice_idx >= len(self.user_choices):
print("Koniec vstupu")
return
choice = self.user_choices[choice_idx]
choice_idx += 1
if choice == "a":
curr = curr.left
elif choice == "n":
curr = curr.right
else:
# Введен неверный символ (не a и не n)
print("Nerozumiem")
return
if __name__ == "__main__": if __name__ == "__main__":
system = ZooExpertSystem() system = ZooExpertSystem()
system.run() system.run()