1 判断是否是valid number,需要遵循以下几个准则:
a,字符串第一个字符以e开头,以e结尾,以字符开头,都返回False;第一个字符可以是空
b, 任何一个字符如果是空或者是字符,都返回False
c, 如果s中有e,split s,e后面的必须是整数
d, 正负号只能存在于第一个和e后面第一个
e, s为空,返回False
f, s长度为1时,只能是数字
g,空不能在中间,可以在首尾
我开始写成if len(s)==1 and not s.isnumeric: return False else: return True是错误的,因为除了长度为1和这个数不是数字,其他的情况都会返回True。这并不是我要表达的意思,在这里我只是想先判断长度为1的情况。
2 corner case太多!!!原来可以用有限状态机来解决!首先创建state,然后遍历输入string的每一个字符;state是一个list,list里面每个element是一个字典,每个字典里是字符的类别(key),value是对应的状态;有一个初始状态为空。空格换行tab键都属于blank
3 state1:最开始输入blank,sign,digit和点都是合法的
4 state2: 发现sign,后面可以接digit或者是dot
5 state3:digit,后面可以接digit,dot,‘e’,‘blank’
6 state4:dot,后面可接数字