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
を設定したときのtheの反復中ではなく、次の反復中。)
このエラーは、同じ名前の変数が以前にコードで使用されていたが、他の目的で使用されたことを示している可能性があります。おそらく、変数には、コードで後で使用される既存の関数と一致する名前が付けられています。
問題のいくつか:
for i in range[6]:
for j in range[6]:
する必要があります:
range(6)
intをstrに最初に変換し、それにインデックスを割り当ててから、次のように再びintに変換することもできます。
int(str(x)[n]) //where x is an integer value
最近、再帰リストとネストされたリストの作業中に同様の問題が発生しました。私は宣言しました:
print(r_sum([1,2,3[1,2,3],]))
の代わりに
print(r_sum([1,2,3,[1,2,3],]))
数字3の後のコンマに注意してください