Python 两种类型的代码(非确定有限状态机模拟器)之间有什么不同之处

Python 两种类型的代码(非确定有限状态机模拟器)之间有什么不同之处,python,code-structure,Python,Code Structure,我有两个非确定性有限状态机的实现: 共同定义 实施1 实施2 我原以为这两个实现会产生相同的结果,但事实并非如此。为什么不可以?实现1可以从边缘中的val循环中不返回任何内容[当前,字母]:如果在for循环结束时if nfsmsim测试从不为真,则没有返回值 实现2始终返回真/假值,因为如果for循环结束时if-nfsmsimtest从不为真,则样式2中存在返回假,如果nfsmsimr、val、edges、accepting:,则未定义变量r。打字错误是你的问题吗?同意@DainDwarf,函数

我有两个非确定性有限状态机的实现:

共同定义 实施1 实施2
我原以为这两个实现会产生相同的结果,但事实并非如此。为什么不可以?

实现1可以从边缘中的val循环中不返回任何内容[当前,字母]:如果在for循环结束时if nfsmsim测试从不为真,则没有返回值


实现2始终返回真/假值,因为如果for循环结束时if-nfsmsimtest从不为真,则样式2中存在返回假

,如果nfsmsimr、val、edges、accepting:,则未定义变量r。打字错误是你的问题吗?同意@DainDwarf,函数调用中r的值nfsmsimr,val,edges,accepting在第二节中为空。你应该确保它继续与remain'的值链接,否则,你正在进行的字符串处理的连续性就会丢失。不是r,我在键入时出错了,这仍然是两种风格的不同,这是remaine的错
edges = { (1, 'a') : [2, 3],    #this was the finite state machine 
          (2, 'a') : [2],
          (3, 'b') : [4, 3],
          (4, 'c') : [5] ,}
accepting = [2, 5]  #when it comes to the state of 2 or 5 then return true
def nfsmsim(string, current, edges, accepting):   #style 1
    if string == "":
        return current in accepting
    else:
        letter = string[0]
        if (current,letter) in edges:
            remain = string[1:]
            for val in edges[(current,letter)]:
                if nfsmsim(remain, val, edges, accepting ) :
                    return True

        else:  #this one was deleted
            return False;   #indent this line
def nfsmsim(string, current, edges, accepting): #style 2
    if string == "":
        return current in accepting
    else:
        letter = string[0]
        if (current,letter) in edges:
            remain = string[1:]
            for val in edges[(current,letter)]:
                if nfsmsim(r, val, edges, accepting ) :
                    return True
        return False;