2012-06-25 7 views
29
import math 
import os 


class collection: 
    col = [[0 for col in range(5)] for row in range(6)] 
    dist = [[0 for col in range(6)] for row in range(6)] 
    filename = "" 
    result = "" 

    def __init__(self,arg1): 
     self.filename = arg1 

    def coll(self): 

     for i in range(6): 
      try: 
       if(i==0): 
        f = open(self.filename,'r') 
       elif(i==1): 
        f = open("chap1.txt",'r') 
       elif(i==2): 
        f = open("chap2.txt",'r') 
       elif(i==3): 
        f = open("chap3.txt",'r') 
       elif(i==4): 
        f = open("chap4.txt",'r') 
       elif(i==5): 
        f = open("chap5.txt",'r') 

       for j in range(5): 
        self.result = f.readline() 
        self.col[i][j] = self.result 
      finally: 
       print "file handling error" 

    def distance(self): 
     for i in range[6]: 
      for j in range[6]: 
       dis = 0 
       for k in range[5]: 
        dis += math.fabs((self.col[i][k]-self.col[j][k])*(j-i)) 
       self.dist[i][j] = dis 
       self.dist[i][i] = sys.maxdouble 
     return self.dist 

class profile: 
    dist = [[0 for col in range(6)]for row in range(6)] 
    filename = "" 
    pque = [[0 for col in range(6)]for row in range(6)] 
    d = [[0 for col in range(6)]for row in range(6)] 
    par = [[0 for col in range(6)]for row in range(6)] 
    st = 0 

    def __init__(self,arg1): 
     self.filename = arg1 

    def begin(self): 
     ob = collection(self.filename) 
     ob.coll() 
     dist = ob.distance() 

    def sssp(self): 
     for i in range(6): 
      pque[i] = sys.maxdouble 
      d[i] = sys.maxdouble 
     d[0] = 0 
     pque[0] = 0 

     while isempty()==0: 
      u = extract_min() 
      for i in range(6): 
       if d[i]>d[u]+dist[u][i]: 
        d[i] = d[u]+dist[u][i] 
        pque_deckey(i,d[i]) 
        par[i]=u 
       if u!=0: 
        print u 
      print "\n" 
      for i in range(6): 
       print par[i] 

    def extract_min(): 
     ret = 0 
     shift = 0 
     minimum = pque[0] 

     for i in range(6): 
      if pque[i]<minimum: 
       minimum = pque[i] 
       ret = i 
     pque[ret] = sys.maxdouble 
     return ret 

    def isempty(self): 
     count = 0 
     for i in range(6): 
      if pque[i] == sys.maxdouble: 
       count=count+1 
     if count==6: 
      return 1 
     else : 
      return 0 

    def pque_deckey(self,im,di): 
     pque[im]=di 

class main: 
    filename = raw_input("enter name of student:\n") 
    filename = filename + ".txt" 
    if(os.path.exists(filename)==1): 
     f = file(filename,"r") 
    else: 
     f = file(filename,"w+") 
     att1 = raw_input("att1 score:\n") 
     att2 = raw_input("att2 score:\n") 
     att3 = raw_input("att3 score:\n") 
     att4 = raw_input("att4 score:\n") 
     att5 = raw_input("att5 score:\n") 
     f.write(att1) 
     f.write("\n") 
     f.write(att2) 
     f.write("\n") 
     f.write(att3) 
     f.write("\n") 
     f.write(att4) 
     f.write("\n") 
     f.write(att5) 
     f.write("\n") 
    stud = profile(filename) 
    stud.begin() 
    stud.sssp() 

그것은 런타임 오류 표시가 없습니다 :'INT'개체가 어떤 속성 '__getitem__'

File "C:\Python27\winculum.py", line 33, in coll 
    self.col[i][j] = self.result 
TypeError: 'int' object has no attribute '__getitem__' 

내가 파이썬에서 단지 초보자 오전, 나는 심지어 인터넷에서 검색 한 후이 문제를 해결할 수없는입니다 .

+0

많은 코드가 있습니다. 어쨌든, 여기에있는 문제는리스트 comprehension의 반복자로'col'을 사용하고 있으며, 외부'col'와 같은 범위에 있으므로, 그것을 재정의하고 있다는 것입니다. 이해력 안에서'col'을 다른 것으로 바꾸십시오. – cha0site

+0

안녕하세요 !! 유용한 조언을 주셔서 감사합니다. C –

답변

44

오류 :

'int' object has no attribute '__getitem__' 

은 당신이에 인덱스 연산자 []을 적용하려고 시도하고 있음을 의미 int가 아닌 목록. col은 목록이 아닐 때도 그렇습니다. 그것부터 시작합시다. 여기

봐 : 지능형리스트가 반복하는 동안 col 변수를 덮어처럼

col = [[0 for col in range(5)] for row in range(6)] 

안에 다른 변수 이름을 사용하여이 보인다. (아니 반복 당신이 col을 설정하는 동안,하지만, 다음과 같은 것들 중.)

+0

조언에 감사드립니다 ... 변수에 최대 값을 할당하는 방법을 알려주시겠습니까? –

+0

http://docs.python.org/library/sys.html#sys.float_info를 사용하십시오. (저는 방금 봤습니다.) – Kos

2

문제 중 일부 :

for i in range[6]: 
      for j in range[6]: 

은 다음과 같아야합니다

range(6) 
4

이 오류는 같은 이름의 변수가 이전 코드에서 사용 된 것을 표시하지만, 다른 목적이 될 수 있습니다. 아마도 변수에 코드의 뒷부분에 사용되는 기존 함수와 함께 사용되는 이름이 지정되었을 수 있습니다.

관련 문제