Sich im Durchschnitt in einer Funktion in Python
Ich versuche zu lernen Python, und ich bin stecken. Alles ging gut, bis die Letzte Funktion, die die:
def get_class_average(students):
bis zu diesem Punkt hat alles Prima funktioniert, aber es in der letzten Funktion, ich kann nicht herausfinden, wie es funktioniert. Ich werde versuchen, die Durchschnittswerte für jeden Schüler, dann die Berechnung der Durchschnitt dieser Mittelwerte, in anderen Worten, die "Klasse-Durchschnitt" So, ich würde nur gerne wissen, die Antwort auf die Letzte Funktion ohne änderung der Funktionen, bevor der Letzte:
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
def average(numbers):
total = sum(numbers)
return float(total) / len(numbers)
def get_average(student):
homework = average(student["homework"])
quizzes = average(student["quizzes"])
tests = average(student["tests"])
return 0.1 * average(student["homework"]) + 0.3 * average(student["quizzes"]) + 0.6 * average(student["tests"])
def get_letter_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
def get_class_average(students):
results = []
for student in results:
get_average(student)
results.append(student)
average(student)
return results
students = [lloyd,alice,tyler]
print get_class_average(students)
Endlich fand ich die Lösung für diese ein. So, ich will einfach nur nach den korrigierten code hier unten für die Letzte Funktion, get_class_average(Studenten). Jetzt funktioniert es:
def get_class_average(students):
results = []
for each in students:
studentavg = float(get_average(each))
results.append(studentavg)
return average(results)
students = [lloyd,alice,tyler]
print get_class_average(students)
- Sie sollten gehen Sie durch die vorherigen Funktionen und versuchen Sie zu verstehen, wie Sie funktionieren ersten.
- in get_class_average du bist der Iteration über die Ergebnisse (leere Liste), wenn Sie sollten die Iteration über die Schüler.
for student in students:
Auch die Rückgabe außerhalb der for-Schleife - sonst wird es erst wieder die ersten Schüler. Dies sollte fix it für Sie. - Ignacio Vazquez-Abrams ich verstehen, wie Sie funktionieren, schrieb ich den vorherigen Funktionen nacheinander und Schritt für Schritt. In der letzten Funktion, ich bin offensichtlich etwas fehlt
- Ich habe versucht, dass Sie wohl Recht haben, dass es behoben werden sollte, aber auch wenn ich die Einstellung ändern, funktioniert es nicht
- Okay auf der Suche tiefer in Ihren code innerhalb get_class_average, die Sie anrufen, Durchschnitt(Studenten). Die Durchschnitt () - Funktion kann nur unterstützen, eine Liste von zahlen, weil es aus der Summe der argument. Ich denke, was Sie wollen, ist get_average(student), zusammen mit den änderungen, die ich oben erwähnt, wie gut. Sie müssen auch herausfinden, wie hängen die Mittelwerte zusammen mit Ihnen, wie Sie Ihren code nur fügt der Liste der Studenten in eine neue Liste und druckt Sie aus.
- Jordan ja, diese sind das, was ich bin versucht, herauszufinden, aber ich habe nicht die Antwort gefunden, doch
- Okay, anstelle von Anhängen Schüler auf die Ergebnisse, fügen Sie die get_average(student). Dies könnte das sein, was du bist suchen für.
results.append(get_average(student))
und dann wieder den Durchschnitt gesetzt.return average(results)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist nicht wirklich nehmen soll durchschnittlich durchschnittlich, nur damit Sie es wissen. Ich habe korrigiert Sie Ihren code, um es zu bekommen, um korrekt zu arbeiten. Hier ist es:
Da du bist neu in python habe ich den besseren Teil von einer Stunde oder zwei und umgeschrieben Ihrem code verwenden Sie die verschiedenen Funktionen von python, darunter docstrings, Generatoren, Liste Verstehens, Klassen, sowie eine map-reduce Muster, und auch einige neue Importe wie auch unit-test Modul. Ich weiß, Sie sagte minimale änderungen an Ihrem code, aber ich fühlte, wie es wäre eine Unhöflichkeit, um Sie einfach Ihr problem lösen und bewegen auf. Ich wollte für Euch einige Ausschnitte, mit Ihrem Beispiel, dass ich aufgebaut und gelernt werden, während das lernen von python selbst.
Mein Beispiel ist DEUTLICH länger und größer als deiner, und ich bin in keinster Weise darauf hindeutet, Sie nehmen Weg über die kürzeste und einfachste route, ich bin lediglich ein Beispiel. Seien Sie nicht beunruhigt, wenn Sie dieses Lesen, gehen Sie einfach durch Sie und mit Ihr spielen und Sie nutzen, um den besten Ihrer Fähigkeit. Sie müssen möglicherweise halten Sie sinniert in Ihrem Kopf & Dateisystem für eine Weile, bevor es beginnt Sinn zu machen.
Wenn Sie wissen wollen, was alle, die
if __name__ == "__main__":
Müll ist, schlage ich vor, Sie speichern Sie meinen code in eine Datei namensStudent.py
- und call -import Student
aus einem python-interpreter-Sitzung. Beachten Sie, was passiert anders :). Auch, in der gleichen Sitzung, nach dem Aufrufimport Student
(aus dem gleichen VerzeichnisStudent.py
gespeichert ist, natürlich) gebenhelp(Student)
-- ich garantieren, es wird Ihre Zeit Wert sein.Bitte lassen Sie mich wissen, wenn dies Ihnen hilft, und wenn Sie verwirrt sind von jedem Aspekt dieses Kodex. Herzlich willkommen auf stack overflow 🙂
lloyd = {
"name": "Lloyd",
"homework": [90.0, 97.0, 75.0, 92.0],
"quizzes": [88.0, 40.0, 94.0],
"tests": [75.0, 90.0]
}
alice = {
"name": "Alice",
"homework": [100.0, 92.0, 98.0, 100.0],
"quizzes": [82.0, 83.0, 91.0],
"tests": [89.0, 97.0]
}
tyler = {
"name": "Tyler",
"homework": [0.0, 87.0, 75.0, 22.0],
"quizzes": [0.0, 75.0, 78.0],
"tests": [100.0, 100.0]
}
Add your function below!
def average(numbers):
total = float(sum(numbers))
return total/len(numbers)
def get_average(student):
homework = average(student['homework']) * 0.1
quizzes = average(student['quizzes']) * 0.3
tests = average(student['tests']) * 0.6
return (homework + quizzes + tests)
def get_letter_grade(score):
if score > 90 or score == 90:
return "A"
elif score > 80 or score == 80 and score < 90:
return "B"
elif score > 70 or score == 70 and score < 80:
return "C"
elif score > 60 or score == 60 and score < 70:
return "D"
else:
return "F"
students = [lloyd,alice,tyler]
def get_class_average(students):
results = []
for student in students:
print "student: %s, srednia %s" % (student['name'],get_average(student))
results.append(get_average(student))
print results
print get_average(student)
return average(results)
print get_class_average(students)
Dieser arbeitete für mich: