用来判断一个字符串是否为一个有效数字,构造了一个简单的自动机,如图所示
# -*- coding:utf-8 -*-
def isNum(input_str):
state = [
{ },
{"数字":3,"正负":2,"点":4,"空":1},
{"数字":3,"点":4},
{"数字": 3, "e": 6, "点": 5, "空": 9},##可终结3
{"数字":5},
{"数字":5,"e":6,"空":9},##可终结5
{"正负":7,"数字":8}, #6
{"数字":8},
{"数字":8,"空":9},##可终结8
{"空":9}##可终结9
]
#目前状态
current_state = 1
#遍历input_str,判断每一个字符
for char in input_str:
if char<="9" and char >="0":
char = "数字"
if char in ["-","+"]:
char = "正负"
if char == ".":
char = "点"
if char == " ":
char = "空"
if char not in state[current_state]:
return False
else:
current_state = state[current_state][char]
#是否为终结符
if current_state not in [3,5,8,9]:
return False
return True
可以看到状态机比使用大量的if else简单多了,也便于理解