2017-04-02 8 views
3

私はコーディングの初心者です。 私は各生徒の名前が各成績の平均に対応し、生徒の合計平均スコアを示す生徒を作成するのに苦労しています。 これは私のコードです:私はこのように表現できる方法Python3で自動グレーダを作る方法

13.67, {'Ken': 13.67, 'Hiro': 20.0, 'Nick': 13.67} 

:しかし、私は実際のように返すコードを作りたい

7.33 
13.67 
20.0 
13.67 

Ken = [5,8,9] 
Hiro = [10,11,20] 
Nick = [20,20,20] 

list1 = [Ken,Hiro,Nick] 

total_average = 0 
for j in list1: 
    x = 0 
    count = 0 
    for i in j: 
     x += i 
     count += 1 

    average = x/count 
    print (round(average,2)) 
    total_average += average 

final_average = total_average/len(list1) 
print (round(final_average,2)) 

、その結果は?

詳細を説明できると大変感謝しています。

答えて

1

私は別のアプローチを全面的に提案します。辞書を超える

grades = {'Ken': [5,8,9], 'Hiro': [10,11,20], 'Nick': [20,20,20]} 

次に、あなたがループし、各学生のための平均値を計算し、世界平均を計算するための準備:まず、あなたが辞書にあなたの名前と成績を保存最後に

averages = {} 
sum_of_grades, number_of_grades = 0, 0 
for name, marks in grades.items(): 
    averages[name] = sum(marks)/len(marks) # simple arithmetic average 
    sum_of_grades += sum(marks) 
    number_of_grades += len(marks) 

を、ここで

final_average = sum_of_grades/number_of_grades 

は計算が関数内でカプセル化されている完全なコード、次のとおりです:あなたは世界平均を計算

grades = {'Ken': [5,8,9], 'Hiro': [10,11,20], 'Nick': [20,20,20]} 

def compute_averages(grades): 
    averages = {} 
    sum_of_grades, number_of_grades = 0, 0 
    for name, marks in grades.items(): 
     averages[name] = sum(marks)/len(marks) 
     sum_of_grades += sum(marks) 
     number_of_grades += len(marks) 
    final_average = sum_of_grades/number_of_grades 

    return averages, final_average 

averages, final_average = compute_averages(grades) 
for name, avg in averages.items(): 
    print(name, round(avg, 2)) 
print('Final average', round(final_average, 2)) 
+0

これは私のために役立ちます。どうもありがとうございました !! – user7421972

1

リストの代わりに辞書を使用してみてください。 辞書を初期化: 学生= { 'ヒロ' 0 'ケン' 0 'ニック':0}

そして計算平均値に基づいて値を割り当てる

: 学生= { 'ヒロ':20.0、 'ケン':13.67 'ニック':13.67}

プリント(学生)

+0

です。ありがとうございました !! – user7421972

1

私は{name, scores, average_score}と辞書として学生を代表するお勧めします。あなたのすべての学生が辞書のリストのようになります。

students = [ 
    {'name': 'Ken', 'scores': [5, 8, 9], 'average_score': 0.0}, 
    {'name': 'Hiro', ...}, 
    ... 
] 

は今、あなたはこのようにそれらを反復します:すべてのリストの中の学生と

for student in students: 
    # Access the attributes like this: 
    print(student['name'], student['scores']) 

    # calculate your average value ... 

    student['average_value'] = x/count 
print(students) # you can print the whole dictionary and look at the results 

、それはあなたが欲しい書式設定を行うのは簡単です - - すべての生徒をループして、名前と平均スコアを任意の順序で印刷します。

+0

私はそれを作ることができました。どうもありがとうございます !! – user7421972

関連する問題