请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。
表示数值的字符串遵循模式A[.[B]][e|EC]或者.B[e|EC],其中A为数值的整数部分,B紧跟着小数点为数值的小数部分,C紧跟着’e’或者’E’为数值的指数部分。分析这三个部分可以看出,整数部分由于可以是负数,故除了第一个字符以外其实等价于其它两种情况,即scan_unsigned_integer()函数。为了避免.e+3的情况出现,前两个部分的标志位至少有一个为真才行。
class Solution:
def is_numeric(self, s):
if not s:
return False
integer_flag, dot_flag, exponent_flag = False, False, False
integer_flag, idx = self.scan_integer(s, 0)
if idx < len(s) and s[idx] == '.':
dot_flag, idx = self.scan_unsigned_integer(s, idx+1)
if not (integer_flag or dot_flag): # 有一个为真即可,否则为错误情况
return False
if idx < len(s)-1 and (s[idx] == 'e' or s[idx] == 'E'):
exponent_flag, idx = self.scan_integer(s, idx+1)
return idx == len(s)
def scan_integer(self, s, start):
if s[start] == '+' or s[start] == '-':
start += 1
return self.scan_unsigned_integer(s, start)
def scan_unsigned_integer(self, s, start):
current = start
while current < len(s) and s[current] >= '0' and s[current] <= '9':
current += 1
return current > start, current # 没有移动则没有该部分的存在
st = Solution()
numeric = '123.e+4'
print(st.is_numeric(numeric))
直接使用浮点数函数进行转化,捕获值异常错误输出。
class Solution:
def is_numeric(self, s):
try:
value = float(s)
return True
except ValueError:
return False
(最近更新:2019年09月21日)
本文介绍了一种通过自定义函数判断字符串是否能表示数值的方法,包括整数、小数和科学计数法。通过分析字符串的整数部分、小数部分和指数部分,实现了精确的数值判断,并提供了一种更简单的解决方案,即直接尝试将字符串转换为浮点数并捕获可能的值异常。
302

被折叠的 条评论
为什么被折叠?



