2012-06-25 3 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__' 

Я просто новичок в Python, и я не могу это исправить даже после того, как поиск в сети ,

+0

Это код. В любом случае, ваша проблема заключается в том, что вы используете 'col' в качестве итератора в своих списках, и он находится в том же объеме, что и внешний' col', поэтому он переопределяет его. Просто измените 'col' внутри понимания на что-то еще. – cha0site

+0

привет! спасибо за ценный совет .. это сработало C –

ответ

44

Ошибка:

'int' object has no attribute '__getitem__' 

означает, что вы пытаетесь применить оператор индекса [] на int, а не список. Так что col не список, даже если это должно быть? Давайте начнем с этого.

Посмотрите здесь:

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

Используйте другое имя переменной внутри, выглядит как список понимание перезаписывает переменную col во время итерации. (Не во итерации при установке col, но в последующих.)

+0

спасибо за совет ... можете ли вы рассказать мне, как назначить максимальное значение double переменной? –

+0

Используйте http://docs.python.org/library/sys.html#sys.float_info (я просто довольно легко разобрал его в Google) – Kos

2

Некоторые из проблем:

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

должно быть:

range(6) 
4

Эта ошибка может быть признаком того, что переменная с тем же именем, были использованы в вашем коде раньше, но и для других целей. Возможно, переменной присвоено имя, которое совместно с существующей функцией используется позже в коде.

Смежные вопросы