题目:
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
思路:
1、
class Solution:
# s字符串
def isNumeric(self, s):
sign,decimal,hasE = False,False,False
#边界判断
if s is None or len(s)==0:
return False
#遍历判断字符串进行判断
for i in range(0,len(s)):
#E不可以是最后一个,也只能有一个
if s[i] in ['e','E']:
if i == len(s)-1 or hasE:
return False
hasE = True
elif s[i] == '.':
if hasE or decimal:
return False
decimal = True
#最后判断有正负号
elif s[i] in ['+','-']:
if not sign and i>0 and s[i-1] not in ['e','E']:
return False
if sign and s[i-1] not in ['e','E']:
return False
else:
if s[i]<'0' or s[i]>'9':
return False
return True
1、根据题目给出的一些规则,可以表示成数值的字符串类型有:int整型,float浮点型,指数型(包括e和E),当然,前面三种都可以带上正负号;
2、不能表示成数值的字符串类型有:指数型错误(没有指数或者指数是小数,或者指数变成了a),float浮点型错误,第一个正负号后又带了正负号
于是,正负号类型的错误可以用if..else去判断;而在判定为没有正负号的错误下,再判断是否可以表达为数值型,就可以用float函数,再加上try..except
class Solution:
def isNumeric(self, s):
if s[0]=="+" or s[0]=="-": #有正负号时,进行判断
if s[1]!="+" and s[1]!="-": #此时第二个字符不是符号的话,继续判断...
try: #用try/except语句进行判断:
if float(s[1:]):
return True
except:
return False
else:
return False #如果第二个字符是+或者-的话,返回False
else: #没有正负号,直接进行浮点数的判断即可
try:
if float(s):
return True
except:
return False