U8_4
This commit is contained in:
parent
742e3cede9
commit
4e702378a8
@ -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()
|
||||||
Loading…
Reference in New Issue
Block a user