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的初学者,即使在网上搜索后我也无法纠正这个问题。
答案 0 :(得分:52)
错误:
'int' object has no attribute '__getitem__'
表示您尝试在int上应用索引运算符[]
,而不是列表。那么col
是不是列表,即使它应该是?让我们从那开始吧。
看这里:
col = [[0 for col in range(5)] for row in range(6)]
在里面使用不同的变量名,看起来列表理解会在迭代期间覆盖col
变量。 (当您设置col
时,不是在 迭代期间,而是在以下期间。)
答案 1 :(得分:4)
此错误可能表示先前已在您的代码中使用了具有相同名称的变量,但出于其他目的。可能,变量的名称与后面代码中使用的现有函数一致。
答案 2 :(得分:2)
一些问题:
for i in range[6]:
for j in range[6]:
应该是:
range(6)
答案 3 :(得分:0)
您还可以先将 int 转换为 str ,然后为其分配索引,然后再次将其转换为int 像这样:
int(str(x)[n]) //where x is an integer value
答案 4 :(得分:0)
最近在处理递归和嵌套列表时遇到了类似的问题。 我宣布:
print(r_sum([1,2,3[1,2,3],]))
代替
print(r_sum([1,2,3,[1,2,3],]))
请注意数字3后的逗号