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.
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.)
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.
Certains des problèmes:
for i in range[6]:
for j in range[6]:
devrait être:
range(6)
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
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