【字符串】表示数值的字符串

题目:

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值