Я хочу разработать систему, которая по существу должна будет принимать решения на основе входных данных. На входе будет человек.
class Person:
def __init__(self, name, age, sex, weight, height, nationality):
self.name = name
self.age = age
self.sex = sex
self.weight = weight
self.height = height
self.nationality = nationality
Мы хотим назначить каждого человека в школьный класс на основе определенных правил.
Например:
Женщины из Великобритании в возрасте от 22 до 25 лет должны перейти в класс B. Мужчины старше 75 лет должны перейти в класс A. Женщины выше 6 футов должны перейти в класс C.
У нас будет примерно 400 различных правил и нужно применить первое правило, которое встретится — нам нужно сохранить порядок правил.
Я думаю о том, как хранить/представлять правила здесь. Очевидно, вы могли бы просто иметь очень длинный оператор if, elif, elif
, но это неэффективно. Другой вариант — хранить правила в базе данных и, возможно, иметь таблицу в памяти.
Я хотел бы иметь возможность редактировать правила без релиза — возможно, с внешним интерфейсом, позволяющим нетехническим людям добавлять, удалять и изменять порядок правил.
Здесь все на столе — единственное определенное требование — на самом деле языком программирования должен быть Python.
Добавлено для дальнейшего контекста
Я полагаю, мой вопрос заключается в том, как хранить правила. На данный момент это один огромный длинный оператор if elif elif
, поэтому каждый раз, когда в бизнес-логике происходит изменение, PM вводит новые правила, а затем я преобразовываю их в оператор if.
Все входные данные в систему будут отправлены через один и тот же список правил, и будет применено первое подходящее правило. К каждому входу может применяться несколько правил, но всегда применяется первое.
e.g.
Женщины старше 25 лет переходят в класс B
Женщины переходят в класс A.
Любые женщины старше 25 лет будут отправлены в класс B, хотя второе правило также применяется.
Ввод всегда будет содержать один и тот же формат ввода - еще не решено, где это будет объект или словарь, но некоторые значения могут быть None
. Некоторые лица могут не иметь веса, связанного с ними.
sex == "male" and age > 75 -> A
. Затем запись может быть разделена на->
. Первая часть переходит в Pythoneval()
(с соответствующим словарем пространства имен), и если она возвращаетTrue
, класс берется из второй части. - person Michael Butscher   schedule 22.11.2018sex == 'f' and age >= 22 and age <= 25
. - person John Gordon   schedule 22.11.2018if x or y, but not z or q, then p
- person user7692855   schedule 22.11.2018Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer
-› Тем не менее, я получил очень хороший ответ, так что на него можно ответить. Я получил блестящий ответ от noxdafox, а затем отложил его, чтобы никто другой не мог поделиться своим мнением. Очень расстраивает, что его закрыли сразу после получения блестящей информации. - person user7692855   schedule 24.11.2018