doppelte Buchstaben un reguläre Ausdrücke

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Schon wieder was:
Die Kids sollen Terme vereinfachen. Für zB. "Vereinfache den Term '4v ·5v' so weit wie möglich, wird 20v² und 20v^2 akkzeptiert. Es kann aber auch vorkommen, dass unbegabte SuS '20vv' eingeben. Ich vermute, man kann man mit regulären Ausdrücken überprüfen, ob irgendein Buchstabe doppelt vorkommt - ich bekomme es nicht hin.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Daneben gibt es noch 20*v^2 oder 20·v² oder v^2*20.
Du mußt also die Eingabe in eine Normalform bringen, um sie vergleichen zu können.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ja, klar, da lege ich eine Regel fest. Koeffizient vorne, Buchstaben nach dem Alphabet. Und bei weiteren Termen auch höhere Potenzen zuerst, Konstanten zuletzt. Es gibt Stimmen, das müsse nicht sein - ich finde es gut.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich würde da auf die richtige(n) Schreibweise pochen. Alles andere ist doch eh unmöglich. v5v ist auch korrekt im mathematischen Sinne. Wer vv schreibt, hat halt verloren. Soll beim lernen ja vorkommen.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ich will es ja auch nicht als richtig akkzeptieren, ich will auf den Fehler hinweisen.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist halt ne Frage des Anspruches. Klar kann ich das verstehen, aber warum ist es 5vv, und nicht vv5 oder v5v, oder 5v^3/v? Wenn es falsch eingegeben wurde, kannst du eben nur generische Hinweise geben. Weil ehrlich gesagt ein System, das so gut ist, dass es eine Lösung nur deswegen nicht akzeptiert, weil sie “falsch” normalisiert ist, ist ja schon fast arschig. Denn 5vv ist nunmal richtig, rein algebraisch. Dann muss man das auch nicht korrigieren.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

sehe ich auch so. Entweder muss man explizit _vor_ den Aufgaben darauf hinweisen, wie die Eingabe bitte auszusehen hat (also quasi die Konvention festlegen) - oder man akzeptiert es.

Das wäre in der Schule hat (hoffentlich) nicht anders. 5v^2 ist halt die gängige Schreibweise zumindest Computer-Umfeld, aber rein vom Ergebnis ist halt 5*v^2, 5vv, v5v, vv5, v*v*5 usw. das gleiche, d.h. es kommt das gleiche raus. Und für Python wäre die richtige Schreibweise 5*v**2.

Und wenn man eine Konvention festlegt (wie z.B. "Mal-Zeichen sollen nicht nicht eingegeben werden, also 5v und nicht 5*v) sollte man die Eingabe so validieren und zur Korrektur anbieten, dass nicht erwünschte Zeichen wie in dem Fall das * / Mal-Zeichen nicht erwünscht / nötig sind.

Wenn man Frust generiert, weil eine mathematisch richtige Lösung nur aufgrund der Notation als falsch deklariert wird bringt das auch nix.

Gruß, noisefloor
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ihr habt sicher recht, es gibt keine allgemeingültige Regel und alle eure Alternativen sind sicher algebraisch korrekt. Bei Polynomen hat sich aber eine Schreibweise wie "P(x):=9x³+x²+7x-3,8" eingebürgert. Auch da ist mir nicht bekannt, dass das zwingend wäre. Aber eine Aufgabe "Mach mit dem Term irgendwas - ohne dass sich der Wert ändert" erscheint mir nicht wirklich sinnvoll. Die Aufgabe lautet auch "Vereinfache den Term". Ich weise auserdem in einer Anmerkung im Text darauf hin, dass die Buchstaben nach dem Alphabet sortiert werden und Konstanten ans Ende geschrieben werden sollen. Außerdem überprüfe ich, ob der eingegebene Term algebraisch richtig ist und, wenn ja, werte ich ihn auch nicht als falsch, ich gebe eine passende Rückmeldung - auch z.B, dass man "1x" nicht schreibt. "1x" satt "x" ist natürlich auch nicht falsch, wenn die Kids das aber nicht wissen, können sie auch eine Aufgabe wie "2x+x" nicht lösen.
Ich hoffe, eure Bedenken damit berücksichtigt zu haben.
Zu meiner Ausgangsfrage: Die habe ich im Code jetzt so gelöst:

Code: Alles auswählen

    erlaubt = ['a','b','c','x','y','z','u','v','w','1', '2','3','4','5','6','7','8','9','0','+','-','*','(',')','^','²','³']
    for e in erlaubt[:8]:
        if e+e in term:
            rueckmeldung = 'Anstelle von "{}" schreibt man "{}²".'.format(e+e,e)
Antworten