この質問の問題は、コード アカデミーからのものです。コードを機能させるためにプログラムで不正行為をしていると思うので、完全には満足していませんが、解決策を考え出しました。これを解決する他の方法はありますか。よりハードなコードを見てきました。これはかなり簡単です。
4 つのキーを持つ学生に関する 3 つの辞書。キーのうち 3 つはリストです。平均を計算する関数 文字成績を計算する関数 各子供の平均を計算する関数
さて、すべての関数と同様に、各キッド関数で平均を呼び出して平均を計算します。
ただし、新しいリストを作成して 3 人の生徒全員を含める場合 --- これにより、3 つのリスト アイテムを持つ生徒リストが作成されます。各項目には、4 つのキーを持つ辞書があります。4 つのキーのうち 3 つがリストです。ふぅ!!!
getClassAverage 関数でカウンターとインクリメントを使用して for ループを使用し、平均を計算しました。
質問:
forループなしで平均を計算する別の方法はありますか。つまり、関数内で渡された引数「who」を使用するだけでは、学生(データ)があり、リストでうまく参照されません。整数ではなく文字列でインデックスを付けます」エラー?
キー内にリストがあり、リスト内にあります。getClassAverage 関数から学生の名前を出力するにはどうすればよいですか?
ありがとう!
Lloyd = {
"name":"Lloyd",
"homework": [90,97,75,92],
"quizzes": [ 88,40,94],
"tests": [ 75,90]
}
Alice = {
"name":"Alice",
"homework": [100,92,98,100],
"quizzes": [82,83,91],
"tests": [89,97]
}
Tyler = {
"name":"Tyler",
"homework": [0,87,75,22],
"quizzes": [0,75,78],
"tests": [100,100]
}
def average(stuff):
return sum(stuff)/len(stuff)
def getLetterGrade(score):
score = round(score)
if score >= 90: return "A"
elif 90 > score >= 80: return "B"
elif 80 > score >= 70: return "C"
elif 70 > score >= 60: return "D"
elif 60 > score: return "F"
def getAverage(kid):
bar = average
return bar(kid["homework"])*.1 + bar(kid["quizzes"])*.3 + bar(kid["tests"])*.6
students = [Lloyd,Alice,Tyler]
def getClassAverage(who):
class_ave = 0
class_avetot = 0
count = 0
for x in who:
class_avetot = class_avetot + getAverage(who[count])
#print who[count]
stu_score = getAverage(who[count])
print stu_score
print getLetterGrade(stu_score)
count = count + 1
class_ave = class_avetot / len(who)
return class_ave
print str(getClassAverage(students))