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

Posted

技术标签:

【中文标题】如何根据数学符号划分字符串?【英文标题】:How can i divide string based on matematical symbole? 【发布时间】:2020-06-11 22:10:11 【问题描述】:

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

欢迎来到 ***。作为 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']

很明显,当没有更多的“+”时,你会得到 ​​p>

ValueError: '+' 不在列表中

那么这是怎么发生的呢?

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

在第 2 行中,您在每次迭代时从数组中弹出“+”,即存储在znkakik 数组中的索引值。一旦你对所有的人都这样做了,你最终不会再有“+”,然后是错误。

【讨论】:

我明白 ValueError 是什么意思。但是第二次运行时相同的程序给了我正确的输出: 有趣。我很困惑这怎么会发生?据我了解,您将始终获得与上面显示的相同的输出。您能否详细说明“第二次”是什么意思? 当我没有更改并且只是第二次运行时,由于某种原因它给出了正确的输出。

以上是关于如何根据数学符号划分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

(急)c#中的换列符号是啥

SQL如何根据符号截取字符串

试图用数学符号在jsp中显示

如何在 Oracle 中的每个破折号后划分字符并根据提取的值创建新列?

LaTeX一些数学公式中常用符号

Markdown常用操作:数学符号、空格、字体