Python 阵列中未存储某些数据

Python 阵列中未存储某些数据,python,python-3.x,Python,Python 3.x,所以我在写这个代码,它把化学方程式分解成化合物,然后把它们分解成元素和它们的原子数。但是,由于某些原因,每个化合物的最后一个元素没有存储在数组中 class复合词(object):#一类复合词。它存储化合物的所有相关数据 定义初始值(自,n_化合物): self.n_复合=n_复合 self.f_复合=str(n_复合) temp=“” e=“” v=“0” self.element=[] self.val=[] 对于范围(0,len(自f_化合物)-1)内的i: 如果self.f_复合[i].

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

class复合词(object):#一类复合词。它存储化合物的所有相关数据
定义初始值(自,n_化合物):
self.n_复合=n_复合
self.f_复合=str(n_复合)
temp=“”
e=“”
v=“0”
self.element=[]
self.val=[]
对于范围(0,len(自f_化合物)-1)内的i:
如果self.f_复合[i].isalpha()和self.f_复合[i+1].isupper():
temp+=自f_复合[i]+“1”
其他:
温度+=自f_化合物[i]
温度+=自f_化合物[len(自f_化合物)-1]
如果温度[len(temp)-1].isalpha():
温度+=“1”
自f_化合物=温度
########问题出现在这里的代码中
对于范围(0,len(自f_化合物))内的i:
如果self.f_复合[i].isalpha():
如果v!="0":
self.element.append(str(e))
self.val.append(int(v))
e=自f_化合物[i]
v=“0”
i-=1
其他:
e+=自f_化合物[i]
elif self.f_复合[i].isdigit():
v+=自f_化合物[i]
########这段代码工作不正常
印刷品(自印复合)
对于范围(0,len(self.element))中的x:
打印(self.element[x]+“:”+str(self.val[x]))
印刷品(……)
方程式=str('Cu+HNO3->CuN2O6+H2O+NO')
#str(输入(“输入化学方程式:”)
等式=等式。替换(“->”,“+”)。替换(“”,“”)
复合物=[]#一组复合物
对于范围(0,len(方程式拆分(“+”)中的i):
#将复合名称分配给复合类的对象并将其存储在数组中
复合物。追加(复合物(方程式拆分(“+”[i]))
我得到以下输出:

Cu
.............................................
硝酸
H:1
N:1

CuN2O6
Cu:1
N:2

H2O
H:2


N:1

但是,正确的输出应该是:

Cu
Cu:1
.............................................
硝酸
H:1
N:1
O:3

CuN2O6
Cu:1
N:2
O:6

H2O
H:2
O:1


N:1
O:1

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

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

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))     

结果:

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
.............................................    

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

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

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))     

结果:

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
.............................................