2012-10-05 73 views
-1

如何編寫python代碼以便在elif原因內更新我的數字列表? 我從一個空的空白列表開始,然後從那裏我必須問用戶他們要添加到列表中的新分數,然後將這些數字添加到列表中。然後我必須返回到菜單系統並詢問如果用戶想要列表中這些數字的平均值,則按3。這裏我在代碼下面的代碼是,分數正在elif子句中進行更新,但是一旦我得出這個子句,列表就會變回空。請幫忙!如何更新elif子句中的列表並返回列表

+0

<假設家庭作業>您的教授/講師是否與您討論變量的範圍和變量傳遞的問題,看起來這兩件事會很快清理您的代碼和問題。 –

回答

0

將綁定空列表的語句移到循環之前。

scores = [] 
while 1: 
    ... 
+0

我試過,但當我試圖調用avgScores()我仍然有一個錯誤,說,「s + =分數[指數] TypeError:不支持的操作數類型爲+ =:'int'和'list'」 –

+0

這可能是因爲你在列表中追加了一個列表。 'scores.append(addScores())'將'addScores()'的返回值附加到你的分數列表中。它看起來像'addScores()'返回一個列表。這最終會使'scores'列表成爲列表,例如:[[3,4],[7,5],[3,4]] – Matt

0

你addScores方法看起來像它返回一個列表,追加方法是一個單一的元素,用延長的,而不是在你的elif聲明追加。

同樣,你的addscores方法沒有實例化一個本地分數列表來追加,所以它會返回一個空列表,因爲一個永遠不會實例化。要麼將你想要修改的列表傳遞給它,要麼有一個返回的本地列表,目前你都沒有做。

0

首先,函數不應該在while循環中定義;在循環外定義它們並傳入參數。跟蹤分數列表的一個簡單方法是使用全局變量,以便程序中的每個函數都可以訪問它。

你修改後的代碼可能看起來像:

scores = [] 

def addScores(): 
    enteredScores = [] 
    while True: 
     numOfScores = input("How many new scores would you like to add: ") 
     try: 
      if int(numOfScores) > 0: 
       for i in range(int(numOfScores)): 
        newInput = input("Please enter a score: ") 
        enteredScores.append(newInput) 
       print(enteredScores) 
       return enteredScores 
      else: 
       print("Please enter a positive integer.") 
       continue 
     except ValueError: 
      print("Please enter a positive integer.") 

while True: 
    print("0 - Clear scores") 
    print("1 - Input more scores") 
    print("2 - Print scores") 
    print("3 - Average scores") 
    option = input("Please choose an option: ") 

    if option == 0: 
     scores = [] 
    elif option == 1: 
     scores += addScores() 
    elif option == 2: 
     print("Scores:", scores) 
    elif option == 3: 
     try: 
      avgScore = sum(scores)/len(scores) 
      print("Average:", avgScore) 
     except TypeError: 
      print("Invalid score contained in list.") 
    else: 
     print("Quitting current program.") 
     break 
    replay = input("Do you wish to continue? (Y/N)") 
    replay = replay.lower() 
    if replay == "y" or replay == "yes": 
     continue 
    else: 
     break 

print("Goodbye!") 

我添加了兩個的try/except語句。如果在程序中發生錯誤,並且它符合上述類型之一(ValueError和TypeError),而不是關閉程序,它將使用except語句處理錯誤。如果你沒有覆蓋這些,你可以刪除它們,程序應該工作正常。我也清理了一下邏輯 - 最初,你的重放變量沒有做任何事情,所以通過將它移動到循環中,它現在或者繼續或者中斷程序。

+0

爲什麼是全局變量?你可以簡單地將它作爲函數參數傳遞。 另外,第一行根本沒用。全局聲明旨在聲明變量_inside function_是全局變量。 – Bakuriu

+0

我認爲全局語法有點清晰,但它可以用任何方式。感謝關於第一行的說明,我現在就把它說出來。 –

+0

全局變量很糟糕,幾乎不應該使用,這是糟糕的代碼實踐,並導致易受攻擊且維護性較差的代碼。它是Goto語句的python版本。如果你想要「全局變量」,你應該使用一個類和初始化自我。 –

相關問題