【问题标题】: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

为什么它有时会弹出但并非总是如此,是什么原因造成的?

【问题讨论】:

    标签: python string valueerror


    【解决方案1】:

    欢迎来到 Stackoverflow。作为 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 是什么意思。但是第二次运行时相同的程序给了我正确的输出:
    • 有趣。我很困惑这怎么会发生?据我了解,您将始终获得与上面显示的相同的输出。您能否详细说明“第二次”是什么意思?
    • 当我没有更改并且只是第二次运行时,由于某种原因它给出了正确的输出。
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 2015-06-06
    • 1970-01-01
    • 2020-07-03
    • 2015-06-23
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多