web-dev-qa-db-ja.com

「int」オブジェクトには属性「__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()

実行時エラーが表示されます:

File "C:\Python27\winculum.py", line 33, in coll
    self.col[i][j] = self.result
TypeError: 'int' object has no attribute '__getitem__'

私はPythonの初心者であり、ネット上で検索した後でもこれを修正することはできません。

33
here_to_learn

エラー:

'int' object has no attribute '__getitem__'

リストではなくintにインデックス演算子[]を適用しようとしていることを意味します。 colはリストであってはならないのでしょうか?それから始めましょう。

ここを見て:

col = [[0 for col in range(5)] for row in range(6)]

内部で別の変数名を使用します。反復中にリスト内包表記がcol変数を上書きするように見えます。 (colを設定したときのtheの反復中ではなく、次の反復中。)

55
Kos

このエラーは、同じ名前の変数が以前にコードで使用されていたが、他の目的で使用されたことを示している可能性があります。おそらく、変数には、コードで後で使用される既存の関数と一致する名前が付けられています。

4
mel

問題のいくつか:

for i in range[6]:
            for j in range[6]:

する必要があります:

range(6)
2
Geo

intstrに最初に変換し、それにインデックスを割り当ててから、次のように再びintに変換することもできます。

int(str(x)[n]) //where x is an integer value
0
sameer saini

最近、再帰リストとネストされたリストの作業中に同様の問題が発生しました。私は宣言しました:

print(r_sum([1,2,3[1,2,3],]))

の代わりに

print(r_sum([1,2,3,[1,2,3],]))

数字3の後のコンマに注意してください

0
Beast77