如何处理“字符串索引超出范围”在Python中
我正在学习一些Python,并且正在进行Python工作簿练习。现在,我被困在一个叫做strinking的字符串上。我确定您知道这意味着什么。在我的情况下,字符串必须是一个数学方程式,我的代码必须将其归为代价。 这是我的代码:
def tokenizer(x):
x=x.replace(" ","")
list = []
j=0
l=len(x)
temp=""
while j < len(x):
if x[j] == "*" or x[j] == "/" or x[j] == "+" or x[j] == "-" or x[j] == "^" or x[j] == "(" or x[j] == ")":
list.append(x[j])
j=j+1
while x[j]>="0" and x[j]<="9":
temp = temp + x[j]
while j<len(x):
j=j+1
if temp!="":
list.append(temp)
temp=""
return list
def main():
x=input("Enter math expression: ")
list=tokenizer(x)
print("the tokens are: ",list)
if __name__ == '__main__':
main()
问题是我找不到没有用完范围的解决方案。这一切都来自“ while”循环。我尝试了本书中的解决方案,该解决方案与我的书籍非常相似,但是它给出了相同的结果。在我的情况下,我如何避免使用时用尽范围并添加以对抗“ J”?
谢谢 !!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题是您在此块中添加1至
j
:让我们说
。由于我们知道索引从零开始,因此对于
j = len(x)-1 -1
和if语句评估为true 。这将执行
> x [len(x)]J = J+1
语句。现在,当它输入
时loop
时,它会检查x [j]&gt; =“ 0”
但x [j]
=x [j]&gt; =“ 0”
len(a)= 4
但a [4]
不存在的数组(最后一个元素是第三个)indexError
。带有更正的代码:
The problem is you are adding 1 to
j
in this block:Let's say
j = len(x)-1
and the if statement evaluates to beTrue
. This will execute thej=j+1
statement.Now when it enters the
while loop
, it checks whetherx[j]>="0"
butx[j]
=x[len(x)]
. Since we know that indexing starts at zero, for an array likelen(a) = 4
buta[4]
does not exist(last element is 3rd one) causing anIndexError
.Code with corrections:
我不知道为什么会起作用:
我更改了“ x [j]&gt; =“ 0”和x [j]&lt; =“ 9”“使用.isnumeric()的语句,并且由于某些奇怪的原因,它现在有效。对我来说,这两个条件都是相同的。谁能解释为什么有效?我真的很想学习如何克服以后的案件而不会失去理智!!!
谢谢
I have no idea why but this works :
I change the " x[j]>="0" and x[j]<="9"" statement with .isnumeric() and for some weird reason it now works . For me both conditions are identical . Can anyone explain why this works ? I really want to learn how to overcome cases like that in future without loosing my sanity !!!
Thanks