2017-07-12 17 views
-2

私は次のように辞書オブジェクトを作成しました。私は3つの異なる関数を定義する必要があります。平均的なだけでなく、印刷用maxScoreする機能、MINSCOREする機能、および機能は、すべての3Pythonの辞書から最大スコアの関数を定義します

私の辞書オブジェクトコードは、以下のとおりである

scores = {} 
scores['Andy'] = 78 
scores['Bill'] = 82 
scores['Cindy'] = 94 
scores['Dave'] = 77 
scores['Emily'] = 82 
scores['Frank'] = 94 
scores['Gene'] = 87 

私は関数を定義するように見えることはできません(S )結果を印刷するために正しく。 maxの

+2

[?辞書で最大値を持つキーの取得]の可能複製(https://stackoverflow.com/questions/268272/getting-key-with-maximum-辞書の価値) – Dadep

+0

これまでに何を試しましたか? – victor

+0

@AGNGazerそれ(またはそれに類するもの)がなければ、 'スコア['Andy'] = 78'は' NameError'を発生させます。 – chepner

答えて

1

def max_val(scores): 
    return max(scores.values()) 

def min_val(scores): 
    return min(scores.values()) 

と平均

def avg_val(scores): 
     return sum(scores.values())/len(scores) 
+0

'min'と' max'の両方が値を返すだけであれば、そのキーを知る必要はありません。単に 'max(scores.values())'を使ってください。 (また、関数名として 'min'と' max'を再利用することによって無意識に再帰的な状況を作り出しました。 – chepner

+0

あなたは完全に正しいです。それは恥ずかしいです。変更を反映するように編集された回答。 – JohnDoe

+0

'avg_val'の略。あなたは鍵を必要としません。ループの必要はありません: 'sum(scores.values())'は合計を取得します。しかし、どちらが良いかは議論の余地があります。反復しながら長さの計算を計算するか、暗黙的に2回繰り返します( 'sum'と' len')。 – chepner

3

使用min()max

>>> scores = {} 
>>> scores['Andy'] = 78 
>>> scores['Bill'] = 82 
>>> scores['Cindy'] = 94 
>>> scores['Dave'] = 77 
>>> scores['Emily'] = 82 
>>> scores['Frank'] = 94 
>>> scores['Gene'] = 87 

>>> max(scores, key=scores.get) 
'Frank' 
>>> min(scores, key=scores.get) 
'Dave' 

平均ため:

>>> sum(scores[i] for i in scores)/len(scores) 
84 
0

最大スコア:

def maxScore(scDict): 
    max = scDict[0] 
    for i in scDict: 
    if scDict[i]>max: 
     max=scDict[i] 
    return max 

分スコア:

def minScore(scDict): 
    min = scDict[0] 
    for i in scDict: 
    if scDict[i]<max: 
     min=scDict[i] 
    return min 

平均スコア:

あなたはまた、のようなものを使用することができます
def avgScore(scDict): 
    avg = 0. # python 2 
    for i in scDict: 
    avg+=scDict[i] 
    return avg/len(scDict) 

必要に応じてminScore(Py 3.0)の場合はとなります。

0

はこれを試してみてください。

best_scores = sorted(scores, key=scores.get, reverse=True) 
maxScore = scores[best_scores[0]] 
minScore = scores[best_scores[-1]] 
average = sum(scores.values())/len(scores.values()) 
0
sorted(scores.items(), cmp=lambda x, y: x[1] - y[1])