如何编写函数判断字母数字字符串中首个出现的数字是否为0
判断字母数字串中第一个出现的数字是否为0
需求说明
实现函数,识别字符串里出现的第一个数字是否为0:
- 例:输入
"J02"时,第一个数字为0,预期返回True - 需兼容两类输入:包含数字的字母数字混合串、无数字的纯字母串
原有代码问题
现有版本存在3个核心逻辑错误:
x = "J02" def not_starting_zero(m): zero_string = [] for char in m: if char.isdigit() == True: zero_string.append(char) if m[len(m)-1] == char: if zero_string[0] == "0": return False else: return True not_starting_zero(x)
- 触发判断的条件错误:只有当遍历到的数字刚好是字符串最后一位时才会做结果判断,只要第一个数字出现在字符串中间位置,就不会触发返回,甚至会出现结果判断和预期相反的问题
- 无纯字母场景的兜底逻辑:如果字符串全是字母,遍历完所有字符也没有命中返回分支,函数会默认返回
None,不符合布尔返回的要求 - 之前尝试加同级else的写法错误:和
if char.isdigit() == True:同级的else会在当前字符不是数字时立刻触发返回,遍历到第一个字母就直接退出函数,根本不会继续向后查找数字,自然得不到正确结果
正确实现
不需要维护列表存储所有数字,遍历到第一个数字时直接判断即可,遍历完成未找到数字的场景单独做兜底处理:
def not_starting_zero(m: str) -> bool: for char in m: if char.isdigit(): # 找到第一个数字,直接判断是否为0,返回对应结果 return char == "0" # 纯字母无数字的场景,可根据业务需求调整返回值,这里默认返回False return False
逻辑验证
- 输入
"J02":遍历到索引1的'0',返回True,符合预期 - 输入
"A123":第一个数字为'1',返回False - 输入
"0abc":第一个数字为'0',返回True - 输入
"abc":无数字,走兜底逻辑返回False - 输入
"x9y0":第一个数字为'9',返回False,不会被后续出现的0干扰
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

