【问题标题】:typeerror slice indices must be integers or none or have an __index__ methodtypeerror 切片索引必须是整数或无或具有 __index__ 方法
【发布时间】:2017-07-27 13:54:34
【问题描述】:

我厌倦了运行这个程序,但它会在第 15 行给我上面的错误 该程序应该评估一个预序算术表达式,它从标准输入获取一个表达式并输出结果

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))

【问题讨论】:

    标签: python list


    【解决方案1】:

    假设:您正在运行 Python 3(或使用 from __future__ import division 生效的 Python 2)。在 Python 3 上,/ 运算符是“真”除法,即使对于 int 操作数,结果也始终是 float,它不是有效的切片索引。

    如果您想要类似 C 的截断除法(技术上是取整除法,但差异与正数无关),请使用 // 运算符,该运算符对于 int 操作数产生四舍五入的除法结果作为int// 在 Python 2 上也可用(带或不带 __future__ 导入),并且可以在那里使用以明确您想要地板划分,从而轻松移植到 Python 3。

    也就是说,将(len(lst)+1)/2 的每个实例更改为(len(lst)+1) // 2

    【讨论】:

      猜你喜欢
      • 2015-04-01
      • 2017-10-16
      • 2018-06-06
      • 2018-09-21
      • 2020-07-01
      • 2021-08-21
      • 1970-01-01
      • 2014-01-11
      • 2022-08-11
      相关资源
      最近更新 更多