Индекс списка не обновляется в цикле for (python) - PullRequest
1 голос
/ 18 октября 2019

В отдельном определении я пытаюсь получить индекс ')', а затем зацикливаться в обратном порядке, пока не получу '('. Обратный оператор работает, и оператор продолжает оставаться в первом индексе ')',По какой причине индекс не может обновляться?

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

1 Ответ

0 голосов
/ 18 октября 2019

Суть проблемы в следующем:

            for multiplcation in element[element.index(first)::-1]:

Вы резервируете от появления первого RPAREN в вашей строке, а не от того, который вы только что нашли. В данном примере вы будете всегда возвращаться, чтобы пройти через «CN» для последующих скобок.

Я рекомендую вам изменить код: разбейте уравнение на молекулы;написать функцию, чтобы вернуть расширение каждой отдельной молекулы. join все вместе, если вам нужно восстановить все уравнение.

Это поможет вам преодолеть текущую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...