如何编写Python函数实现字符串到Int、Float或原字符串的自动解析
Python 函数 parseValue 实现
实现思路
- 优先判断是否为符合规则的整数字符串:尝试转为int,转换成功后检查是否存在前置零(长度大于1且首字符为0,负数则检查负号后首字符),符合要求则返回int类型结果
- 若不是合法整数,判断字符串是否包含小数点,包含则尝试转为float,转换成功则返回float类型结果
- 上述两种情况都不满足时,直接返回原字符串
完整代码
def parseValue(v): # 先判断是否为无前置零的整数 try: int_num = int(v) # 检查前置零情况 if v.startswith('-'): # 负数情况:去掉负号后长度>1时不能以0开头 if len(v) <= 2 or v[1] != '0': return int_num else: # 非负数情况:长度>1时不能以0开头 if len(v) <= 1 or v[0] != '0': return int_num except ValueError: # 不是整数格式,继续后续判断 pass # 判断是否为合法浮点数 if '.' in v: try: float_num = float(v) return float_num except ValueError: # 不是合法浮点数,返回原串 return v # 所有转换规则都不匹配,返回原字符串 return v
测试验证
用题目给出的示例验证效果如下:
print(type(parseValue("123.45")), parseValue("123.45")) # 输出 <class 'float'> 123.45 print(type(parseValue("12345")), parseValue("12345")) # 输出 <class 'int'> 12345 print(type(parseValue("-23")), parseValue("-23")) # 输出 <class 'int'> -23 print(type(parseValue("Florida")), parseValue("Florida")) # 输出 <class 'str'> Florida print(type(parseValue("0.12")), parseValue("0.12")) # 输出 <class 'float'> 0.12 print(type(parseValue("0010")), parseValue("0010")) # 输出 <class 'str'> 0010
内容的提问来源于stack exchange,提问作者TW2021
相关产品推荐
相关产品推荐

