剑指offer:表示数值的字符串

本文介绍了一个用于判断字符串是否表示数值(包括整数和小数)的Python函数实现。该函数通过解析字符串,检查其是否符合数值的模式:整数部分、小数部分和指数部分,并详细解释了每一步的逻辑。

题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。

class Solution:
    def isNumeric(self, s):
        """
        表示数值的字符串遵循模式: A[.[B]][e|EC]或者.B[e|EC]
        其中A为整数部分,B为紧跟着小数点的小数部分,C为指数部分
        其中A和C都可能含有符号,B不能含有符号
        A不是必须的,如果没有A那么B不能为空
        :param s: 待判断的字符串
        :return: True / False
        """
        if not s:
            return False
        # 查找属于A的部分,只有在遇到非数字的部分才退出循环
        if s[0] in '+-':
            s = s[1:]
        isBreak = False
        for i in range(len(s)):
            if '0' <= s[i] <= '9':
                continue
            isBreak = True
            break

        if not isBreak:
            return True

        s = s[i:]
        # 如果遇到了非数字部分,说明A部分已经查找完成。
        # 查找B部分
        if s and s[0] == '.':
            s = s[1:]
            isBreak = False
            for i in range(len(s)):
                if '0' <= s[i] <= '9':
                    continue
                isBreak = True
                break
            if not isBreak:
                return True
            s = s[i:]

        # 查找C部分
        if s and s[0] in 'eE':
            s = s[1:]
            # 注意C部分必须要有数字,不能只有一个e
            if not s:
                return False
            if s[0] in '+-':
                s = s[1:]
            isBreak = False
            for i in range(len(s)):
                if '0' <= s[i] <= '9':
                    continue
                isBreak = True
                break
            if not isBreak:
                return True

        return False

转载于:https://blog.51cto.com/jayce1111/2383367

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值