Tagebuch-Eintrag #15
Mathe-Aufgaben generieren #2
In meiner ersten Version des Mathe-Aufgaben-Generators war es nur möglich neue Aufgaben zu erhalten, wenn das Script immer wieder manuell im Terminal ausgeführt wird.
Nach dem ich nun verschiedene Funktionen in Python gelernt habe, wollte ich das Script um die Funktion und Abfrage erweitern, ob eine neue Aufgabe gestellt werden soll. Und der Benutzer entscheidet das dann von selbst mit einer entsprechenden Eingabe.
Nun wird es interessant. Die Idee für die theoretische Umsetzung war schon mal vorhanden.
Beginnt nicht alles mit einer Idee? 😉
Ich habe mir dann kurz Gedanken gemacht und für diese Umsetzung kam mir nur die while-Schleife in den Sinn. Denn, die while-Schleife wird so lange ausgeführt, solange eine Bedingung erfüllt ist. Und wenn der Benutzer eine neue Aufgabe möchte, dann ist es der Fall.
Also, dann. Lass das Script beginnen.
Wie in der ersten Version, wird die random-Funktion von Python importiert (import random) und initialisiert (random.seed()).
Zusätzlich erstelle ich eine Variable start_calc mit dem Wert „j“ – für ja. Im Anschluss startet schon die while-Schleife, wenn die Bedingung start_calc hat den Wert j wahr ist.
#Taschenrechner startet
while start_calc == "j":
Im Printzip verläuft das Script innerhalb der while-Schleife wie die erste Version. Es werden Zahlen generiert, eine Variable definiert für das richtige Ergebnis. input-Befehl für das Ergebnis, was der Benutzer eingibt usw. Nachfolgend das Script aus der ersten Version.
# Die Zufallszahlen generieren
zahl1 = random.randint(1,100)
zahl2 = random.randint(1,100)
# Das richtige Ergebnis ausrechnen
richtiges_ergebnis = int(zahl1) + int(zahl2)
# Die Additions-Aufgabe mit den Zufallszahlen ausgeben.
print("Die Aufgabe: " + str(zahl1) + " + " + str(zahl2))
# User gibt sein Ergebnis ein
user_ergebnis = input("Ergebnis: ")
zahl3 = int(user_ergebnis)
# Das Ergebnis des Users ausgeben
print("Dein Ergebnis: ", user_ergebnis)
if zahl3 == richtiges_ergebnis:
# Ausgabe, wenn das eingegebene Ergebnis richtig ist.
print("Richtig!")
else:
# Ausgabe, wenn das Ergebnis falsch ist.
print("Leider falsch :(")
print("Das richtige Ergebnis lautet:", richtiges_ergebnis)
Noch eine Mathe-Aufgabe?
Nun fehlt noch die Frage, ob eine neue Mathe-Aufgabe gelöst werden soll oder nicht. Doch wohin damit? Sinnvollerweise soll die Frage dann gestellt werden, wenn das Ergebnis bereits eingegeben wurde und das Script sagt, ob das Ergebnis richtig war oder nicht. Und wenn im Script nach entweder… oder… gefragt wird, kommt wohl eine if-Abfrage ins Spiel.
Also wird diese Frage zunächst wieder mit einem input-Befehl gestellt. Zusätzlich mit dem Vermerk, mit j oder zu antworten. Der eingegebene Wert wird in der Variable repeat gespeichert.
Anschließt kommt die if-Abfrage. Wenn die Antwort j lautet, soll die while-Schleife erneut starten und somit eine neue Mathe-Aufgabe generiert werden, dafür nutze ich den Befehl continue. Ist die Antwort n, dann soll das Script und die while-Schleife beendet werden, hier wird der Befehlt break verwendet.
# Frage, ob eine neue Aufgabe generiert werden soll
repeat = input("Noch eine Aufgabe? (j/n): ")
if repeat == "j":
continue
# Entspricht der eingegebene Wert nicht j, so wird die While-Schleife nicht erneut durchgeführt.
else:
print("Schade, dann bis zum nächsten mal.")
break # Wenn hier kein break-Befehl definiert wird, startet die while-Schleife trotzdem erneut.
Natürlich reicht es hier nicht, diese Frage zu stellen, wenn das Ergebnis richtig ist. Die Frage soll auch gestellt werden, wenn das eingegebene Ergebnis falsch ist. Also packe ich den obigen Befehl auch in die else-Abfrage von der Zeile 16, aus der ersten Version.
Alles also eine Frage der Logik. Das ist trotzdem manchmal gar nicht so einfach. Hier nun das vollständige Script. Ich nenne es mal Version 1.0.0.
# Modul random importieren
import random
# Zufallsgenerator initialisieren
random.seed()
start_calc = "j"
#Taschenrechner startet
while start_calc == "j":
# Die Zufallszahlen generieren
zahl1 = random.randint(1,100)
zahl2 = random.randint(1,100)
# Das richtige Ergebnis ausrechnen
richtiges_ergebnis = int(zahl1) + int(zahl2)
# Die Additions-Aufgabe mit den Zufallszahlen ausgeben.
print("Die Aufgabe: " + str(zahl1) + " + " + str(zahl2))
# User gibt sein Ergebnis ein
user_ergebnis = input("Ergebnis: ")
zahl3 = int(user_ergebnis)
# Das Ergebnis des Users ausgeben
print("Dein Ergebnis: ", user_ergebnis)
if zahl3 == richtiges_ergebnis:
# Ausgabe, wenn das eingegebene Ergebnis richtig ist.
# Delay-Funktion "Ich rechne", dann kommt das richtige Ergebnis.
print("Richtig!")
# Frage, ob eine neue Aufgabe generiert werden soll
repeat = input("Noch eine Aufgabe? (j/n): ")
if repeat == "j":
continue
# Entspricht der eingegebene Wert nicht j, so wird die While-Schleife nicht erneut durchgeführt.
else:
print("Schade, dann bis zum nächsten mal.")
break # Wenn hier kein break-Befehl definiert wird, startet die while-Schleife trotzdem erneut.
else:
# Ausgabe, wenn das Ergebnis falsch ist.
print("Leider falsch.")
print("Richtige Antwort ist:", richtiges_ergebnis)
# Frage, ob eine neue Aufgabe generiert werden soll
repeat = input("Noch eine Aufgabe? (j/n): ")
if repeat == "j":
continue
# Entspricht der eingegebene Wert nicht j, so wird die While-Schleife nicht erneut durchgeführt.
else:
print("Schade, dann bis zum nächsten mal.")
break
So funktioniert das Script
Ich bin sicher, dass sich das ganze noch mit weniger Code realisieren lässt. Aber dieses Tagebuch dient mir persönlich, um mein Wissenstand zu kontrollieren und meine jeweils aktuellen Kenntnisse anzuwenden.
Andere Mathe-Aufgaben generieren
Schon jetzt weiß ich, dass dieser Mathe-Aufgaben-Generator nur bedingt praktisch nützlich ist. Weil es nur Addionsaufgabe kann (außer man ändert den Rechenart manuell).
Für spätere Variante, möchte ich die Rechenart auch zufällig oder per Benutzer-Auswahl festlegen lassen können. Bei der Division muss ich aufpassen, dass die Zahl 0 (Null) nicht generiert werden darf. Außerdem sollen die input-Abfragen noch verfeinert werden, so dass zum Beispiel bei der Eingabe vom Ergebnis, nur Zahlen erlaubt sind.
Theoretisch weiß ich schon, welche Python-Funktionen ich nutzen muss. Theorie und Praxis sind bekanntlich unterschiedliche Paar Schuhe 😉
Das genügt für diesen Tagebuch-Eintrag. Ende, Aus, Micky-Maus.