2016-09-29 74 views
0

我必須創建一個程序來顯示變量列表的算術平均值。應該有50個等級。如何獲得一系列輸入的平均值?

我幾乎卡住了。現在我只得到:

for c in range (0,50): 
    grade = ("What is the grade?") 

另外,我怎樣才能打印低於50的成績計數?

任何幫助表示讚賞。

+2

是否https://stackoverflow.com/questions/7716331/calculating-arithmetic-mean-average-in-python幫助你? – StardustGogeta

回答

2

如果你不介意使用numpy這是可笑容易:

import numpy as np 
print np.mean(grades) 

或者,如果你寧願不輸入任何東西,

print float(sum(grades))/len(grades) 

要獲得低於50等級的數量,假設你把它們都放在一個列表中,你可以這樣做:

grades2 = [x for x in grades if x < 50] 
print len(grades2) 
1

假設你有一個包含所有g拉迪斯。

avg = sum(gradeList)/len(gradeList) 

這實際上比numpy.mean()更快。

要找到小於50的等級數,可以用條件語句將其放入循環中。

numPoorGrades = 0 
for g in grades: 
    if g < 50: 
     numPoorGrades += 1  

你也可以使用列表理解來更簡潔一點地寫這個。

numPoorGrades = len([g for g in grades if g < 50]) 
+0

@user僅在Python 2中。Python 3.X在此方案中正確執行浮點除法。 – StardustGogeta

0

首先,假設grades是包含檔次的列表,你想遍歷grades名單,並在range(0,50)不重複。其次,在每一次迭代中,您都可以使用一個變量來計算迄今爲止您已經看到了多少個等級,以及另一個變量能夠總結到目前爲止所有的成績。類似的東西:

num_grades = 0 
sum_grades = 0 
for grade in grades: 
    num_grades += 1 # this is the same as writing num_grades = num_grades + 1 
    sum_grades += sum # same as writing sum_grades = sum_grades + sum 

現在,所有你需要做的是通過num_grades劃分sum_grades得到的結果。

average = float(sum_grade)s/max(num_grades,1) 

我用max函數,返回num_grades和1之間的最大數目 - 的情況下,等級的列表爲空,num_grades將爲0和除以0未定義。 我用float得到一個分數。

要計算成績低於50的號碼,就可以他再添變數num_failed和初始化0就像num_counts,添加一個如果檢查,如果等級低於50,如果是由1

增加 num_failed
0

請嘗試以下操作。函數isNumber嘗試將輸入讀取爲字符串,將其轉換爲浮點數,我相信它也會轉換整數範圍,並且是Python 3中的浮點類型,這是我使用的版本。try...except塊與其他編程語言中的try...catch語句類似。

#Checks whether the value is a valid number: 
def isNumber(value): 
    try: 
     float(value) 
     return True 
    except: 
     return False 

#Variables initialization: 
numberOfGradesBelow50 = 0 
sumOfAllGrades = 0 

#Input: 
for c in range(0, 5): 
    currentGradeAsString = input("What is the grade? ") 
    while not isNumber(currentGradeAsString): 
     currentGradeAsString = input("Invalid value. What is the grade? ") 
    currentGradeAsFloat = float(currentGradeAsString) 
    sumOfAllGrades += currentGradeAsFloat 
    if currentGradeAsFloat < 50.0: 
     numberOfGradesBelow50 += 1 

#Displays results: 
print("The average is " + str(sumOfAllGrades/5) + ".") 
print("You entered " + str(numberOfGradesBelow50) + " grades below 50.")