表示数值的字符串(python)

一,问题

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

二,分析

表示数值的:"+100" , "5e2" , "-123" , "3.1416","-1E-16"

不表示数值的:"12e" , "1a3.14" , "1.2.3" , "+-5","12e+4.3"

通过观察,

我们发现:第一,要能表示数值,里面的元素只能是‘0到9的数字’ 或者 ‘+ ,-号’ 或者 ‘小数点  . ’或者 ‘E,e ’ 只要出现除此以外的元素,就直接判定False

先全部转成小写 s=s.lower()

然后去遍历元素,看看有没有规定以外的元素出现

for i in s:

    if i in ['+','-','e','.']

        continue

    if i <='9' and i >='0':

        continue

    else:

        return False

 

第二,看含‘e’量

在这里先介绍一下split()函数

我们看到,根据含e量的不同,可以简单判断出这个字符串是不是False

含e量大于等于2,切出来的长度一定大于等于3,直接False掉

含e量等于1或者0的,继续判断

ss=s.split('e')

if len(ss)>2:

    retutn False

如果含e量等于1

则s被分成两端,分别看这两段含不含‘+,-’号,在第几位,‘+,-’号不在首位的都直接干掉

在这里介绍一下find()函数,资料来自菜鸟教程

if left_c.find("+") > 0:
    return False
if left_c.find("-") > 0:
    return False
if right_c.find("+") > 0:
    return False
if right_c.find("-") > 0:
    return False

第三 检查小数点

看左边的含点量,有两个或两个以上的小数点,直接干掉

lcc = left_c.split(".")
if len(lcc) > 2:
    return False

看右边小数点有没有,有的话在不在首位。否则直接干掉
if right_c.find(".") > 0:
    return False
return True

不含e时,比如‘1.2.3’或者‘+-5’

就要检查正负号在不在首位

小数点有没有多的

注意,12e+4是个数字,他表示12乘以10的4次方

 

三,代码

 

posted @ 2020-06-24 13:10  董不耀  阅读(641)  评论(0编辑  收藏  举报