2012-10-05 94 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版本。如果你想要“全局变量”,你应该使用一个类和初始化自我。 –

相关问题