如何在Python中实现符合指定规则的有效数字校验?
原有代码错误分析
首先你的代码存在2个核心问题:
- 语法错误:
y = 11SS写法不符合Python语法规则,未加引号的11SS会被解释器识别为变量名,未提前定义就调用必然报错。如果是要表示输入的字符串内容,需要加引号写成y = "11SS" - 逻辑错误:
if type(y) == int or float的判断逻辑完全错误,该表达式等价于(type(y) == int) or (float),而float类本身属于布尔真值,所以无论输入是什么,这个判断永远返回True,无法起到校验作用。另外如果输入是待校验的字符串内容,本身类型就是str,直接判断类型也不可能匹配int或float。
有效数字校验实现方案
你需要校验的是字符串格式的输入内容是否符合整数/合法浮点数规则,推荐两种实现方式:
方案1:异常捕获法(最简单通用)
原理是尝试把输入字符串转为浮点型,转换成功则为合法数字,转换失败则为非法内容,同时可以额外排除inf、NaN这类特殊非有效数值:
def is_valid_number(input_str: str) -> bool: try: num = float(input_str) # 排除无穷大、非数值这类特殊浮点值 return not (num == float('inf') or num == float('-inf') or num != num) except ValueError: return False # 测试用例 test_cases = ["123", "43.76", "89", "100000", "78765.987", "123abc", "7.9.8", "afadf", "*&^dadsf", "11SS"] for case in test_cases: print(f"{case}: {'valid' if is_valid_number(case) else 'non valid'}")
方案2:正则匹配法(自定义规则更灵活)
如果你需要更严格的规则控制,可以用正则表达式匹配合法数字格式:
import re def is_valid_number(input_str: str) -> bool: # 正则规则:可选正负号,匹配整数/仅一个小数点的浮点数 pattern = r'^[+-]?(\d+\.?\d*|\.\d+)$' return bool(re.fullmatch(pattern, input_str)) # 测试用例同上即可
内容的提问来源于stack exchange,提问作者JAKY
相关产品推荐
相关产品推荐

