在单独的定义中,我尝试获取')'的索引,然后反向循环直到得到'('。反向语句有效,并且该语句继续停留在')'的第一个索引上。索引无法更新的原因是什么?
class elements:
periodic_table = ['']
def __init__(self, equation):
self.equation = equation
def poly(self):
polyatomic = 'C2H3O2', 'HCO3', 'HSO4', 'ClO', 'ClO3', 'ClO2', 'OCN', 'CN', 'H2PO4', 'OH', 'NO3', 'NO2', 'ClO4', 'MnO4', 'SCN',
return polyatomic
def separate(self):
element = elements.equation
list1 = []
for first, second in zip(element, element[1:]):
if first == ')' and second.isdigit():
multiply = int(second)
print(first, second)
print(element.index(first))
for multiplcation in element[element.index(first)::-1]:
if multiplcation == '(':
break
elif multiplcation != ')':
final = multiplcation * multiply
print(final)
if first == '=':
list1.append(first)
elif first.isupper() and second.islower():
list1.append(first + second)
elif first.isupper() and second.isdigit():
amount = first * int(second)
list1.append(amount)
elif first.isupper():
list1.append(first)
elements = elements(
'K4Fe(CN)6 + KMnO4 + H2SO4 = KHSO4 + Fe2(SO4)3 + MnSO4 + HNO3 + CO2 + H2O')
print(elements.separate())
答案 0 :(得分:0)
问题的症结在这里:
for multiplcation in element[element.index(first)::-1]:
您是从字符串中的第一次出现RPAREN进行备份,而不是从刚刚发现的RPAREN中进行备份。在给定的示例中,您将总是返回以遍历“ CN”以获取以后的任何括号。
我建议您重新设计代码:将方程分解为分子;编写一个函数以返回每个分子的膨胀。如果您需要重新构造整个方程,请join
一起使用。
那应该使您摆脱当前的问题。