Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает число совершенных переходов между парой
состояний-аргументов.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.edit() # 'unknown'
obj.h(0) # None
obj.get_step() # 0
obj.send() # 'unsupported'
obj.seen_edge('F4', 'F2') # 0
obj.paste() # 'f3'
obj.tag() # 'f0'
obj.paste() # 'f4'
obj.cue() # 'f0'
obj.send() # 'f0'
obj.paste() # 'f2'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод store_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.store_var('e', 0) # None
obj.select_play() # None
obj.get_output() # 'u2'
obj.select_spawn() # None
obj.get_output() # 'u3'
obj.has_path_to('c3') # True
obj.part_of_loop() # True
obj.select_start() # None
obj.has_max_in_edges() # False
obj.get_output() # 'u4'
obj.part_of_loop() # True
obj.select_jog() # None
obj.get_output() # 'u4'
obj.has_max_in_edges() # False
obj.select_start() # None
obj.get_output() # 'u4'
obj.select_print() # None
obj.has_max_in_edges() # False
obj.get_output() # 'u1'
obj.has_max_in_edges() # False
obj.has_path_to('c5') # False
obj.part_of_loop() # False
obj.select_align() # 'unknown'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать метод store_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_max_out_edges() # False
obj.store_var('v', 1) # None
obj.color() # None
obj.seen_state('X7') # False
obj.get_output() # 'y1'
obj.file() # 'unknown'
obj.scrub() # None
obj.get_output() # 'y0'
obj.seen_state('X4') # False
obj.warp() # None
obj.get_output() # 'y0'
obj.put() # None
obj.get_output() # 'y0'
obj.scrub() # None
obj.seen_state('X6') # True
obj.get_output() # 'y0'
obj.skip() # None
obj.seen_state('X6') # True
obj.get_output() # 'y1'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод let_var(имя, значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.let_var('t', 0) # None
obj.has_max_in_edges() # False
obj.run_chat() # 'unknown'
obj.let_var('r', 1) # None
obj.has_path_to('W4') # True
obj.has_max_in_edges() # False
obj.run_skew() # 'unknown'
obj.run_make() # 'X2'
obj.has_path_to('W3') # True
obj.run_make() # 'X2'
obj.let_var('r', 0) # None
obj.run_pull() # 'X2'
obj.run_make() # 'X0'
obj.run_make() # 'X1'
obj.has_max_in_edges() # True
obj.run_tweak() # 'X0'
obj.run_smash() # 'unknown'
obj.run_make() # 'X2'
obj.run_build() # 'X1'
obj.run_make() # 'X1'
obj.has_max_in_edges() # True
obj.run_tweak() # 'X0'
obj.seen_state('W0') # True
obj.has_path_to('W3') # False
obj.run_rev() # 'unknown'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод set_var(имя, значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.set_var('n', 1) # None
obj.set_var('x', 1) # None
obj.set_var('d', 1) # None
obj.select_cull() # 'unknown'
obj.select_hoard() # 'e0'
obj.set_var('n', 0) # None
obj.select_scan() # 'unknown'
obj.select_hoard() # 'e1'
obj.select_etch() # 'e1'
obj.select_skew() # 'unknown'
obj.seen_state('a2') # 0
obj.select_sit() # 'e0'
obj.has_max_in_edges() # True
obj.select_trash() # 'e0'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать обработку ошибок с помощью пользовательского класса
исключения FSMError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.go('melt') # FSMError: 'unsupported'
obj.has_path_to('v5') # True
obj.g(1) # None
obj.y(1) # None
obj.p(1) # None
obj.go('pluck') # 'b2'
obj.has_max_out_edges() # True
obj.go('leer') # 'b3'
obj.p(0) # None
obj.has_path_to('v5') # True
obj.go('melt') # FSMError: 'unsupported'
obj.go('leer') # 'b2'
obj.go('tag') # FSMError: 'unknown'
obj.go('melt') # 'b1'
obj.go('tread') # FSMError: 'unknown'
obj.g(1) # None
obj.has_path_to('v1') # True
obj.go('leer') # 'b1'
obj.go('copy') # 'b0'
obj.y(0) # None
obj.go('leer') # 'b1'
obj.has_path_to('v6') # True
obj.go('copy') # 'b0'
obj.go('melt') # 'b1'
obj.go('leer') # 'b1'
obj.go('share') # FSMError: 'unsupported'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод set_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.set_y(1) # None
obj.run('pull') # 'unknown'
obj.set_z(0) # None
obj.run('stop') # None
obj.run('order') # 'unknown'
obj.set_z(1) # None
obj.has_max_in_edges() # True
obj.run('dash') # 'unsupported'
obj.get_output() # 'P5'
obj.seen_state('H3') # 0
obj.run('rock') # None
obj.get_output() # 'P0'
obj.seen_edge('H3', 'H4') # False
obj.run('dash') # 'unsupported'
obj.run('rock') # None
obj.get_output() # 'P5'
obj.run('sit') # None
obj.has_max_in_edges() # True
obj.get_output() # 'P1'
obj.run('scrub') # None
obj.get_output() # 'P3'
obj.run('check') # 'unknown'
obj.run('stop') # None
obj.get_output() # 'P3'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод let_var(имя, значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.let_var('s', 0) # None
obj.let_var('m', 0) # None
obj.go('stand') # None
obj.get_output() # 'K1'
obj.go('carve') # None
obj.has_max_in_edges() # False
obj.get_output() # 'K1'
obj.seen_state('r0') # 0
obj.go('mass') # None
obj.get_output() # 'K0'
obj.seen_state('r3') # 1
obj.go('stand') # None
obj.go('sway') # 'unknown'
obj.get_output() # 'K0'
obj.go('carve') # None
obj.seen_state('r5') # 0
obj.let_var('s', 0) # None
obj.go('base') # 'unknown'
obj.get_output() # 'K0'
obj.seen_state('r1') # 1
obj.go('stand') # None
obj.get_output() # 'K0'
obj.go('carve') # None
obj.get_output() # 'K0'
obj.seen_state('r5') # 0
obj.go('crawl') # None
obj.get_output() # 'K1'
obj.go('base') # 'unknown'
obj.go('stand') # None
obj.seen_state('r4') # 2
obj.go('sway') # 'unknown'
obj.has_max_in_edges() # False
obj.get_output() # 'K1'
obj.go('order') # 'unknown'
obj.go('mass') # None
obj.get_output() # 'K0'
obj.go('sway') # 'unknown'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.q(1) # None
obj.d(0) # None
obj.has_path_to('p1') # True
obj.run('pan') # None
obj.get_output() # 'r2'
obj.seen_method('rock') # False
obj.run('amble') # None
obj.get_output() # 'r3'
obj.has_max_out_edges() # False
obj.run('rock') # None
obj.get_output() # 'r1'
obj.run('skew') # StateMachineException: 'unknown'
obj.has_path_to('p5') # True
obj.has_max_out_edges() # True
obj.run('group') # None
obj.get_output() # 'r2'
obj.run('pan') # StateMachineException: 'unsupported'
obj.run('shift') # None
obj.get_output() # 'r3'
obj.has_path_to('p4') # True
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.seen_state('v2') # 0
obj.run('etch') # None
obj.get_output() # 'j2'
obj.run('begin') # None
obj.get_output() # 'j0'
obj.run('log') # None
obj.get_output() # 'j0'
obj.run('sort') # StateMachineException: 'unsupported'
obj.run('etch') # None
obj.run('shift') # StateMachineException: 'unknown'
obj.get_output() # 'j1'
obj.run('sort') # None
obj.get_output() # 'j3'
obj.part_of_loop() # True
obj.run('etch') # None
obj.get_output() # 'j2'
obj.run('begin') # None
obj.get_output() # 'j0'
obj.run('log') # None
obj.seen_state('v4') # 1
obj.run('log') # StateMachineException: 'unsupported'
obj.get_output() # 'j0'
obj.run('etch') # None
obj.get_output() # 'j1'
obj.run('sort') # None
obj.run('shift') # StateMachineException: 'unknown'
obj.get_output() # 'j3'
obj.part_of_loop() # True
obj.seen_state('v0') # 2
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод assign_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает число совершенных переходов между парой
состояний-аргументов.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.part_of_loop() # True
obj.assign_k(0) # None
obj.assign_s(0) # None
obj.part_of_loop() # True
obj.pull() # None
obj.get_output() # 'e1'
obj.chip() # None
obj.assign_s(0) # None
obj.get_output() # 'e3'
obj.has_max_out_edges() # True
obj.seen_edge('p4', 'p2') # 0
obj.slip() # None
obj.seen_edge('p4', 'p2') # 0
obj.roam() # 'unknown'
obj.get_output() # 'e1'
obj.seen_edge('p2', 'p0') # 0
obj.chalk() # None
obj.get_output() # 'e4'
obj.shift() # 'unknown'
obj.part_of_loop() # True
obj.melt() # None
obj.get_output() # 'e1'
obj.model() # 'unknown'
obj.has_max_out_edges() # True
obj.part_of_loop() # True
obj.seen_edge('p4', 'p2') # 1
obj.chip() # None
obj.assign_s(1) # None
obj.has_max_out_edges() # True
obj.get_output() # 'e3'
obj.seen_edge('p2', 'p5') # 2
obj.has_max_out_edges() # True
obj.chalk() # 'unsupported'
obj.slip() # None
obj.get_output() # 'e1'
obj.part_of_loop() # True
obj.chalk() # None
obj.get_output() # 'e4'
obj.part_of_loop() # True
obj.clone() # 'unknown'
obj.melt() # None
obj.get_output() # 'e1'
obj.seen_edge('p0', 'p4') # 2
obj.roam() # 'unknown'
obj.part_of_loop() # True
obj.has_max_out_edges() # True
obj.chip() # None
obj.amble() # 'unknown'
obj.part_of_loop() # True
obj.make() # 'unknown'
obj.seen_edge('p4', 'p2') # 2
obj.get_output() # 'e1'
obj.has_max_out_edges() # False
obj.seen_edge('p1', 'p0') # 0
obj.part_of_loop() # True
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод set_var(имя, значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.set_var('v', 0) # None
obj.seen_method('chip') # False
obj.chat() # StateMachineException: 'unknown'
obj.seen_state('C0') # 0
obj.click() # 'w0'
obj.draw() # 'w1'
obj.stall() # 'w1'
obj.draw() # StateMachineException: 'unsupported'
obj.tail() # 'w0'
obj.click() # 'w0'
obj.has_path_to('C3') # True
obj.draw() # 'w0'
obj.seen_state('C1') # 0
obj.seen_method('tail') # True
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать обработку ошибок с помощью пользовательского класса
исключения MachineError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать метод let_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.let_g(1) # None
obj.let_r(0) # None
obj.let_t(1) # None
obj.select('sit') # MachineError: 'unknown'
obj.select('skew') # 'R1'
obj.select('leer') # 'R0'
obj.select('roam') # MachineError: 'unknown'
obj.select('skew') # 'R3'
obj.has_path_to('k4') # True
obj.select('debug') # 'R2'
obj.has_max_out_edges() # True
obj.has_max_in_edges() # True
obj.select('skew') # 'R3'
obj.select('clone') # 'R2'
obj.select('scrub') # MachineError: 'unknown'
obj.has_path_to('k6') # False
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать метод set_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.set_p(0) # None
obj.has_path_to('Q7') # True
obj.walk() # None
obj.get_output() # 'M0'
obj.scan() # StateMachineException: 'unknown'
obj.jump() # None
obj.exit() # StateMachineException: 'unsupported'
obj.get_output() # 'M1'
obj.clear() # None
obj.get_output() # 'M0'
obj.has_path_to('Q4') # True
obj.walk() # None
obj.get_output() # 'M0'
obj.walk() # None
obj.get_output() # 'M1'
obj.jump() # None
obj.has_path_to('Q4') # True
obj.get_output() # 'M1'
obj.walk() # None
obj.pluck() # StateMachineException: 'unknown'
obj.part_of_loop() # True
obj.fork() # StateMachineException: 'unknown'
obj.get_output() # 'M0'
obj.pluck() # StateMachineException: 'unknown'
obj.has_path_to('Q1') # True
obj.exit() # StateMachineException: 'unsupported'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод assign_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.seen_state('h0') # 0
obj.go('chip') # 'unknown'
obj.assign_x(0) # None
obj.assign_c(0) # None
obj.assign_w(1) # None
obj.go('sweep') # 'J0'
obj.assign_w(0) # None
obj.go('throw') # 'unknown'
obj.has_max_out_edges() # False
obj.go('etch') # 'J2'
obj.go('mass') # 'J3'
obj.go('dash') # 'J3'
obj.go('sweep') # 'J2'
obj.go('warp') # 'unknown'
obj.go('turn') # 'J3'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок с помощью пользовательского класса
исключения FSMException
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод let_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.get_step() # 0
obj.let_y(0) # None
obj.tweak() # 'M4'
obj.get_step() # 1
obj.post() # 'M4'
obj.roam() # FSMException: 'unknown'
obj.post() # 'M4'
obj.scale() # 'M1'
obj.tweak() # 'M1'
obj.has_max_in_edges() # False
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.y(1) # None
obj.g(1) # None
obj.move('add') # None
obj.get_output() # 'K3'
obj.seen_method('unite') # False
obj.move('add') # None
obj.get_output() # 'K4'
obj.move('punch') # 'unknown'
obj.move('step') # None
obj.get_output() # 'K0'
obj.move('chip') # None
obj.get_output() # 'K3'
obj.move('add') # None
obj.get_output() # 'K1'
obj.has_max_in_edges() # True
obj.seen_method('chip') # True
obj.get_step() # 5
obj.move('unite') # None
obj.get_output() # 'K4'
obj.move('chip') # None
obj.get_output() # 'K3'
obj.move('unite') # None
obj.get_output() # 'K4'
obj.move('init') # 'unknown'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.stash() # None
obj.get_output() # 'e2'
obj.has_path_to('C5') # True
obj.visit() # None
obj.rev() # 'unknown'
obj.get_output() # 'e3'
obj.has_path_to('C4') # True
obj.has_max_out_edges() # False
obj.base() # None
obj.get_output() # 'e1'
obj.has_max_out_edges() # True
obj.init() # None
obj.get_output() # 'e0'
obj.visit() # None
obj.get_output() # 'e1'
obj.has_path_to('C3') # False
obj.has_max_out_edges() # False
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать обработку ошибок с помощью пользовательского класса
исключения FSMError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод set_var(имя, значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.seen_method('rig') # False
obj.go_spin() # FSMError: 'unknown'
obj.set_var('y', 0) # None
obj.go_fade() # FSMError: 'unknown'
obj.seen_state('s3') # False
obj.go_rig() # FSMError: 'unsupported'
obj.set_var('c', 1) # None
obj.go_chip() # FSMError: 'unknown'
obj.set_var('v', 1) # None
obj.go_reset() # FSMError: 'unknown'
obj.go_push() # None
obj.go_join() # FSMError: 'unknown'
obj.has_max_out_edges() # True
obj.set_var('v', 0) # None
obj.get_output() # 'y0'
obj.has_max_out_edges() # True
obj.go_flip() # None
obj.seen_method('push') # True
obj.get_output() # 'y0'
obj.seen_state('s0') # True
obj.go_flip() # None
obj.has_max_out_edges() # False
obj.go_rig() # FSMError: 'unsupported'
obj.get_output() # 'y0'
obj.seen_state('s7') # True
obj.seen_method('rig') # False
obj.go_tail() # FSMError: 'unknown'
obj.go_flip() # None
obj.get_output() # 'y3'
obj.go_push() # None
obj.go_join() # FSMError: 'unknown'
obj.get_output() # 'y2'
obj.go_mix() # None
obj.go_fade() # FSMError: 'unknown'
obj.get_output() # 'y2'
obj.go_push() # None
obj.get_output() # 'y2'
obj.seen_state('s6') # True
obj.seen_method('flip') # True
obj.go_mix() # None
obj.get_output() # 'y3'
obj.go_reset() # FSMError: 'unknown'
obj.seen_state('s7') # True
obj.seen_method('rig') # False
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineError
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает число успешных выполнений
аргумента-метода.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.seen_state('A2') # 1
obj.merge() # StateMachineError: 'unknown'
obj.crawl() # None
obj.has_path_to('A1') # True
obj.seen_method('cull') # 0
obj.get_output() # 'r0'
obj.seen_state('A7') # 1
obj.has_path_to('A7') # False
obj.crawl() # None
obj.seen_method('cull') # 0
obj.get_output() # 'r1'
obj.link() # StateMachineError: 'unknown'
obj.seen_method('tail') # 0
obj.slur() # StateMachineError: 'unknown'
obj.cull() # None
obj.crawl() # StateMachineError: 'unsupported'
obj.has_path_to('A3') # True
obj.get_output() # 'r1'
obj.dash() # None
obj.get_output() # 'r0'
obj.cull() # StateMachineError: 'unsupported'
obj.seen_method('cull') # 1
obj.snap() # StateMachineError: 'unknown'
obj.stay() # None
obj.get_output() # 'r1'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод store_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает число успешных выполнений
аргумента-метода.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.store_var('y', 0) # None
obj.move_march() # 'g2'
obj.seen_method('patch') # 0
obj.move_walk() # 'g3'
obj.seen_state('D6') # 0
obj.move_exit() # 'unknown'
obj.get_step() # 2
obj.move_patch() # 'g3'
obj.move_patch() # 'unsupported'
obj.move_herd() # 'g1'
obj.move_herd() # 'g3'
obj.move_walk() # 'unsupported'
obj.seen_state('D1') # 1
obj.seen_method('herd') # 2
obj.move_march() # 'g2'
obj.move_sweep() # 'unknown'
obj.get_step() # 6
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает число успешных выполнений
аргумента-метода.
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод assign_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineError
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.part_of_loop() # False
obj.assign_var('g', 1) # None
obj.seen_method('glare') # 0
obj.assign_var('d', 0) # None
obj.get_step() # 0
obj.assign_var('u', 1) # None
obj.run('pan') # StateMachineError: 'unknown'
obj.get_step() # 0
obj.run('stare') # 'G1'
obj.part_of_loop() # False
obj.run('lower') # 'G1'
obj.run('glare') # 'G1'
obj.assign_var('u', 2) # None
obj.part_of_loop() # True
obj.run('glare') # 'G1'
obj.run('stare') # 'G1'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод let_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок с помощью пользовательского класса
исключения FSMError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.let_d(0) # None
obj.go('apply') # FSMError: 'unknown'
obj.go('split') # None
obj.part_of_loop() # False
obj.go('lower') # FSMError: 'unsupported'
obj.get_output() # 'f0'
obj.go('file') # FSMError: 'unsupported'
obj.has_max_in_edges() # False
obj.part_of_loop() # False
obj.go('mute') # None
obj.seen_edge('D4', 'D0') # False
obj.go('open') # FSMError: 'unknown'
obj.get_output() # 'f1'
obj.go('begin') # None
obj.go('speed') # FSMError: 'unknown'
obj.seen_edge('D7', 'D0') # False
obj.get_output() # 'f1'
obj.seen_edge('D6', 'D1') # False
obj.go('rev') # FSMError: 'unknown'
obj.part_of_loop() # False
obj.seen_edge('D4', 'D0') # False
obj.go('mute') # None
obj.get_output() # 'f0'
obj.go('file') # None
obj.part_of_loop() # True
obj.get_output() # 'f1'
obj.go('split') # FSMError: 'unsupported'
obj.go('file') # None
obj.part_of_loop() # True
obj.get_output() # 'f0'
obj.go('tag') # None
obj.go('hike') # FSMError: 'unknown'
obj.let_d(1) # None
obj.get_output() # 'f1'
obj.go('split') # None
obj.get_output() # 'f0'
obj.part_of_loop() # True
obj.go('tag') # FSMError: 'unsupported'
obj.go('lower') # None
obj.get_output() # 'f0'
obj.part_of_loop() # True
obj.go('wreck') # FSMError: 'unknown'
obj.go('tag') # None
obj.get_output() # 'f0'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод assign_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_path_to('M4') # True
obj.get_step() # 0
obj.assign_w(0) # None
obj.model() # 'unknown'
obj.seen_state('M1') # False
obj.flip() # 'F0'
obj.get_step() # 1
obj.seen_state('M0') # False
obj.fetch() # 'F0'
obj.fetch() # 'F5'
obj.zoom() # 'F4'
obj.flip() # 'F3'
obj.stash() # 'F4'
obj.load() # 'unknown'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод assign_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает число совершенных переходов между парой
состояний-аргументов.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.get_step() # 0
obj.assign_var('x', 0) # None
obj.seen_state('j1') # True
obj.assign_var('y', 1) # None
obj.assign_var('m', 0) # None
obj.seen_state('j0') # False
obj.grow() # 'Z2'
obj.march() # 'Z2'
obj.assign_var('m', 1) # None
obj.march() # 'unsupported'
obj.get_step() # 2
obj.fetch() # 'Z1'
obj.march() # 'Z1'
obj.flip() # 'unknown'
obj.seen_edge('j2', 'j5') # 0
obj.link() # 'unknown'
obj.grow() # 'Z0'
obj.seen_edge('j5', 'j2') # 1
obj.march() # 'Z0'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать обработку ошибок с помощью пользовательского класса
исключения FSMException
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод assign_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_path_to('e1') # True
obj.part_of_loop() # True
obj.assign_v(0) # None
obj.run('tag') # FSMException: 'unknown'
obj.part_of_loop() # True
obj.assign_u(0) # None
obj.has_path_to('e4') # True
obj.run('carve') # None
obj.part_of_loop() # True
obj.run('widen') # FSMException: 'unknown'
obj.has_path_to('e3') # True
obj.assign_u(1) # None
obj.get_output() # 'K1'
obj.run('rig') # FSMException: 'unknown'
obj.part_of_loop() # True
obj.run('pan') # None
obj.get_output() # 'K1'
obj.run('carve') # None
obj.run('rig') # FSMException: 'unknown'
obj.get_output() # 'K0'
obj.has_path_to('e6') # True
obj.run('spin') # FSMException: 'unsupported'
obj.run('pan') # None
obj.get_output() # 'K0'
obj.run('tag') # FSMException: 'unknown'
obj.run('pan') # None
obj.get_output() # 'K1'
obj.run('spin') # None
obj.get_output() # 'K1'
obj.run('melt') # None
obj.has_path_to('e0') # True
obj.get_output() # 'K0'
obj.run('reset') # FSMException: 'unknown'
obj.has_path_to('e0') # True
obj.run('melt') # FSMException: 'unsupported'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_max_out_edges() # False
obj.part_of_loop() # False
obj.has_max_in_edges() # False
obj.has_max_out_edges() # False
obj.z(1) # None
obj.b(1) # None
obj.select('peep') # StateMachineException: 'unknown'
obj.r(0) # None
obj.part_of_loop() # False
obj.has_max_out_edges() # False
obj.part_of_loop() # False
obj.select('glare') # 'j0'
obj.select('shade') # 'j5'
obj.select('spawn') # 'j0'
obj.select('fetch') # 'j2'
obj.has_max_in_edges() # True
obj.select('paint') # 'j3'
obj.part_of_loop() # True
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.run('race') # None
obj.get_output() # 'C1'
obj.run('dash') # None
obj.has_max_out_edges() # False
obj.run('merge') # 'unknown'
obj.get_output() # 'C1'
obj.run('coast') # None
obj.seen_method('dash') # True
obj.has_max_out_edges() # False
obj.get_output() # 'C5'
obj.run('fork') # None
obj.get_output() # 'C4'
obj.run('dash') # None
obj.get_output() # 'C0'
obj.seen_method('coast') # True
obj.run('stall') # 'unknown'
obj.run('coast') # None
obj.has_max_out_edges() # True
obj.get_output() # 'C4'
obj.has_max_out_edges() # True
obj.run('stand') # 'unknown'
obj.seen_method('race') # True
obj.run('dash') # None
obj.seen_method('race') # True
obj.get_output() # 'C0'
obj.run('stand') # 'unknown'
obj.run('coast') # None
obj.seen_method('coast') # True
obj.get_output() # 'C4'
obj.run('race') # None
obj.get_output() # 'C1'
obj.seen_method('fork') # True
obj.run('shift') # 'unknown'
obj.run('coast') # None
obj.has_max_out_edges() # False
obj.get_output() # 'C5'
obj.has_max_out_edges() # False
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод store_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.store_var('w', 0) # None
obj.seen_method('clean') # False
obj.select_copy() # 'P2'
obj.select_stash() # 'unknown'
obj.select_clean() # 'P4'
obj.select_snap() # 'P0'
obj.part_of_loop() # True
obj.select_snap() # 'P0'
obj.select_walk() # 'P4'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает число успешных выполнений
аргумента-метода.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.p(2) # None
obj.v(1) # None
obj.select_flip() # None
obj.get_output() # 'T3'
obj.select_flip() # None
obj.seen_edge('U0', 'U1') # False
obj.get_output() # 'T1'
obj.select_glare() # None
obj.select_glare() # 'unsupported'
obj.seen_edge('U0', 'U1') # False
obj.select_glare() # 'unsupported'
obj.get_output() # 'T1'
obj.select_loop() # None
obj.get_output() # 'T1'
obj.select_flip() # None
obj.p(0) # None
obj.get_output() # 'T3'
obj.select_race() # 'unknown'
obj.select_flip() # None
obj.select_flip() # 'unsupported'
obj.get_output() # 'T1'
obj.seen_edge('U1', 'U5') # False
obj.select_flip() # 'unsupported'
obj.has_path_to('U3') # True
obj.seen_edge('U5', 'U1') # False
obj.seen_method('glare') # 1
obj.seen_edge('U5', 'U1') # False
obj.select_flip() # 'unsupported'
obj.select_glare() # None
obj.seen_method('flip') # 4
obj.seen_edge('U1', 'U5') # False
obj.get_output() # 'T1'
obj.select_loop() # None
obj.get_output() # 'T1'
obj.has_path_to('U3') # True
obj.seen_edge('U3', 'U2') # True
obj.seen_method('loop') # 2
obj.select_flip() # None
obj.get_output() # 'T1'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать метод seen_method
класса конечного
автомата. Этот метод возвращает истину, если аргумент-метод уже успешно
выполнялся ранее.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Реализовать обработку ошибок с помощью пользовательского класса
исключения MealyError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_path_to('r0') # True
obj.seen_edge('r6', 'r4') # False
obj.f(0) # None
obj.a(1) # None
obj.seen_edge('r5', 'r6') # False
obj.d(1) # None
obj.has_path_to('r4') # True
obj.seen_edge('r0', 'r7') # False
obj.go('hoard') # 'D1'
obj.go('hoard') # 'D2'
obj.has_path_to('r2') # True
obj.d(0) # None
obj.has_path_to('r7') # True
obj.go('stare') # 'D1'
obj.go('march') # MealyError: 'unsupported'
obj.seen_edge('r2', 'r4') # False
obj.seen_method('hoard') # True
obj.seen_edge('r2', 'r0') # True
obj.go('hoard') # 'D1'
obj.seen_method('march') # False
obj.has_path_to('r7') # True
obj.go('leer') # MealyError: 'unknown'
obj.go('step') # 'D2'
obj.go('hoard') # 'D1'
obj.go('amble') # 'D0'
obj.go('march') # 'D0'
obj.seen_edge('r7', 'r1') # True
obj.go('hoard') # 'D2'
obj.go('march') # 'D0'
obj.go('snap') # MealyError: 'unknown'
obj.seen_edge('r6', 'r4') # True
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает число совершенных переходов между парой
состояний-аргументов.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.speed() # 'T2'
obj.seen_edge('X0', 'X3') # 0
obj.lower() # 'unknown'
obj.has_path_to('X6') # True
obj.amble() # 'T7'
obj.seen_edge('X5', 'X2') # 1
obj.speed() # 'T5'
obj.dash() # 'unknown'
obj.has_path_to('X4') # True
obj.dash() # 'unknown'
obj.speed() # 'T2'
obj.fade() # 'T7'
obj.amass() # 'T2'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.d(1) # None
obj.pan() # 'unknown'
obj.smash() # 'z0'
obj.mix() # 'z1'
obj.seen_edge('P0', 'P4') # False
obj.seen_state('P3') # True
obj.cut() # 'z1'
obj.smash() # 'z0'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.get_step() # 0
obj.move('rock') # StateMachineException: 'unsupported'
obj.s(1) # None
obj.seen_state('e2') # False
obj.n(1) # None
obj.c(0) # None
obj.move('order') # StateMachineException: 'unknown'
obj.move('coat') # 'K0'
obj.move('mask') # 'K0'
obj.move('skid') # 'K1'
obj.move('mask') # 'K1'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать метод has_max_in_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число входных дуг в графе.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать обработку ошибок с помощью пользовательского класса
исключения MachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает истину, если аргумент-состояние уже было
посещено.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.seen_state('n4') # True
obj.x(1) # None
obj.w(0) # None
obj.has_max_in_edges() # False
obj.select('fetch') # 'x1'
obj.select('view') # 'x0'
obj.part_of_loop() # True
obj.select('sit') # 'x0'
obj.select('tag') # MachineException: 'unknown'
obj.x(1) # None
obj.select('sit') # 'x1'
obj.select('sit') # 'x0'
obj.seen_state('n5') # False
obj.select('fetch') # 'x0'
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineError
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод assign_var(имя, значение)
для
задания значений переменных. Эти переменные определяют выбор перехода
там, где состояние имеет несколько выходных дуг, помеченных одним и тем
же методом (см. граф).
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.assign_var('a', 2) # None
obj.part_of_loop() # True
obj.select('paste') # StateMachineError: 'unknown'
obj.assign_var('n', 0) # None
obj.select('rev') # 'M0'
obj.assign_var('n', 1) # None
obj.select('pluck') # 'M0'
obj.select('rev') # 'M0'
obj.select('rev') # 'M0'
obj.has_path_to('W0') # False
obj.seen_state('W4') # 2
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать обработку ошибок с помощью пользовательского класса
исключения MealyError
. При возбуждении (raise) исключения
сообщение об ошибке является словом, которое определяет, оказался ли
метод перехода неподдерживаемым ('unsupported'
) в данном
состоянии или неизвестным ('unknown'
) для конечного
автомата.
Реализовать метод имя(значение)
для задания значений
переменных. Эти переменные определяют выбор перехода там, где состояние
имеет несколько выходных дуг, помеченных одним и тем же методом (см.
граф).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает истину, если переход между парой
состояний-аргументов уже встречался ранее.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_path_to('F0') # True
obj.t(1) # None
obj.k(0) # None
obj.stand() # 't1'
obj.seen_edge('F5', 'F3') # False
obj.close() # 't0'
obj.shift() # 't1'
obj.fill() # 't0'
obj.has_path_to('F7') # False
obj.close() # 't1'
obj.throw() # MealyError: 'unknown'
obj.base() # 't1'
obj.fill() # 't0'
obj.shift() # MealyError: 'unsupported'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать метод seen_state
класса конечного
автомата. Этот метод возвращает число посещений
аргумента-состояния.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод assign_имя(значение)
для задания
значений переменных. Эти переменные определяют выбор перехода там, где
состояние имеет несколько выходных дуг, помеченных одним и тем же
методом (см. граф).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.assign_p(1) # None
obj.seen_state('m2') # 1
obj.view() # None
obj.paint() # 'unknown'
obj.get_output() # 'W2'
obj.peek() # 'unsupported'
obj.stop() # None
obj.close() # 'unknown'
obj.get_output() # 'W0'
obj.start() # 'unknown'
obj.part_of_loop() # True
obj.forge() # 'unsupported'
obj.open() # None
obj.part_of_loop() # True
obj.get_output() # 'W1'
obj.add() # None
obj.part_of_loop() # True
obj.paint() # 'unknown'
obj.get_output() # 'W2'
obj.add() # None
obj.get_output() # 'W1'
obj.stop() # None
obj.get_output() # 'W1'
obj.part_of_loop() # True
Задача №11
Конечный автомат Мили представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать обработку ошибок с помощью пользовательского класса
исключения StateMachineException
. При возбуждении (raise)
исключения сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать метод seen_edge
класса конечного
автомата. Этот метод возвращает число совершенных переходов между парой
состояний-аргументов.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод get_step
класса конечного
автомата. Этот метод возвращает число совершенных переходов.
Реализовать метод part_of_loop
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние является
частью какого-либо цикла графа (без учета меток дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.get_step() # 0
obj.run('print') # 'r1'
obj.run('tread') # 'r2'
obj.seen_edge('C1', 'C3') # 0
obj.run('mute') # 'r0'
obj.get_step() # 3
obj.seen_edge('C6', 'C5') # 1
obj.run('draw') # StateMachineException: 'unknown'
obj.run('print') # 'r2'
obj.run('chain') # 'r2'
obj.part_of_loop() # True
obj.run('print') # 'r0'
Задача №11
Конечный автомат Мура представлен графом на картинке ниже. Необходимо реализовать этот конечный автомат в виде класса. Переходы из состояния в состояние осуществляются с помощью методов, названия которых основаны на словах, указанных на дугах графа (см. пример ниже).
Реализовать функцию main
, возвращающую экземпляр
класса конечного автомата.
Реализовать обработку ошибок для методов переходов. Возвращаемое
методом сообщение об ошибке является словом, которое определяет,
оказался ли метод перехода неподдерживаемым ('unsupported'
)
в данном состоянии или неизвестным ('unknown'
) для
конечного автомата.
Реализовать функцию test
для тестирования класса
конечного автомата на основе метрики покрытия ветвей (branch coverage).
Требуемая степень покрытия: 100%.
Реализовать метод has_max_out_edges
класса конечного
автомата. Этот метод возвращает истину, если текущее состояние имеет
максимальное число выходных дуг в графе.
Реализовать метод has_path_to
класса конечного
автомата. Этот метод возвращает истину, если из текущего состояния по
графу можно добраться до состояния-аргумента (без учета меток
дуг).
Детали работы методов класса конечного автомата показаны на примере,
приведенном далее. Переменная obj
содержит объект этого
класса.
obj.has_max_out_edges() # True
obj.move('wreck') # None
obj.move('tail') # 'unsupported'
obj.get_output() # 'm1'
obj.has_path_to('H7') # True
obj.move('wreck') # None
obj.move('warp') # 'unknown'
obj.get_output() # 'm2'
obj.move('bolt') # None
obj.get_output() # 'm1'
obj.has_path_to('H7') # True
obj.move('wreck') # None
obj.move('scrub') # 'unknown'
obj.get_output() # 'm2'
obj.has_path_to('H6') # True
obj.move('bolt') # None
obj.get_output() # 'm1'
obj.move('jump') # 'unknown'
obj.move('brake') # None
obj.get_output() # 'm0'
obj.move('trash') # None
obj.has_path_to('H2') # True
obj.get_output() # 'm0'
obj.has_path_to('H2') # True
obj.move('tail') # None
obj.get_output() # 'm2'
obj.move('trash') # None
obj.get_output() # 'm2'
obj.move('bolt') # None
obj.get_output() # 'm1'