Python 为表达式索引错误的字符

Python 为表达式索引错误的字符,python,python-3.x,indexing,Python,Python 3.x,Indexing,我的程序似乎在索引错误的字符,或者根本没有 我写了一个允许使用表达式的基本计算器。它的工作原理是让用户输入表达式,然后将其转换为一个列表,将第一个数字索引到位置0,然后使用try/except语句索引number2和运算符。所有这些都在while循环中,当用户在提示下输入done时,该循环将完成 如果我像这样键入表达式“1+1”,程序似乎运行良好,但是如果我添加空格“1+1”,它将无法对其进行索引,或者如果我在“1+1”后面加上“1+1”,它将对运算符进行索引 我以前在一次群聊中询问过,有人告诉

我的程序似乎在索引错误的字符,或者根本没有

我写了一个允许使用表达式的基本计算器。它的工作原理是让用户输入表达式,然后将其转换为一个列表,将第一个数字索引到位置0,然后使用try/except语句索引number2和运算符。所有这些都在while循环中,当用户在提示下输入done时,该循环将完成

如果我像这样键入表达式“1+1”,程序似乎运行良好,但是如果我添加空格“1+1”,它将无法对其进行索引,或者如果我在“1+1”后面加上“1+1”,它将对运算符进行索引

我以前在一次群聊中询问过,有人告诉我使用标记化而不是我的方法,但我想在转到其他方面之前了解为什么我的程序不能正常运行

这是我的密码:


谢谢大家!

在处理字符串之前,可以使用
replace()
删除空格

尝试添加:

clean\u input=hold\u input.replace(“,”)

在创建
hold\u input

之后,字符串基本上是字符列表
1+1
包含三个字符,而
1+1
包含五个字符,因为添加了两个空格。因此,当您访问这个较长字符串中的第三个字符时,实际上是在访问中间的元素

解析输入通常并不容易,当然解析算术表达式可能会很快变得棘手。按照@Sethroph的建议,从输入中删除空格是一个可行的解决方案,但只会走那么远。如果您突然需要支持像
1+2+3
这样的东西,它仍然会崩溃

另一个解决方案是在操作符上拆分输入。例如:

input='1+2'
terms=input.split('+')#['1','2']注意空格
terms=map(int,terms)#[1,2],因为int()可以处理前导/尾随空格
输出=条款[0]+条款[1]
尽管如此,尽管这可以处理像
1+2+3
这样的情况,但当涉及多个不同的运算符或有括号时,它仍然会中断(但这可能是您不必担心的事情,取决于您希望计算器的复杂程度)


在我看来,一个更好的方法确实是使用标记化。就我个人而言,我会使用解析器组合器,但这可能有点过头了。作为参考,这里有一个函数,它的输入使用Python的解析器组合器库
parsy
进行解析。

欢迎使用StackOverflow!作为新用户,您应该阅读。这个网站有关于如何提问的规则,但这个网站不遵守这些规则。。。具体来说,你应该在问题本身中提供一个答案。因此,我不会回答,但仍然给你一个提示:你正在搜索[1-4]范围内的第二个数字,如果不包含空格字符,这很好,但是如果有2个空格,则太短。祝你好运,希望你的下一个问题会更好:-)请将代码放在你的问题中,而不是放在其他网站上。