Re: gesucht wird eine kreative Methode um Sachaufgaben zu erstellen
Verfasst: Dienstag 21. März 2023, 18:56
Na dann muss ich mal schauen, ob ich das verstehe. Danke!
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
In [7]: list()
Out[7]: []
In [8]: dict()
Out[8]: {}
Lieber @__blackjack__, ich habe Abitur (gar nicht mal schlecht), das große Latinum (erschwindelt) ein Mathe- und Physikstudium (allerdings nur Schmalspur als Lehramt) ... und muss jetzt wieder feststellen, dass mich das intelektuell überfordert. Ich fürchte, ich werde das nie endgültig verstehen und werde weiter auf eure geduldige Hilfe angewiesen sein.__blackjack__ hat geschrieben: Dienstag 21. März 2023, 19:01 Das `default`-Argument muss etwas sein was später von dem Rahmenwerk *aufgerufen* werden kann und daraufhin einen neuen Wert erzeugt, falls man keinen Wert übergeben hat. Irgendwie müssen diese Werte ja erzeugt werden. Du kannst da auch einen Lambda-Ausdruck angeben der erzeugt was Du haben willst, also ``default=lambda: []`` oder ``default=lambda: list()``, oder Du schreibst eine Funktion ``def create_default: return []`` und gibst die an: ``default=create_default``. Am einfachsten ist aber ``default=list`` weil `list` aufrufbar ist und eine neue Liste liefert wenn man das tut.
Das ist ja genial! Das funktioniert prima! Ich mir nicht träumen lassen, dass es sowas fertig gibt. Das "simplify" habe ich in meinem bestehenden Rechntrainer mühselig selbst programmiert.
wollte ich jeweils eine Liste für die Variablen erstellen, aus der ich dann zufällig eine auswähle, aber[[5, 10, 15, 20, 25], [1, 1.2, 1.5, 2, 2.5]]
Code: Alles auswählen
>>> pitwheazle_dictonary = {"liste_a":[5, 10, 15, 20, 25], "liste_b":[1, 1.2, 1.5, 2, 2.5]}
>>> print(pitwheazle_dictonary.values())
dict_values([[5, 10, 15, 20, 25], [1, 1.2, 1.5, 2, 2.5]])
>>> print(pitwheazle_dictonary.keys())
dict_keys(['liste_a', 'liste_b'])
Code: Alles auswählen
[[5, 10, 15, 20, 25], [1, 1.2, 1.5, 2, 2.5]]
Code: Alles auswählen
items = len(variable) # variablen insgesamt
a=random.choice(variable[0])
if items>1:
b=random.choice(variable[1])
if items>2:
c=random.choice(variable[2])
if items>3:
d=random.choice(variable[3])...
Code: Alles auswählen
for item in variable ...
Code: Alles auswählen
text = aufgabe.text.format(a,b)
Entschuldige, ich habe die Antwort anscheinend vergessen loszuschicken:Dennis89 hat geschrieben: Mittwoch 22. März 2023, 19:07 was genau funktioniert denn an deinem ersten Beispiel nicht. Bei mir gehts:
"Variable" im Sinne von Variable in Python und/oder "Variable" im Sinne von Variable in der Mathematik?Pitwheazle hat geschrieben: Freitag 24. März 2023, 14:13 Und ein Nachtrag: Wie ich mich kenne, bekomme ich dann auch diesen Codeauch nicht auf die unterschiedliche Anzahl von Variablen angepasst.Code: Alles auswählen
text = aufgabe.text.format(a,b)
Code: Alles auswählen
def format( *a):
print(type(a))
print(str(a))
Code: Alles auswählen
def format(self, *a):
print(type(a))
print(str(a))
Code: Alles auswählen
import random
import sympy
text = "Wie viele {a}cm lange Stücke kann man von einer {b}m langen Leiste absägen?"
ergebnis = "100*b/a"
variablen_auswahl = {"a": [5,10,15,20,25], "b": [1,1.2,1.5,2,2.5]}
variablen = {
name: random.choice(werte)
for name, werte in variablen_auswahl.items()
}
print(text.format(**variablen))
print("Lösung:", sympy.sympify(ergebnis).subs(variablen))
Das Problem besteht jetzt noch darin, dass ich auch noch ein Ergebnis berechnen muss. @sparrow hatte die geniale Idee mit diesem "parser" Code und der funktioniert auch prima. Da muss ich aber in z.B. "parser.parse('a‘ = a).evaluate({}) " das a mit dem entsprechenden Wert ersetzen und das habe ich noch nicht mittels "for ... in" hinbekommen, da ich die eine wechselnde Anzahl von Variablen von a bis f ersetzen muss.Sirius3 hat geschrieben: Sonntag 26. März 2023, 11:37 Ich bin bei der ganzen Diskussion nicht mehr mitgekommen, wo denn das eigentliche Problem ist.
Ich habe ja auch schon geschrieben, dass ich meinen Code möglichst mit deutschen Benennungen schreibe. Hast du eine Idee, wie ich die Variablen aus der Mathematik "a=20" von denen im Code "a=20" unterscheiden kann?grubenfox hat geschrieben: Sonntag 26. März 2023, 12:09 mich hat es wohl bei der variablen Verwendung des Wortes Variablen aus der Bahn geworfen... (bei meinen eigenen Programmen nutze ich ja meist deutschsprachige Begriffe für z.b. Variablen- oder Funktionsnamen.
Code: Alles auswählen
stellen=parameter[2] # Anz der Dezimalstellen
variable=parameter[3]
print(variable)
term=aufgabe.loe_weg
parser = Parser()
items = len(variable) # varaiable insgesamt
a=b=c=d=e=f=""
if items>0:
a=random.choice(variable["a"])
if 'a' in term:
term=parser.parse(term).substitute('a',a).toString()
if items>1:
b=random.choice(variable["b"])
if 'b' in term:
term=parser.parse(term).substitute('b',b).toString()
if items>2:
c=random.choice(variable["c"])
if 'c' in term:
term=parser.parse(term).substitute('c',c).toString()
if items>3:
d=random.choice(variable["d"])
if 'd' in term:
term=parser.parse(term).substitute('d',d).toString()
if items>4:
e=random.choice(variable["e"])
if 'e' in term:
term=parser.parse(term).substitute('e',e).toString()
if items>5:
e=random.choice(variable["f"])
if 'f' in term:
term=parser.parse(term).substitute('f',f).toString()
term=term.replace("(","").replace(")","")
ergebnis=parser.parse(term).evaluate({})
print(ergebnis)
text = aufgabe.text.format(a,b,c,d,e,f)
print(text)
pro_text = aufgabe.pro_text+term
variable = ""
frage = aufgabe.links_text
einheit = aufgabe.rechts_text
rest=""
if stellen==0:
if ergebnis%1:
anmerkung=aufgabe.anmerkung
rest = "+Rest"
ergebnis=ergebnis//1
print(ergebnis)
term=term.replace(".",",")
lsg = term + "=" + format_zahl(ergebnis,stellen) + rest
print(lsg)
Code: Alles auswählen
if 'x' in term:
Nicht wirklich... der Vorschlag Mathematik und Informatik nicht zu vermischen ist ja nun nicht wirklich zielführend.Pitwheazle hat geschrieben: Sonntag 26. März 2023, 12:20 Ich habe ja auch schon geschrieben, dass ich meinen Code möglichst mit deutschen Benennungen schreibe. Hast du eine Idee, wie ich die Variablen aus der Mathematik "a=20" von denen im Code "a=20" unterscheiden kann?
Ich hatte halt zwischenzeilich schon mal alleine probiert das zum Laufen zu bringen. ich probiere das mit den Namen später noch aus - so ist der Code ja wirklich nicht schön.Sirius3 hat geschrieben: Sonntag 26. März 2023, 13:02 Es ist schade, dass Du gar nicht auf meinen Code eingehst. Denn der zeigt, wie man mit dem Deinem Problem umgehen muß.
Das hatte ich ja versucht. Unbedarft war ich davon ausgegangen, dass "a" im Wörterbuch ein Key ist und ich brauche das a halt dann als Variablenname. Bisher hatte ich das nicht hinbekommen und nach Recherchen im Internet den Versuch aufgegeben (da wurde u.A. empfohlen, den Versuch keys in Varaiablenamen (identifier) zu wandeln aufzugeben) - aber wenn du da hoffnungsvoll bist gehe ich da ebenfalls nochmals hoffnungsvoll dran.Sirius3 hat geschrieben: Sonntag 26. März 2023, 13:02 2. Für die Zuordnung Name -> Wert gibt es in Python Wörterbücher. Und mit Wörterbüchern kann man auch in Schleifen arbeiten.
Ich habe zunächst mal die Klammern rausgeworfen, weill ich den Schülerinnen und Schülern, wenn sie auf "Lösung anzeigen" klicken, den Lösungsweg anzeigen wollte und der wurde von parse z.B. zu "(1.2*(100/5))=24" anstelle von - "1,2*100/5" ich fürchte, das verstehen sie nicht auf Anhieb und werden sich auch nicht weiter darauf einlassen. Dass ich bei weiteren Aufgaben u.U. auch eine Klammer im Lösungsweg benötige habe ich schon vorgeplant.Sirius3 hat geschrieben: Sonntag 26. März 2023, 13:02 Wenn man mit replace auf Ausdrücke losgeht, macht man irgendwas falsch, vor allem, wenn man Klammern einfach so löscht.
Ich könnte ja in Zukunft "a=20" (math) und "a=20" (code) schreiben? Oder nur "variable (math)" und "variable (code)".grubenfox hat geschrieben: Sonntag 26. März 2023, 13:11Pitwheazle hat geschrieben: Sonntag 26. März 2023, 12:20 Hast du eine Idee, wie ich die Variablen aus der Mathematik "a=20" von denen im Code "a=20" unterscheiden kann?