2013-11-27 165 views
0

我試圖學習Python,我就死在我的實踐問題之一。追加,平均列表,字典,關鍵

  • 回答*第一個問題:我明白如何獲得列表的平均值,但是有更好的循環使用嗎?

第二個問題:在我的第二個函數中,爲什麼我不在x中追加大於零的int

說明:

實現以下三個功能(你應該使用合適的 循環結構來計算平均值):

  • allNumAvg(numList):採用數字和返回值列表列表中所有數字的平均值。
  • posNumAvg(numList):取號的列表,並在大於零列表返回所有數的平均值。
  • nonPosAvg(numList):取號的列表,並返回列表中的所有的小於或等於零的數的平均值。

編寫一個程序,要求用戶輸入一些數字(正數, 負數和零)。你的程序不應該要求用戶輸入一個固定數量的號碼 。此外,它不應該要求用戶想要輸入的數字 。而是應該要求用戶輸入 幾號,用-9999(警戒值)結束。用戶 可以按任何順序輸入數字。你的程序應該不問 用戶輸入的正,分別負數。

你的程序然後應該創建與數字的列表中輸入(請 確保不包括在此列表中的標記值(-9999))和 輸出列表並使用以下鍵值對 字典(使用輸入列表和上述功能):

  • 密鑰=「AvgPositive」:值=所有的正數
  • 密鑰=「AvgNonPos」平均:值=所有的非正的平均數字
  • Key ='AvgAllNum':Value = av所有的數字樣品運行erage:

輸入號碼(-9999至結束):4輸入號碼(-9999至結束):-3 輸入號碼(-9999至結束):-15輸入數字(-9999結束):0 輸入數字(-9999結束):10輸入數字(-9999結束):22 輸入數字(-9999結束):-9999

輸入所有數字的名單是:[4, -3, -15, 0, 10, 22]

與平均值的字典是:{'AvgPositive': 12.0, 'AvgNonPos': -6.0, 'AvgAllNum': 3.0}

def nums(): 
    values = [] 

    while -9999 not in values: 
     x = int(input("Enter any amount of numbers or -9999 to quit: ")) 

     values.append(x) 
    values.remove(-9999) 

    return values 

def allNumAvg(values): 
    average = 0 
    sum = 0 
    for n in values: 
     sum = sum + n 
     average = sum/len(values) 

    return average 

def posNumAvg(values): 
    x = [] 
    average = 0 
    sum = 0 

    if int in values > 0: 
     x.append(int) 

    print(x) 

print(posNumAvg(nums())) 
+0

感謝您的編輯。更可讀。 – TYPKRFT

+0

對不起,我很好奇,如果有更好的循環使用。 – TYPKRFT

+1

爲什麼不只是'返回總和(值)/ len(值)'? –

回答

0

allNumAvg功能需求的變化:

def allNumAvg(values): 
    average = 0 
    sum = 0 
    for n in values: 
     sum = sum + n 

    # this shouldn't happen inside the loop 
    average = sum/len(values) 

    return average 

我不知道你爲什麼會寫的並不僅僅是return sum(values)/len(values),雖然。

+0

謝謝你的編輯。我沒有意識到你可以返回一個公式!每天學習新東西! – TYPKRFT

+1

它實際上不是一個或多或少的「公式」......它只是更短的代碼。 –

+0

好吧,我只是沒有意識到你可以返回任何超過變量我猜。 – TYPKRFT