2017-06-30 10 views
1

私はクラスの数学スコアの平均を求めようとしていますが、私は辞書内でこれをどうやって行うのか分かりません。どのように私は各スコアを追加し、これを学生数(num_students)で割った簡単な方法を使用しますか?Dictionary in Python

login="teacher" 
password="school" 

usrnm=input("Please enter your username: ") 
pw=input("Please enter your password: ") 
if (usrnm==login) and (pw==password): 
    print("==Welcome to the Mathematics Score Entry Program==") 
    num_students = int(input("Please enter number of students:")) 
    print ("you entered ",num_students," students") 
    student_info = {} 
    student_data = ['Maths Score: '] 
    for i in range(0,num_students): 
     student_name = input("Name :") 
     student_info[student_name] = {} 
     for entry in student_data: 
     student_info[student_name][entry] = int(input(entry)) 
    print (student_info) 
else: 
    print("No way, Jose!") 
+1

それは把握することができるが、あなたがデータを見て期待のサンプルが含まれて本当に参考になりますあなたの質問のように。 –

+2

通常は、入出力から*入出力を分離することをお勧めします。ですから、入力として辞書を取り、平均を返しますが、すべてのやりとりがない関数を書くべきです。 –

+0

あなたの投稿を破壊しないでください。質問を投稿したら、(CC-by-SAライセンスのもとで)大規模なスタックオーバーフローコミュニティにコンテンツのライセンスを取得しました。この投稿とアカウントとの関連付けを解除する場合は、[解約リクエストの適切なルートは何ですか]を参照してください(http://meta.stackoverflow.com/questions/323395/what-is-the-proper-route-解離要求のために)。 – Bugs

答えて

2

Pythonの辞書は例えば、あなたが使用することができ、辞書の値のリストを返す.values()方法があります:

sum(d.values())/float(len(d)) 

d.values()sum(..)を与え、あなたの学生のためのマークのリストを与えます私が辞書の整数長であるlen(d)で割り切ったすべてのマークの合計(すなわち、マークの数)は、明らかに平均はマーク/マークの数の合計です。

パイソン2は、以下のように平均sum関数を使用して行うことができる計算する(適切な場合はPython 3がフロートを与える)、さもなければ

+3

Python 2の代わりに、 'sum'の初期値を指定することができます。例えば、' sum(d.values()、0.0)/ len(d) ' –

+0

@JonClements huh、そういうことは考えられませんでした。 – Stael

+0

@JonClementsもっとPythonicだとは思いますか?私は 'float()'の方がより読みやすくなっています。numpy.mean()もありますが、おそらくここでは残念です... –

3

の整数を返しますので、あなたがフロートが必要:

average = sum(d['Maths Score: '] for d in student_info.values())/len(student_info) 

留意されたいです。現在のところ、コードには固有の名前の学生しかいません。同じ名前の2人の生徒がお互いに優先します。

+0

です。これは私が実装しようとしている拡張活動ですが、これを指摘してくれてありがとう。 – MrFHHH

1

あなたは、Python 3.4+を、使用している場合は、statistics.meanを使用することができ、その後:

from statistics import mean 
avg_score = mean(d.values()) 
+0

あなたのコメントをいただきありがとうございます。私は次の出力を探しています。 "平均数学スコアは...です" – MrFHHH

+0

@MrFHHHだから、 'avg_score'の出力を' print'していますか? –