typeerror slice索引必须是整数或无,或者具有__index__方法

时间:2017-03-07 11:18:09

标签: python list

我厌倦了运行这个程序,但它会在第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))

1 个答案:

答案 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