Python 索引器错误:列表分配索引超出范围(在初始化中)

Python 索引器错误:列表分配索引超出范围(在初始化中),python,python-2.7,Python,Python 2.7,由于我最近对信息安全和网络编程感兴趣,我决定通过互联网学习Python。我正在尝试编写一段代码,允许用户存储所需人数的Biodataname、年龄和工作。然后O/P将包括所有这些人的生物数据以及人数。作为Python新手,我无法识别错误。 谢谢-希德 这是我的密码: #!/usr/bin/python class Bio: counts = 0 myBio = [] def __init__(self, name, age, job

由于我最近对信息安全和网络编程感兴趣,我决定通过互联网学习Python。我正在尝试编写一段代码,允许用户存储所需人数的Biodataname、年龄和工作。然后O/P将包括所有这些人的生物数据以及人数。作为Python新手,我无法识别错误。 谢谢-希德

这是我的密码:

    #!/usr/bin/python
    class Bio:
        counts = 0
        myBio = []
        def __init__(self, name, age, job):
            Bio.myBio[Bio.counts] = name
            Bio.myBio[Bio.counts+1] = age
            Bio.myBio[Bio.counts+2] = job
            Bio.counts + 1
        def display(self):
            for myBio in range(0, Bio.counts):
                    print myBio
    while 1:
        name = raw_input("Enter your name: ")
        age = int(raw_input("Enter your age: "))
        job  = raw_input("Enter your Job: ")
        details = Bio(name, age, job)
        details.display()
        print "Detail Count %d" % Bio.myBio
        anymore = raw_input("Anymore details ?: (y/n)")
        if anymore == 'n':
            break
这是我的订单跟踪:

   ./bio.py
   Enter your name: Sid
   Enter your age: 21
   Enter your Job: InfoSec
   Traceback (most recent call last):
   File "./bio.py", line 25, in <module>
   details = Bio(name, age, job)
   File "./bio.py", line 9, in __init__
   Bio.myBio[Bio.counts] = name
   IndexError: list assignment index out of range*

可能您正在寻找的是:

def __init__(self, name, age, job):
    Bio.myBio.append(name)
    Bio.myBio.append(age)
    Bio.myBio.append(job)
    Bio.counts + 1
问题是创建类时,元素Bio.counts、Bio.counts+1和Bio.counts+2不存在;您必须使用append方法创建它们

您可能不需要Bio.counts变量。您可以将显示内容重写为

你可能还想想想为什么你要用生物而不是自我

这就是你想要的:

class Bio:

    def __init__(self, name, age, job):
        self.name = name
        self.age = age
        self.job = job

您的代码有许多问题。您应该阅读本书以熟悉Python的基础知识。使用列表并不是一个很好的理由。如果您迫切需要另一种数据结构,则使用普通属性或dict更合适。还要注意,counts和myBio是类变量,而不是实例变量,这可能不是您想要的。这意味着它们对于所有实例都是相同的。把它们放在uu init_uuu中。你知道,当你在提问时键入标题时,你会得到一个类似问题的列表。在这种情况下,带有您的确切错误的问题列表很长,阅读这些问题中的任何一个都可以回答您的问题,而且速度更快。下次再试试。@LennartRegebro你忘了提到他们也列在右边的“相关”下:@BurhanKhalid:当然,但那是在问题发布之后。上面的列表在你发布之前,很可能是Bio.myBio.append[name,age,job]@BurhanKhalid同意。OP可能想重新思考他们的数据结构。有什么理由否决投票吗?如果我没有回答这个问题,我可以更新。
class Bio:

    def __init__(self, name, age, job):
        self.name = name
        self.age = age
        self.job = job