我正在使用Python实现一个简单的自动机功能。
def RunAutomata(transition, initial, accepting, s):
state = initial
for c in s:
try:
state = transition[state][c]
except KeyError:
return False
return state in accepting
dfa = {0:{'a':1, 'b':2},
1:{'c':3,'d':2},
2:{'f':3},
3:{'e':1}}
RunAutomata(dfa, 0, {2}, 'bfecedfedf')
这段代码的直觉:它会检查dfa和字符串,以确定在给定的dfa下是否接受该字符串。如果接受,则返回True,否则返回False。
在这里你可以看到,在字典中,我使用了字母键,因此在遍历时,如果找不到键,则抛出KeyError。 我使用try-except块处理它,但我想知道是否有更好的替代方法可以使用异常处理基础。
修改:从@omri_sadon获得解决方案。谢谢。请随意发布其他一些不同的方式。
答案 0 :(得分:3)
您可以使用dict get
方法。
transition.get(state) # default for None
transition.get(state, False) # If key not in dict, False is returned
方法get()
返回给定键内的值。
如果密钥不在dict中,则返回默认值。