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

bir çalışma zamanı hatası gösterir vardır:'int' nesne hiçbir özellik '__getitem__'

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

Python de sadece bir acemi değilim ve hatta net arama yaptıktan sonra bu düzeltmek alamıyorum .

+0

Bu bir çok kod. Her neyse, senin problemin, listesindeki anlamalarınızda 'col' iteratörü olarak kullanmanız ve harici' col' ile aynı kapsamda olması, bu yüzden onu geçersiz kılmak. Anlamaların içinde "col" kelimesini başka bir şeye dönüştürün. – cha0site

+0

merhaba! Değerli tavsiye için teşekkürler ... tavsiye için teşekkürler C –

cevap

44

hatası:

'int' object has no attribute '__getitem__' 

bir dizin operatörünü [] uygulamaya çalışıyorsunuz olduğumuz anlamına gelir int, bir liste değil. Olması gerektiği zaman bile col bir liste değil mi? Bundan başlayalım. Burada

Bak: Liste anlama yineleme sırasında col değişken değiştirir gibi

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

içeride farklı bir değişken adı kullanın, görünüyor. (Not yineleme Eğer col set sırasında, ancak aşağıdaki olanlar sırasında.)

+0

teşekkürler ... bana bir değişkenin maksimum değerinin nasıl atanacağını söyleyebilir misiniz? –

+0

http://docs.python.org/library/sys.html#sys.float_info kullanın (Ben sadece oldukça kolay bir şekilde googled ettik) – Kos

2

sorunlardan bazıları:

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

olmalıdır:

range(6) 
4

Bu hata bir aynı adla değişken önceki Kodunuzdaki kullanılmış olduğu endikasyon, ama başka amaçlar için olabilir. Muhtemelen, bir değişkene, daha sonra kodda kullanılan mevcut işleve sahip olan bir isim verilmiştir.

İlgili konular