如何根据数学符号划分字符串?
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 是什么意思。但是第二次运行时相同的程序给了我正确的输出: 有趣。我很困惑这怎么会发生?据我了解,您将始终获得与上面显示的相同的输出。您能否详细说明“第二次”是什么意思? 当我没有更改并且只是第二次运行时,由于某种原因它给出了正确的输出。以上是关于如何根据数学符号划分字符串?的主要内容,如果未能解决你的问题,请参考以下文章