2017-03-07 3 views
0

이 프로그램을 실행하는 데 지겹지 만 15 행에서 위의 오류가 발생합니다. 하나의 표현식을 사용하는 preorder 산술 표현식을 평가하는 프로그램 표준 입력과 출력 결과타입 오류 슬라이스 인덱스는 정수 또는 없음 또는 __index__ 메소드가 있어야합니다.

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

답변

8

가정입니다 : 당신은 (효과 from __future__ import division 또는 파이썬 2) 파이썬 3을 실행하고 있습니다. 파이썬 3에서 / 연산자는 "참"구분이며, 결과는 int 피연산자에 대해서도 항상 유효한 슬라이스 색인이 아닌 float입니다. 만약 C 형 절단 단계 분할 할 (기술적 바닥 분열하지만, ​​차이는 양의 수에 대한 관계가 있으면)

int 피연산자위한 int로 분할의 내림 결과를 생성 // 연산자를 사용한다. //합니다 (__future__ 가져 오기를 사용하거나 사용하지 않고)뿐만 아니라 파이썬 2에서 사용할 수 있으며,에 (len(lst)+1)/2의 모든 인스턴스를 변경 완화 파이썬입니다 3.

에 포팅, 당신은 바닥 부문을 원하는이 모호하게 사용할 수있다 (len(lst)+1) // 2.

+0

그리고 그것이 내 시스템에서 작동하는지 궁금해. :) –

관련 문제