擅长:python、mysql、java
<p>以下是我对如何解决这个问题的看法。基本上,你可以跟踪当前的“状态”并对每个字符进行一次精确的迭代,这样你就不会忘记你在哪里或者类似的东西。在</p>
<pre><code>def getWeightFromChemical(chemical):
chemicals = {"C" : 6, "H" : 1, "O" : 8}
return chemicals.get(chemical, 0)
def chemicalWeight(chemicalFormula):
lastchemical = ""
currentnumber = ""
weight = 0
for c in chemicalFormula:
if str.isalpha(c): # prepare new chemical
if len(lastchemical) > 0:
weight += getWeightFromChemical(lastchemical)*int("1" if currentnumber == "" else currentnumber)
lastchemical = c
currentnumber = ""
elif str.isdigit(c): # build up number for previous chemical
currentnumber += c
# one last check
if len(lastchemical) > 0:
weight += getWeightFromChemical(lastchemical)*int("1" if currentnumber == "" else currentnumber)
return weight
</code></pre>
<p>顺便说一句,有人知道如何重构这个代码段,使之不再有两次吗?我很讨厌。在</p>