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