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:Python27winculum.py", line 33, in coll
self.col[i][j] = self.result
TypeError: 'int' object has no attribute '__getitem__'
Je suis juste un débutant à python, et je suis incapable de corriger cela même après avoir cherché sur le net.
4 réponses
L'erreur:
'int' object has no attribute '__getitem__'
Signifie que vous essayez d'appliquer l'opérateur d'index [] sur un int, pas une liste. col n'est donc pas une liste, même quand elle devrait l'être? Commençons par cela.
Regardez ici:
col = [[0 for col in range(5)] for row in range(6)]
Utilisez un nom de variable différent à l'intérieur, il semble que la compréhension de la liste écrase la variable col pendant l'itération. (Pas pendant l'itération lorsque vous définissez col, mais pendant les suivantes.)
Cette erreur pourrait être une indication que la variable avec le même nom a été utilisée dans votre code plus tôt, mais à d'autres fins. Peut - être, une variable a reçu un nom qui coïncide avec la fonction existante utilisée plus tard dans le code.
Certains des problèmes:
for i in range[6]:
for j in range[6]:
Devrait être:
range(6)
Vous pouvez aussi secrète int à str première et affecter l'indice de lui, puis de nouveau le convertir en int comme ceci:
int(str(x)[n]) //where x is an integer value