Dejo mi código, como en los anteriores no controlaba si no existe, le agregue un apartado en caso de no haber definido la base de conocimiento.
class BaseDeConocimiento:
def __init__(self):
self.hechos = []
self.reglas = []
def agregar_hecho(self, hecho):
self.hechos.append(hecho)
def agregar_regla(self, condicion1, condicion2, conclusion):
self.reglas.append((condicion1, condicion2, conclusion))
class SistemaExperto:
def __init__(self, base):
self.base = base
def inferir(self):
diagnosticos = []
if self.base.reglas == []:
return "No hay reglas en la base de conocimiento"
for condicion1, condicion2, conclusion in self.base.reglas:
if condicion1 in self.base.hechos and condicion2 in self.base.hechos:
if conclusion not in self.base.hechos:
self.base.hechos.append(conclusion)
diagnosticos.append(conclusion)
return diagnosticos
base = BaseDeConocimiento()
base.agregar_hecho("fiebre_alta")
base.agregar_hecho("tos")
base.agregar_hecho("dificultad_respirar")
base.agregar_regla(
"fiebre_alta",
"tos",
"infeccion_respiratoria"
)
base.agregar_regla(
"infeccion_respiratoria",
"dificultad_respirar",
"neumonia"
)
sistema = SistemaExperto(base)
resultado = sistema.inferir()
print("Diagnóstico final:")
for diagnostico in resultado:
print("-", diagnostico)