课程DFA:
#Q=list of strings, alphabet = list of single char strings, s = start
#state, F = list of states(strings) from Q, delta = list of lists
def __init__(self, Q, alphabet, s, F, delta):
self.states = Q
self.alphabet = alphabet
self.startS = s
self.finalS = F
self.delta = delta
self.currentState = self.startS
return
def transition_to_nextState(self,input_value):
if ((self.currentState + input_value) not in self.delta):
self.currentState = None
return self.currentState
self.currentState = self.delta[self.currentState]
return self.currentState
#go to start state
def isStartState(self):
self.currentState = self.startS
#print(self.startS)
#check in final state
def isAcceptState(self):
if (self.currentState in self.finalS):
print("accepted")
return True
else:
print("not accepted")
return False
#return True if inputStr is accepted and False if not
def processInputStr(self,inputStr):
self.isStartState()
for letter in inputStr:
print("input:",letter)
self.currentState = self.transition_to_nextState(letter)
print("current state:", self.currentState)
if (self.currentState == None):
return self.isAcceptState()
continue
return self.isAcceptState()
我的transition_to_nextState函数无效。
正在发送DFA: 问:['q1','q2','q3'] 字母:['0','1'] s:'q1' F:['q2'] delta:[['q1','a','q1'],['q1','b','q2]]
我无法解析列表以找到机器应转换到的下一个状态。任何想法都会受到欢迎!
答案 0 :(得分:0)
我认为问题出在这一行
if ((self.currentState + input_value) not in self.delta)
表达式self.currentState + input_value会给你一个连接的字符串,即如果input_value ='1'那么这将给你q11
虽然self.delta是列表列表,但您无法将字符串与列表匹配。
答案 1 :(得分:0)
我猜你正在使用delta列表作为状态转换。因此,如果给出self.currentState =" q1"和input_value =" a",我想你想在列表中找到下一个状态" q1"根据您的输入。也许将delta更改为元组=状态字典将有助于
# input to self.delta
delta = {('q1','a'):'q1', ('q1','b'): 'q2'}
# modify this line
def transition_to_nextState(self,input_value):
if ((self.currentState, input_value) not in self.delta):
self.currentState = None
return self.currentState
self.currentState = self.delta[(self.currentState,input_value)]
return self.currentState