Как я могу разделить строку на основе математического символа? - PullRequest
1 голос
/ 27 февраля 2020

В начале извините за мой английский sh. Я написал некоторый код в PyCharm, где я пытаюсь разделить строку с помощью математических операторов, таких как +, -, itp и числа, но в то же время сохраняя положение математических операторов и их значения.

string = '1234 - 4332 / 23 + 13 + 12 + 3213'
znaki = []
znakik = []
ilznak = string.count('+')+string.count('-')+string.count('/')+string.count('*')
i = [0,0,0,0]
num = string.split(" ")
print(num)
x = len(num)
while num.count('+')+i[0] >= i[0]:
    znaki.append('+')
    znakik.append(num.index('+'))
    print(znakik)
    num.pop(num.index('+'))
    i[0] = i[0] + 1
    print(num)

Иногда это работает, но иногда выдает ошибку:

Traceback (most recent call last):
  File "D:/Prog/Python/Działaniastring.py", line 11, in <module>
    znakik.append(num.index('+')+i[0])
ValueError: '+' is not in list

Почему это иногда появляется, но не всегда, и что вызывает это?

1 Ответ

0 голосов
/ 27 февраля 2020

Добро пожаловать в Stackoverflow. Как новичку в python, вам определенно следует рассмотреть возможность использования визуализатора python для понимания всей логики c кода. см. здесь

Выполнение вашего кода дает следующий вывод:

['1234', '-', '4332', '/', '23', '+', '13', '+', '12', '+', '3213']
[5]
['1234', '-', '4332', '/', '23', '13', '+', '12', '+', '3213']
[5, 6]
['1234', '-', '4332', '/', '23', '13', '12', '+', '3213']
[5, 6, 7]
['1234', '-', '4332', '/', '23', '13', '12', '3213']

И, очевидно, когда больше не остается '+', вы получите ошибку, которая

ValueError: '+' отсутствует в списке

Так как же это происходит?

1    znakik.append(num.index('+'))
2    num.pop(num.index('+'))

В строке 2 вы получаете «+» из массива на каждой итерации, т.е. значение индекса хранится в массиве znkakik. Как только вы сделаете это для всех, у вас не останется больше «+», а затем ошибка.

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