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
相关产品推荐
相关产品推荐

