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

Python计算化合物摩尔质量时报无法将序列与float相乘错误如何解决

问题根因
  • 条件判断逻辑错误:match.group(2) 是正则匹配返回的字符串类型,仅可能为空字符串或数字组成的字符串,永远不可能等于整数0。因此当元素后没有标注原子数(如H₂O中的O)时,代码会进入else分支,将空字符串赋值给atoms变量,字符串属于序列类型,和float类型相乘就会触发对应报错。
  • 缺少类型转换逻辑:就算元素后标注了原子数,match.group(2)返回的也是字符串格式的数字(如"2"),未转成数值类型直接参与乘法运算,同样会触发类型错误。
修复方案

修正判断条件,同时对匹配到的数字字符串做类型转换即可,修正后的完整代码如下:

import re
import chemistry


def mol_weight(formula):
    result = 0
    # 用原生字符串定义正则,无需额外转义反斜杠
    pattern = r"([A-Z][a-z]*)(\d{0,2})"

    for match in re.finditer(pattern, formula):
        num_part = match.group(2)
        # 判断数字部分是否为空,为空默认原子数为1
        if not num_part:
            atoms = 1
        else:
            # 原子数为整数,直接转int即可
            atoms = int(num_part)
        result += atoms * chemistry.atom_weight(match.group(1))

    return result

内容的提问来源于stack exchange,提问作者Nicolás Marcelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:15:03