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()
它显示一个运行时错误:
File "C:\Python27\winculum.py", line 33, in coll
self.col[i][j] = self.result
TypeError: 'int' object has no attribute '__getitem__'
我只是Python的初学者,即使在网上搜索后也无法纠正这一点。
答案
错误:
'int' object has no attribute '__getitem__'
意味着您正在尝试应用索引操作员[]
在int上,不是列表。是col
没有列表,即使应该列出?让我们从那开始。
看这里:
col = [[0 for col in range(5)] for row in range(6)]
在内部使用其他变量名称,看起来列表理解覆盖了col
迭代过程中的变量。(没有这 设置时迭代col
,但在以下内容中。)