我厌倦了运行这个程序,但它会在第15行给我上面的错误 该程序应该评估一个预序算术表达式,它从stdin获取一个表达式并输出结果
return (preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) + preOrder( lst [ (len(lst) + 1)/2 : ] ))
这是我的程序
def preOrder(lst) :
if len(lst) == 3 :
if lst[0] == '+' :
return lst[1] + lst[2]
elif lst[0] == '-' :
return lst[1] - lst[2]
elif lst[0] == '*' :
return lst[1] * lst[2]
elif lst[0] == '/' :
return lst[1] / lst[2]
elif lst[0] == '%' :
return lst[1] % lst[2]
else :
if lst[0] == '+' :
return (preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) + preOrder( lst [ (len(lst) + 1)/2 : ] ))
elif lst[0] == '-' :
return preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) - preOrder( lst [ (len(lst) + 1)/2 : ] )
elif lst[0] == '*' :
return preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) * preOrder( lst [ (len(lst) + 1)/2 : ] )
elif lst[0] == '/' :
return preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) / preOrder( lst [ (len(lst) + 1)/2 : ] )
elif lst[0] == '%' :
return preOrder( lst [ 1 : ( (len(lst)+1)/2) ] ) % preOrder( lst [ (len(lst) + 1)/2 : ] )
pre = ['+', '+', 6, 3, '-', 8, 4]
print ("preorder:")
print (pre)
print (preOrder(pre))
答案 0 :(得分:8)
假设:您正在运行Python 3(或生效from __future__ import division
的Python 2)。在Python 3上,/
运算符是" true"除了int
个操作数之外,结果总是float
,它不是有效的切片索引。
如果你想要类似C的截断分割(技术上,分区,但差异与正数无关),请使用//
运算符,int
个操作数产生向下舍入的结果该部门为int
。 {2}也可以在Python 2上使用{带有或不带//
导入),并且可以在那里使用它来明确你想要分层,轻松移植到Python 3。
即,将__future__
的每个实例更改为(len(lst)+1)/2
。