“int"对象没有属性“__getitem__" [英] 'int' object has no attribute '__getitem__'

查看:102
本文介绍了“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()

它显示一个运行时错误:

it shows a runtime error :

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

我只是python的初学者,即使在网上搜索后我也无法纠正这个问题.

I am just a beginner at python, and I am unable to rectify this even after searching on the net.

推荐答案

错误:

'int' object has no attribute '__getitem__'

表示您正在尝试将索引运算符 [] 应用于 int 而不是列表.那么 col 不是一个列表,即使它应该是?让我们从那个开始.

means that you're attempting to apply the index operator [] on an int, not a list. So is col not a list, even when it should be? Let's start from that.

看这里:

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

在里面使用不同的变量名,看起来列表理解在迭代过程中覆盖了col变量.(不是在设置 col 时的 迭代期间,而是在以下迭代期间.)

Use a different variable name inside, looks like the list comprehension overwrites the col variable during iteration. (Not during the iteration when you set col, but during the following ones.)

这篇关于“int"对象没有属性“__getitem__"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆