You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:04