表示数值的字符串

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

  1. '.‘两种情况:a>前面有有无符号的整数,flag = True,接下来最后处理,例:1.a,先判断为True
    b>前面为空,后面有无符号的整数(如果前面为整数,小数点后面可以为’e’或’E’,这位情况a>)

  2. ‘e’或’E’ 前后必须有有无符号的整数,因为完整表达式为科学计数法aeb = a * (10 *** b), a为实数,b为整数,去掉a或b这个科学技术法式子都残缺。

  3. ‘.’ ,‘e’ 或’E’ 都只能出现一次

    -- coding:utf-8 --

    class Solution:
    def init(self):
    self.index = 0

     def isNumeric(self, s):
     	if not s:
     		return False
     	flag = self.scanInteger(s)  # 先判断有 有无符号的整数, 扫描整数,包括符号
     	if self.index < len(s) and s[self.index] == '.':
     		self.index += 1  # s的下标跳过'.'
     		# 小数点前面为空,小数点后面必须是无符号整数才是数值,后面为有符号整数错误
     		flag = self.scanUnsignedInteger(s) or flag # a>小数点后面为整数(包括小数点前面为有无符号的整数和空)b>小数点前面有有无符号的整数即为True(包括1.a也为True)小数点后面为e或E或+(1.+1表示1.0+1 = 2.0)或-(1.-1表示1.0-1 = 0.0)(小数点前面有有无符号的整数),
     	if self.index < len(s) and (s[self.index == 'e' or s[self.index] == 'E']):
     		self.index += 1
     		flag = self.scanInteger(s) and flag # 'e'或'E'的前后必须有有无符号的整数
     	# 解决了1.a的问题,因为1.a的self.index为len(s) - 1,结果为False
     	return flag and self.index == len(s)  # 不是self.index == len(s) - 1 ,因为把字符串检查完了之后self.index = len(s)
    
     def scanInteger(self, s):
     	if self.index < len(s) and (s[self.index] == '+' or s[self.index] == '-'):
     		self.index += 1
     	return self.scanUnsignedInteger(s)
    
     def scanUnsignedInteger(self, s):
     	start = self.index
     	# 不能写s[self.index] < '0'因为可能有符号,小数点,'e'或'E'
     	while self.index < len(s) and s[self.index] >= '0' and s[self.index] <= '9': 
     		self.index += 1
     	return start < self.index # 有符号整数,则为True,否则为False
    

方法二:

# -*- coding:utf-8 -*-
class Solution:
	def isNumeric(self, s):
		try:
			ss = float(s)
			return True
		except:
			return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值