2012-06-25 46 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() 

nó cho thấy một lỗi runtime:đối tượng 'int' không có thuộc tính '__getitem__'

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

Tôi chỉ là một người mới bắt đầu tại python, và tôi không thể khắc phục điều này thậm chí sau khi tìm kiếm trên mạng .

+0

Đó là rất nhiều mã. Dù sao, vấn đề của bạn ở đây là bạn đang sử dụng 'col' làm trình lặp trong danh sách của bạn, và nó nằm trong cùng phạm vi với' col' bên ngoài, vì vậy nó sẽ ghi đè nó. Chỉ cần thay đổi 'col' bên trong sự hiểu biết thành cái gì đó khác. – cha0site

+0

hi !! cảm ơn lời khuyên có giá trị .. nó đã làm việc C –

Trả lời

44

Lỗi:

'int' object has no attribute '__getitem__' 

có nghĩa là bạn đang cố gắng áp dụng các nhà điều hành chỉ số [] trên int, không phải danh sách. Vì vậy, col không phải là một danh sách, ngay cả khi nó nên được? Hãy bắt đầu từ đó.

Look đây:

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

Sử dụng một tên biến khác nhau bên trong, trông giống như danh sách hiểu ghi đè biến col trong lần lặp. (Không nên làm trong các lặp khi bạn thiết col, nhưng trong những người sau đây.)

+0

cảm ơn lời khuyên ... bạn có thể vui lòng cho tôi biết cách gán giá trị tối đa gấp đôi cho một biến không? –

+0

Sử dụng http://docs.python.org/library/sys.html#sys.float_info (Tôi vừa mới phát hiện ra khá dễ dàng) – Kos

2

Một số vấn đề:

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

nên là:

range(6) 
4

Lỗi này có thể là một dấu hiệu cho thấy biến có cùng tên đã được sử dụng trong mã của bạn trước đó, nhưng đối với các mục đích khác. Có thể, một biến đã được đưa ra một tên đồng nhất với hàm hiện có được sử dụng sau này trong mã.

Các vấn đề liên quan