class Solution:
def isNumeric(self , str: str) -> bool:
# 根据准则来判断
count_point = 0 # 小数点flag
count_e = 0 # e的flag
num = False # 数字的flag
for i in range(len(str)):
# 判断正负号:如果不是在第一位置,且不在e的后一位→不符合
if str[i] in ('+','-'):
if i!=0 and str[i-1] not in ('e','E'):
return False
# 判断小数点:(1)如果1个以上(2)在e后面→不符合
elif str[i]=='.':
count_point +=1
if count_point>1 or count_e>0:
return False
# 判断e:(1)如果1个以上(2)前面没有数字(3) 后面没有数字→不符合
elif str[i] in ('e','E'):
count_e +=1
if count_e>1:
return False
if not num: # 前面没有数字,不符合
return False
num = False # 判断后面是否有数字,有数字会重新置True
# 判断是否有数字
elif '0'<=str[i]<='9':
num = True
elif str[i] not in ('+','-','e','E',' '): # 会出现"1a3.14"这种
return False
return num