zoukankan      html  css  js  c++  java
  • 剑指offer——python【第53题】表示数值的字符串

    题目描述

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

    思路

    根据题目给出的一些规则,可以表示成数值的字符串类型有:int整型,float浮点型,指数型(包括e和E),当然,前面三种都可以带上正负号;

    不能表示成数值的字符串类型有:指数型错误(没有指数或者指数是小数,或者指数变成了a),float浮点型错误,第一个正负号后又带了正负号

    于是,正负号类型的错误可以用if..else去判断;而在判定为没有正负号的错误下,再判断是否可以表达为数值型,就可以用float函数,再加上try..except

    解答

    class Solution:
        # s字符串
        def isNumeric(self, s):
            # write code here
            if s[0]=="+" or s[0]=="-":
                if s[1]!="+" and s[1]!="-":
                    try:
                        if float(s[1:]):
                            return True
                    except:
                        return False
                else:
                    return False
            else:
                try:
                    if float(s):
                        return True
                except:
                    return False

    也可以很准确地去判断:

    class Solution:
        # s字符串
        def isNumeric(self, s):
            # write code here
            if s is None or len(s) == 0:
                return False
    
            # 是否有e
            hasE = False
            # 是否有小数
            isDecimal = False
            # 是否有+-符号
            hasSign = False
    
            for i in range(len(s)):
                # 如果有e,只能有一个e且不能是最后一个
                if s[i] == "e" or s[i] == "E":
                    if hasE or i == len(s) - 1:
                        return False
                    hasE = True
                # 小数点不能重复出现或和e共线
                elif s[i] == ".":
                    if hasE or isDecimal:
                        return False
                    isDecimal = True
                elif s[i] == "-" or s[i] == "+":
                    # 重复出现符号时,必须跟在e后面
                    if hasSign and s[i - 1] != "e" and s[i - 1] != "E":
                        return False
                    # 重复出现符号时,必须跟在e后面
                    if not hasSign and i > 0 and s[i - 1] != "e" and s[i - 1] != "E":
                        return False
                    hasSign = True
                elif s[i] < "0" or s[i] > "9":
                    return False
            return True
    人生苦短,何不用python
  • 相关阅读:
    CentOS如何挂载U盘(待更新)
    CentOS6.8启动Tomcat无法访问
    CentOS7安装后连不上网络无法使用yum
    Android Studio 3.0找不到Android Device Monitor
    初识 ‘测试左移 测试右移’
    利用coverage工具进行Python代码覆盖率测试
    Charles抓包过滤的四种方式
    postman中添加cookie信息
    初始Activity启动模式
    MySQL数据库报错:Too many connection
  • 原文地址:https://www.cnblogs.com/yqpy/p/9565040.html
Copyright © 2011-2022 走看看