Python 如何在列表中将系数与其变量分开?
因此,我的问题比标题所暗示的要多一些。我正在写一个程序来计算化合物的摩尔质量。到目前为止,我已经用它来研究每种元素不超过一种的化合物,比如NaCl,但是我需要它来计算H2O的质量。以下是我目前掌握的代码:Python 如何在列表中将系数与其变量分开?,python,python-2.7,Python,Python 2.7,因此,我的问题比标题所暗示的要多一些。我正在写一个程序来计算化合物的摩尔质量。到目前为止,我已经用它来研究每种元素不超过一种的化合物,比如NaCl,但是我需要它来计算H2O的质量。以下是我目前掌握的代码: import re atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16} input = raw_input() elementList = (re.findall('[A-Z][^A-Z]*', input)) wt_list = [
import re
atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16}
input = raw_input()
elementList = (re.findall('[A-Z][^A-Z]*', input))
wt_list = []
for element in elementList:
elem_wt = atomic_wt[element]
wt_list.append(elem_wt)
# print elem_wt
print "%sg" % sum(wt_list)
当我输入类似H2O的内容时,它会返回一个错误,表示H2不在我的字典中。你建议我怎样把H和2分开?还有,你建议我如何告诉它在进行加法之前将元素的值乘以它们的系数?我在你的代码中做了一定的修改,以将系数从使用正则表达式取出的元素中分离出来
import re
atomic_wt = {'Na':22.99, 'Cl':35.45, 'H':1.008, 'O':16}
input = raw_input()
elementList = (re.findall('[A-Z][^A-Z]*', input))
wt_list = []
for element_withcoeff in elementList:
#Separate the coefficients
coeffList = re.findall(r'\d+', element_withcoeff)
if len(coeffList) < 1:
coeff = 1 #If no coefficent is defined use 1 as default
else:
coeff = int(coeffList[0])
#Separate the element name for dictionary lookup
element = filter(lambda c: not c.isdigit(), element_withcoeff)
print coeff, element
#Calculate using coeff
elem_wt = coeff * atomic_wt[element]
wt_list.append(elem_wt)
print "%sg" % sum(wt_list)
重新导入
原子_wt={'Na':22.99,'Cl':35.45,'H':1.008,'O':16}
输入=原始输入()
elementList=(关于findall(“[A-Z][^A-Z]*”,输入))
wt_列表=[]
对于元素列表中带有系数的元素_:
#分离系数
coeffList=re.findall(r'\d+',带有coeff的元素_)
如果len(coeffList)<1:
系数=1#如果未定义系数,则使用1作为默认值
其他:
coeff=int(coeflist[0])
#为字典查找分隔元素名称
滤芯=过滤器(λc:非c.isdigit(),滤芯带系数)
打印系数,元素
#用系数计算
元素=系数*原子元素[元素]
wt_list.append(元素wt)
打印“%sg”%sum(工作列表)
注意:我不是化学专业的学生,因此请确保计算摩尔质量id的逻辑正确与否。谢谢!那太完美了。帮助很大:)