如何根据数学符号划分字符串?

How can i divide string based on matematical symbole?

一开始对不起我的英语。我在 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

为什么有时会弹出但不总是弹出,是什么原因造成的?

欢迎使用 Whosebug。作为 python 的初学者,您绝对应该考虑使用 python 可视化工具来理解代码的整个逻辑。参见 here

运行 你的代码给出了这个输出:

['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: '+' is not in list

那么这是怎么发生的呢?

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

在第 2 行中,您在每次迭代时从数组中弹出“+”,即存储在 znkakik 数组中的索引值。完成所有操作后,您将不再有“+”,然后是错误。