web-dev-qa-db-fra.com

L'objet 'int' n'a pas d'attribut '__getitem__'

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()

il montre une erreur d'exécution:

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

Je ne suis qu'un débutant chez Python, et je ne parviens pas à corriger cela même après une recherche sur le net.

33
here_to_learn

L'erreur:

'int' object has no attribute '__getitem__'

signifie que vous essayez d'appliquer l'opérateur d'indexation [] sur un int, pas une liste. Donc, col n'est-il pas une liste, même si elle devrait l'être? Commençons par ça.

Regardez ici:

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

Utiliser un nom de variable différent à l'intérieur, on dirait que la compréhension de la liste remplace la variable col pendant l'itération. (Pas pendant la itération lorsque vous définissez col, mais pendant les suivantes.)

55
Kos

Cette erreur peut indiquer que la variable portant le même nom a déjà été utilisée dans votre code, mais à d'autres fins. Une variable a éventuellement reçu un nom qui coïncide avec la fonction existante utilisée plus tard dans le code.

4
mel

Certains des problèmes:

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

devrait être:

range(6)
2
Geo

vous pouvez également convertir int en str d'abord et lui attribuer un index, puis le convertir à nouveau comme ceci:

int(str(x)[n]) //where x is an integer value
0
sameer saini

J'ai récemment eu un problème similaire alors que je travaillais sur la récursion et les listes imbriquées. J'ai déclaré:

print(r_sum([1,2,3[1,2,3],]))

au lieu de

print(r_sum([1,2,3,[1,2,3],]))

Notez la virgule après le chiffre 3

0
Beast77