Реализовать конечный автомат Мили в виде класса. Начальным состоянием автомата является A. Методы возвращают числовые значения. На python

Пример 1

Пример 2

Реализовать конечный автомат Мили в виде класса. Начальным состоянием автомата является A. Методы возвращают числовые значения.

Если вызываемый метод не реализован для некоторого состояния, необходимо вызвать пользовательское исключение MealyError. При возникновении исключения должно передаваться имя метода, вызвавшего это исключение.

Реализовать в отдельной функции test автоматическое тестирование автомата Мили на основе покрытия ветвей. Требуемая степень покрытия: 100%. В примерах ниже функция main возвращает объект созданного класса. Далее последовательно вызываются методы полученного объекта.

class MealyError(Exception):
    pass

class Mealy(object):
    def __init__(self):
        self.currentState = 'A'
    def play(self):
        if self.currentState == 'A':
            self.currentState = 'D'
            return 1
        if self.currentState == 'C':
            self.currentState = 'D'
            return 3
        if self.currentState == 'E':
            self.currentState = 'C'
            return 6
        if self.currentState == 'F':
            self.currentState = 'A'
            return 7
        raise MealyError("play")
    def draw(self):
        if self.currentState == 'A':
            self.currentState = 'B'
            return 0
        if self.currentState == 'B':
            self.currentState = 'C'
            return 2
        if self.currentState == 'D':
            self.currentState = 'E'
            return 4
        if self.currentState == 'E':
            self.currentState = 'F'
            return 5
        if self.currentState == 'F':
            self.currentState = 'C'
            return 8
        raise MealyError("draw")

def main():
    return Mealy()


def raises(method, error):
    output = None
    try:
        output = method()
    except Exception as e:
        assert type(e) == error
    assert output is None


def test():
    o = main()
    assert o.play() == 1
    assert o.draw() == 4
    assert o.draw() == 5
    assert o.play() == 7
    o = main()
    assert o.draw() == 0
    assert o.draw() == 2
    assert o.play() == 3
    assert o.draw() == 4
    assert o.play() == 6
    o = main()
    assert o.draw() == 0
    assert o.draw() == 2
    assert o.play() == 3
    assert o.draw() == 4
    assert o.draw() == 5
    assert o.draw() == 8
    raises(lambda: o.draw(), MealyError)
    raises(lambda: o.play(), MealyError)

Ответы (0 шт):