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