#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param str string字符串 
# @return bool布尔型
#
class Solution:
        def isNumeric(self , str ):
        # write code here
        # 5e2表示5x10的2次方.

        # 条件一:e/E后面必须有数,且必须是整数
        # 条件二:小数点只能有一个
        # 条件三:其他字母(除了e/E)均无意义
        # 条件四:符号位最多为两个(e前e后)
        point = 0    # 记录小数点个数
        sign = 0    # 记录符号位个数
        length = len(str)
        index = 0
        num_list = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

        while index < length:
            # 符号(符号必须在开头或者e的下一位)
            if (str[index]=="+" or str[index]=="-") and (index==0 or str[index-1]=="e" or str[index-1]=="E"):
                if sign == 1:
                    print("符号问题错误")
                    print(index)
                    return False
                else:
                    sign = sign + 1
                    index= index + 1
            # 小数点
            elif str[index]==".":
                if point == 1:
                    print("小数点问题错误")
                    return False
                else:
                    point = point + 1
                    index = index + 1
            # 数字
            elif str[index]in num_list:
                index = index + 1
            # e/E
            elif str[index]=="e" or str[index]=="E":
                # e/E后面展开新的一轮,直到str判别到末尾
                index = index + 1
                print("进入内部while")
                # e/E为最后一位(e/E后面没有整数)
                if index==length:
                    print("e后无整数问题错误")
                    return False
                sign = 0    # 符号位归零(e后面可以有一个符号)
                while index < length:
                    if str[index]==".":
                        print("e后有小数点问题错误")
                        return False
                    elif str[index]=="e" or str[index]=="E":
                        print("有多个e问题错误")
                        return False
                    elif str[index]=="+" or str[index]=="-":
                        if sign == 1:
                            print("e后有多个符号问题错误")
                            return False
                        else:
                            sign = sign + 1
                            index= index + 1
                    elif str[index]in num_list:
                        index = index + 1
                    else:
                        return False
                print("内部while允许完毕")
                return True

            # 不合法情况(其他字母/其他符号)
            else:
                print("不合法问题错误")
                return False
        return True