一,问题
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+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次方
三,代码