剑指Offer:表示数值的字符串(Python语言实现)

请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。

表示数值的字符串遵循模式A[.[B]][e|EC]或者.B[e|EC],其中A为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着’e’或者’E’为数值的指数部分。分析这三个部分可以看出,整数部分由于可以是负数,故除了第一个字符以外其实等价于其它两种情况,即scan_unsigned_integer()函数。为了避免.e+3的情况出现,前两个部分的标志位至少有一个为真才行。

class Solution:
    def is_numeric(self, s):
        if not s:
            return False

        integer_flag, dot_flag, exponent_flag = False, False, False
        integer_flag, idx = self.scan_integer(s, 0)

        if idx < len(s) and s[idx] == '.':
            dot_flag, idx = self.scan_unsigned_integer(s, idx+1)

        if not (integer_flag or dot_flag):  # 有一个为真即可,否则为错误情况
            return False

        if idx < len(s)-1 and (s[idx] == 'e' or s[idx] == 'E'):
            exponent_flag, idx = self.scan_integer(s, idx+1)

        return idx == len(s)

    def scan_integer(self, s, start):
        if s[start] == '+' or s[start] == '-':
            start += 1
        return self.scan_unsigned_integer(s, start)

    def scan_unsigned_integer(self, s, start):
        current = start
        while current < len(s) and s[current] >= '0' and s[current] <= '9':
            current += 1
        return current > start, current     # 没有移动则没有该部分的存在


st = Solution()
numeric = '123.e+4'
print(st.is_numeric(numeric))

直接使用浮点数函数进行转化,捕获值异常错误输出。

class Solution:
    def is_numeric(self, s):
        try:
            value = float(s)
            return True
        except ValueError:
            return False

(最近更新:2019年09月21日)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值