#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @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