2013-05-21 74 views
-2

由於我最近對信息安全和網絡編程感興趣,因此我決定通過Internet學習Python。我正在嘗試編寫一段代碼,它允許用戶存儲所需數量的人員的Biodata(姓名,年齡和工作)。然後O/P將包括所有這些人的生物數據以及人數。作爲Python新手,我無法識別錯誤。 謝謝 - 希德IndexError:列表分配索引超出範圍(in __init__)

這裏是我的代碼:

#!/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 

這裏是我的O/P的軌跡:

./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* 
+3

代碼有很多問題。您應該閱讀[Python教程](http://docs.python.org/tutorial/)以熟悉Python的基礎知識。 – BrenBarn

+1

對此使用列表並沒有什麼好的理由。如果您對另一個數據結構有一些絕望的需求,那麼Plain屬性或者'dict'會更合適。還要注意'count'和'myBio'是*類變量*,而不是*實例變量*,這可能不是你想要的。這意味着它們對於所有實例都是相同的。用'__init __()'代替它們。 –

+0

您知道,當您在提問時鍵入標題時,您會看到類似問題的列表。在這種情況下,您的確切錯誤的問題列表是*長*,閱讀*任何*這些問題將回答你的問題,並且也更快。下次嘗試。 –

回答

-1

也許你正在尋找的是:

def __init__(self, name, age, job): 
    Bio.myBio.append(name) 
    Bio.myBio.append(age) 
    Bio.myBio.append(job) 
    Bio.counts + 1 

問題是元素Bio.countsBio.counts+1和創建類時不存在;您必須使用append方法創建它們。

注意

你可能不需要Bio.counts變量。你可以重寫display作爲

def display(self): 
    for myBio in Bio.myBio: 
     print myBio 

你也可能要想想爲什麼你正在使用Bio代替self

+0

更可能是'Bio.myBio.append([姓名,年齡,工作])' –

+1

@BurhanKhalid同意。 OP可能希望重新考慮他們的數據結構。 – SethMMorton

+0

downvote的任何原因?如果我沒有回答我可以更新的問題。 – SethMMorton

1

這是你想要什麼:

class Bio: 

    def __init__(self, name, age, job): 
     self.name = name 
     self.age = age 
     self.job = job 
相關問題