python 表示数值的字符串

本文介绍了一种用于判断字符串是否表示数值(包括整数和小数)的算法实现。通过解析字符串,检查其是否符合数值的构成规则,如包含有效的数字、小数点、指数等元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''
题目描述
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 
但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
'''
# -*- coding:utf-8 -*-
class Solution:
    # s字符串
    def isNumeric(self, s):
        num = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']
        valid_all = num+['+', '-', 'e', 'E','.']
        # print(valid_all)
        # write code here
        def is_int(sub_s):
            if len(sub_s)==0:
                return False
            # 判断子字符串是否是整数(包括正整数和负整数,以及不具有符号标识的整数)
            if sub_s[0]=='+' or sub_s[0]=='-':
                sub_s=sub_s[1:]
            for elem in sub_s:
                if elem not in num:
                    return False
            return True
        def is_float(sub_s):
            if len(sub_s)==0:
                return False
            #小数点之前的子字符串需要判断是否是整数
            #小数点之后的子字符串需要判断是否是不带有符号的整数
            if len(sub_s.split('.'))!=2:
                return False
            before,after=sub_s.split('.')
            before_logtic=is_int(before)
            if not before_logtic:
                return False
            for s in after:
                if s not in num:
                    return False
            return True

        for c in s:
            # print(valid_all)
            if c not in valid_all:
                return False
        if 'e' in s or 'E' in s:
            out=s.split('e') if 'e' in s else s.split('E')
            if len(out)!=2:
                return False
            else:
                before, after=out[0],out[1]
            logtic=(is_float(before) or is_int(before)) and is_int(after)
            return logtic
        elif '.' in s:
            return is_float(s)
        else:
            return is_int(s)

if __name__=='__main__':
    for s in ["+100","5e2","-123","3.1416","-1E-16"]:
        print(Solution().isNumeric(s))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值