Python化学元素符号合法性校验代码bug修复求助
化学元素符号有效性校验函数修正方案
问题原因
原有代码使用element.find()默认从字符串起始位置查找字符首次出现的下标,没有考虑同一字符可能在元素名称中多次出现的场景,因此会出现顺序判断错误的问题。
实现思路
- 前置校验规则1:首字母必须大写,不符合直接返回False
- 前置校验规则3:如果传入了length参数,提前判断symbol长度是否匹配,减少不必要的后续逻辑
- 统一将symbol和element转为小写,避免大小写不匹配的隐藏问题
- 维护
last_pos变量记录上一个字符的匹配位置,每次查找下一个字符时,从last_pos + 1的位置开始检索,保证字符顺序和symbol一致
修正后代码
def isvalid(symbol, element, length=None): # 校验首字母大写规则 if not symbol[0].isupper(): return False # 校验可选长度规则 if length is not None and len(symbol) != length: return False # 统一转小写避免大小写匹配问题 symbol_lower = symbol.lower() element_lower = element.lower() last_pos = -1 # 校验字符顺序规则 for char in symbol_lower: # 从上一个匹配位置的下一位开始查找当前字符 current_pos = element_lower.find(char, last_pos + 1) # 找不到对应字符直接返回False if current_pos == -1: return False last_pos = current_pos # 所有规则校验通过 return True
测试验证
调用isvalid('Rcm', 'Americium')时,会依次查找r→索引3,c→索引5,m→索引8,顺序符合要求,最终返回True,符合预期。
内容的提问来源于stack exchange,提问作者Monkey D. Ruffy
相关产品推荐
相关产品推荐

