2015-02-24 120 views
0

讓我剛開始時請求您的耐心,不要讓我排名不好,我盡我所能不要聽起來像一個總noob。 :)在Python中顯示「字典平均值」輸出(版本3)

我正在爲Python編寫此程序,要求用戶輸入除-9999(負號,pos號或零)之外的任何數字,然後在末尾給出以下字典平均值。這是輸出,我需要,例如...

Enter a number (-9999 to end): 4 
Enter a number (-9999 to end): -3 
Enter a number (-9999 to end): -15 
Enter a number (-9999 to end): 0 
Enter a number (-9999 to end): 10 
Enter a number (-9999 to end): 22 
Enter a number (-9999 to end): -9999 

The list of all numbers entered is: 
[4, -3, -15, 0, 10, 22] 

The dictionary with averages is: 
{'AvgPositive': 12.0, 'AvgNonPos': -6.0, 'AvgAllNum': 3.0} 

所以我有下面的代碼,但我做錯了(顯然),因爲我不知道該怎麼做是正確的。它給我的輸出「[]無」,因爲我不知道如何輸出上面的「字典平均值」。

這是我有:

def nums(): 
    values = [] 

    while -9999 not in values: 
     x = int(input("Enter a numbers (-9999 to end: ")) 

     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

什麼是你的目的在使posNumAvg所以完全從allNumAvg不同?!後者計算和返回東西 - 那麼爲什麼你在地球上有前者,而不是打印東西,什麼也沒有返回(與返回None相同)...?!這種不對稱本身會讓你發瘋...... 爲什麼你選擇如此完全不對稱?

也就是說,posNumAvg中每行的錯誤數比我記得最近看到的多。什麼從頭再次啓動,利用現有allNumAvg,並打算如

def posNumAvg(values): 
    return allNumAvg([v for v in values if v>0]) 

...不這個更好看 - ?)

現在當然您還有其他問題 - 如果沒有一個值是肯定的,那麼現有的代碼最終會試圖將零除以零,這不是一個好主意:-)。而且,根據你是否使用Python 2或3(你甚至不用提及),/可能會截斷分割或真正的分割 - 值得檢查。還有其他一些事情,但是,我已經建議修復許多實際和潛在的錯誤,以致於我超過了配額的一個答案:-)。

+0

感謝您的幫助,簡化它。對你提到的問題有幫助嗎?我提出這個問題的原因是爲了找到答案。如果用戶輸入一個負號,我該怎麼辦?主要是,如何獲得所描述底部的平均值? – 2015-02-24 05:13:03

+0

'如果不是值:返回float('nan')'處理那裏沒有任何值的平均值 - 'nan',對於「不是數字」,是「沒有這樣的數字」的浮點值。預設字典當然是微不足道的:'d = {''AvgPositive':posNumAvg(values),'等等 – 2015-02-24 05:17:24