首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有些数据没有存储在数组中。

有些数据没有存储在数组中。
EN

Stack Overflow用户
提问于 2019-08-31 21:28:21
回答 1查看 41关注 0票数 1

所以我正在研究这个代码,它把化学方程分解成化合物,然后把它们分解成元素和原子的数目。但是,由于某种原因,每个化合物的最后一个元素没有存储在数组中。

代码语言:javascript
复制
class compound(object):  # A class of compounds. It stores all the relevant data for the compound
    def __init__(self, n_compound):
        self.n_compound = n_compound
        self.f_compound = str(n_compound)
        temp = ""
        e = ""
        v = "0"
        self.element = []
        self.val = []
        for i in range(0, len(self.f_compound)-1):
            if self.f_compound[i].isalpha() and self.f_compound[i+1].isupper():
                temp += self.f_compound[i] + "1"
            else:
                temp += self.f_compound[i]
        temp += self.f_compound[len(self.f_compound) - 1]
        if temp[len(temp)-1].isalpha():
            temp += "1"
        self.f_compound = temp
        ########issue is appearing in the code here
        for i in range(0, len(self.f_compound)):
            if self.f_compound[i].isalpha():
                if v != "0":
                    self.element.append(str(e))
                    self.val.append(int(v))
                    e = self.f_compound[i]
                    v = "0"
                    i -= 1
                else:
                    e += self.f_compound[i]
            elif self.f_compound[i].isdigit():
                v += self.f_compound[i]
        ########This block of code Is not working properly 
        print(self.n_compound)
        for x in range(0, len(self.element)):
            print(self.element[x] + ": " + str(self.val[x]))
        print(".............................................")



equation = str('Cu + HNO3 -> CuN2O6 + H2O + NO')
#str(input("Enter chemical equation: "))
equation = equation.replace("->", "+").replace(' ', '')
compounds = []  # An array of compounds

for i in range(0, len(equation.split("+"))):
     # Assigning a compound name to an object of the compound class and storing it in the array
    compounds.append(compound(equation.split("+")[i]))

我得到了这个输出:

Cu

.

HNO3

H: 1

编号:1

.

CuN2O6

首席执行官:1

N: 2

.

H2O

H: 2

.

不是

编号:1

.

然而,正确的输出应该是:

Cu

首席执行官:1

.

HNO3

H: 1

编号:1

O: 3

.

CuN2O6

首席执行官:1

N: 2

O: 6

.

H2O

H: 2

O: 1

.

不是

编号:1

O: 1

.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-31 22:04:33

如果没有显示最后一个元素,这意味着您必须查看for循环是否排除它,或者只是在最后一次迭代之后不处理结果。

在这种情况下,我认为只需在循环结束后追加最后一个元素及其价态:

代码语言:javascript
复制
for i in range(0, len(self.f_compound)):
    if self.f_compound[i].isalpha():
        if v != "0":
            self.element.append(str(e))
            self.val.append(int(v))
            e = self.f_compound[i]
            v = "0"
            i -= 1
        else:
            e += self.f_compound[i]
    elif self.f_compound[i].isdigit():
        v += self.f_compound[i]
# Fix :
self.element.append(str(e))     
self.val.append(int(v))     

结果:

代码语言:javascript
复制
Cu
Cu: 1
.............................................
HNO3
H: 1
N: 1
O: 3
.............................................
CuN2O6
Cu: 1
N: 2
O: 6
.............................................
H2O
H: 2
O: 1
.............................................
NO
N: 1
O: 1
.............................................    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57741705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档