我必须在一个类中创建一个基本的FSM,并用Python编写它.分配要求我们从文本文件中读取机器的过渡.例如,一个有3个状态的FSM,每个状态有2个可能的转换,可能的输入'a'和'b',wolud有一个如下所示的文本文件:
2 # first line lists all final states
0 a 1
0 b 2
1 a 0
1 b 2
2 a 0
2 b 1
Run Code Online (Sandbox Code Playgroud)
我试图想出一种更加pythonic的方式来一次读取一行并将状态转换为整数,同时将输入值保持为字符串.基本上这是个主意:
self.finalStates = f.readline().strip("\n").split(" ")
for line in f:
current_state, input_val, next_state = [int(x) for x in line.strip("\n").split(" ")]
Run Code Online (Sandbox Code Playgroud)
当然,当它尝试int("a")时会抛出一个ValueError.我知道我可以使用传统的循环并捕获ValueError,但我希望有更多的Pythonic方法来做到这一点.
mat*_*t b 12
你应该只是试图解析你期望整数的标记
for line in f:
tokens = line.split(" ")
current_state, input_val, next_state = int(tokens[0]), tokens[1], int(tokens[2])
Run Code Online (Sandbox Code Playgroud)
可以说更具可读性:
for line in f:
current_state, input_val, next_state = parseline(line)
def parseline(line):
tokens = line.split(" ")
return (int(tokens[0]), tokens[1], int(tokens[2]))
Run Code Online (Sandbox Code Playgroud)