2012-06-25 18 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

यह बहुत सी कोड है। वैसे भी, आपकी समस्या यह है कि आप अपनी सूची समझ में 'कॉलर' को इटरेटर के रूप में उपयोग कर रहे हैं, और यह बाहरी 'col' के समान दायरे में है, इसलिए यह इसे ओवरराइड कर रहा है। किसी और चीज के लिए समझ के अंदर बस 'col' को बदलें। – cha0site

+0

हाय !! मूल्यवान सलाह के लिए धन्यवाद .. यह सी –

उत्तर

44

त्रुटि:

'int' object has no attribute '__getitem__' 

मतलब है कि आप एक पर सूचकांक ऑपरेटर [] लागू करने के लिए प्रयास कर रहे हैं int, एक सूची नहीं। तो col एक सूची नहीं है, भले ही यह होना चाहिए? चलो उससे शुरू करते हैं।

यहाँ देखो:

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

अंदर एक अलग चर नाम का उपयोग करें, लग रहा है सूची समझ यात्रा के दौरान col चर को ओवरराइट की तरह। (नहीं यात्रा जब आप 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

यह त्रुटि एक संकेत है कि एक ही नाम के साथ चर अपने कोड में पहले इस्तेमाल किया गया है, लेकिन अन्य प्रयोजनों के लिए हो सकता है। संभवतः, एक चर को एक नाम दिया गया है जो बाद में कोड में उपयोग किए गए मौजूदा फ़ंक्शन के साथ सह-अंतर्दृष्टि प्रदान करता है।

संबंधित मुद्दे