@sc19: Ergänzende Anmerkungen: Man nummeriert keine Namen. Die werden hier ja auch gar nicht wirklich gebraucht — man kann die `students`-Datenstruktur auch einfach komplett literal hinschreiben:
Code: Alles auswählen
students = [
{"name": "Hans", "points": [285, 210, 135, 100, 300]},
{"name": "Peter", "points": [65, 56, 48]},
]
Namen sollte man auch nicht kryptisch abkürzen. `stud` gibt es ja tatsächlich als englisches Wort und das bedeutet nicht Student.
`sumpoints` ist zwar keine Abkürzung aber eine komische Wortschöpfung. Mal vom fehlenden Unterstrich abgesehen klingen „Summenpunkte“ irgendwie schräg. Das ist eine Punkt-Summe oder besser Gesamptpunktzahl, also in Englisch so etwas wie `total_points`.
Zwischenstand bei der Berechnung/Ausgabe:
Code: Alles auswählen
for student in students:
print(student["name"], sum(student["points"]))
Was jetzt noch unschön ist, sind die Wörterbücher für etwas das eigentlich Objekte sind. Wörterbücher mit einem festen Satz an Schlüsseln, sind ja keine allgemeinen Abbildungen von Schlüsseln auf Werte sondern etwas spezialisierteres, wo man nur Wörterbücher verwendet wenn die Sprache nichts besseres für Verbunddatentypen bietet. Also in Python minimal so etwas wie `collections.namedtuple()`:
Code: Alles auswählen
#!/usr/bin/env python3
from collections import namedtuple
Student = namedtuple("Student", "name points")
def main():
students = [
Student("Hans", [285, 210, 135, 100, 300]),
Student("Peter", [65, 56, 48]),
]
for student in students:
print(student.name, sum(student.points))
if __name__ == "__main__":
main()
Wenn man Werte zu einem Objekt zusammenfasst, macht manchmal aber auch eine eigene Klasse Sinn, denn die Gesamptpunktzahl kann man auch als eine Eigenschaft von einem Studenten-Objekt auffassen, statt etwas das ausserhalb berechnet wird:
Code: Alles auswählen
#!/usr/bin/env python3
class Student:
def __init__(self, name, points):
self.name = name
self.points = points
@property
def total_points(self):
return sum(self.points)
def main():
students = [
Student("Hans", [285, 210, 135, 100, 300]),
Student("Peter", [65, 56, 48]),
]
for student in students:
print(student.name, student.total_points)
if __name__ == "__main__":
main()