wir sind gerade dabei an unserer Schule in der Oberstufe von Java auf Python umzuschwenken und ich versuche gerade einen Anwendungsfall für Vererbung zu finden, der sinnvoll und für Schüler nachvollziehbar ist. Durch den Kurs zieht sich wie ein roter Faden ein Rechentrainings-Programm, das immer mal wieder auftaucht und im Laufe der Zeit verbessert/erweitert wird. Bei der Einführung der Klassen/Objekte wurde der Rechentrainer ebenfalls mit den Klassen Spiel, Spieler und Aufgabe modelliert.
Aus diesem Grund war meine Idee, die Vererbung nun anhand von Aufgaben und deren Spezialisierungen einzuführen, d.h. das Programm soll statt Rechenaufgaben vielleicht auch z.B.: MultipleChoice-Fragen stellen können (oder andere, das wäre nach dem ersten Beispiel den Schülern dann freigestellt, das umzusetzen).
Ein erster Implementationsversuch anhand ich dann die Vererbung erklären wollte, sieht folgendermaßen aus:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from random import randint
class Aufgabe():
def __init__(self, frage = None, antwort = None):
self.frage = frage
self.antwort = antwort
def stelle(self):
return self.frage
def antwort_ist_richtig(self, eingabe):
return eingabe == self.antwort
class RechenAufgabe(Aufgabe):
"""
maximaler Zahlenraum und Rechenart werden übergeben,
daraus werden frage und antwort generiert
"""
def __init__(self, zahl_max, rechenart):
frage = self.frage_generieren(zahl_max, rechenart)
antwort = self.antwort_generieren(frage)
Aufgabe.__init__(self, frage, antwort)
def frage_generieren(self, zahl_max, rechenart):
zahl1 = randint(1, zahl_max)
zahl2 = randint(1, zahl_max)
return '{0} {1} {2} = '.format(zahl1, rechenart, zahl2)
def antwort_generieren(self, frage):
return eval(frage[:-2])
class MultipleChoiceAufgabe(Aufgabe):
"""
bekommt eine Frage, die richtige Antwort
und eine Liste mit möglichen Antworten übergeben,
"""
def __init__(self, frage, richtige_antwort, moegliche_antworten):
Aufgabe.__init__(self, frage, richtige_antwort)
self.moegliche_antworten = moegliche_antworten
def stelle(self):
frage_ausgabe = Aufgabe.stelle(self)
frage_ausgabe += '\n'
for i, antwort in enumerate(self.moegliche_antworten):
frage_ausgabe += "{0}: {1} \n".format(i+1, antwort)
frage_ausgabe += "Antwort: "
return frage_ausgabe
if __name__ == '__main__':
print "Rechenaufgabe:"
rechenaufgabe = RechenAufgabe(10,'+')
antwort = input(rechenaufgabe.stelle())
if rechenaufgabe.antwort_ist_richtig(antwort):
print "richtig"
else:
print "falsch"
print
print "Multiple Choice Aufgabe:"
textaufgabe = MultipleChoiceAufgabe("Wie heißt das Staatsoberhaupt in Deutschland?",2,
["Bundeskanzler", "Bundespräsident",
"Bundestagspräsident","Bundesratspräsident"])
antwort = input(textaufgabe.stelle())
if textaufgabe.antwort_ist_richtig(antwort):
print "richtig"
else:
print "falsch"
Danke!
EmaNymton