题目描述
难度中等
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值,但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。
思路
判断是否整数,是否小数,是否科学计数
代码
class Solution:
def isFloat(self, s): # 判断小数
if '.' in s:
parts = s.split('.')
if len(parts) != 2:
return False
if self.isInteger(parts[0]) and self.is_pos_Integer(parts[1]):
return True
if len(parts[0])==0 and self.is_pos_Integer(parts[1]):
return True
if self.isInteger(parts[0]) and len(parts[1])==0:
return True
if len(parts[0])==1 and parts[0] in '+-' and self.is_pos_Integer(parts[1]):
return True
return False
if self.isInteger(s):
return True
return False
def isInteger(self, s): # 判断是否整数
if (s.startswith('+') or s.startswith('-')) and self.is_pos_Integer(s[1:]):
return True
if self.is_pos_Integer(s):
return True
return False
def is_pos_Integer(self, s): # 判断是否正整数
if len(s) < 1:
return False
for c in list(s):
if c not in '0123456789':
return False
return True
def isNumber(self, s):
"""
:type s: str
:rtype: bool
"""
s = s.strip()
if 'e' in s:
parts = s.split('e')
if len(parts) != 2:
return False
if self.isFloat(parts[0]) and self.isInteger(parts[1]):
return True
return False
if 'E' in s:
parts = s.split('E')
if len(parts) != 2:
return False
if self.isFloat(parts[0]) and self.isInteger(parts[1]):
return True
return False
if self.isFloat(s):
return True
return False
注意啊,代码为python3