Die Integration von Korrekturdiensten in Dynexite ermöglicht es Benutzer*innen, Eingaben Studierender automatisch bewerten zu lassen. Dabei führt der gewählte Korrekturdienst abhängig von der Konfiguration die Korrektur durch und liefert ein Ergebnis zurück - er ersetzt also die reguläre Korrektur.
Für jeden Eingabeblock oder Lücke in einer Aufgabe wird individuell festgelegt, ob bzw. welcher der verfügbaren Korrekturdienste eingesetzt wird. Nach dem Klick auf das Korrekturdienste-Symbol (1) öffnet sich die Seitenleiste mit dem Register Korrektur. Hier kann der Korrekturdienst ausgewählt werden (2).
Bei Lückentext-Aufgaben ist die Auswahl des Korrekturdienstes pro Lücke möglich. Nach dem Klick auf eine Lücke (1) öffnet sich die Seitenleiste. Im Register Korrektur (2) kann dann der Korrekturdienst ausgewählt werden (3).
Der Index der vorgegebenen Antwortmöglichkeiten beginnt mit 0. Um im Quellcode für den ausgewählten Korrekturdienst Bezug auf die Antwortmöglichkeiten nehmen zu können, verwenden Sie für die Antwortmöglichkeit an erster Stelle die 0, für die Antwortmöglichkeit an zweiter Stelle die 1 etc. Im Code nehmen Sie demnach mit answer == 2
Bezug auf die Antwortmöglichkeit an dritter Stelle.
Der Index bleibt auch dann unverändert, wenn die Antwortmöglichkeiten den Studierenden in zufälliger Reihenfolge angezeigt werden (durch Aktivieren von Optionen mischen im Einstellungsmenü der Aufgabe).
Es ist möglich, einen Bewertungskommentar zu setzen. Verwenden Sie entweder None ("manuelle Korrektur nötig")
, einen Wert zwischen 0 und 1 oder die Struktur {result, comment}
, z.B. {"result": 0.5, "comment": "Ein Bewertungskommentar"}
.
In Dynexite werden die Bestandteile einer Aufgabe (z.B. Teilaufgaben, weitere Eingabeblöcke oder Lücken) im Rahmen des Korrekturdienstes als Elemente bezeichnet. Sie können einem Element einen Namen geben, indem Sie auf das Stifte-Symbol neben der Überschrift im Register Korrektur klicken.
Es muss mindestens ein anderes Element mit ausgewähltem Korrekturdienst geben, damit ein Name gesetzt werden kann. Alle anderen Elemente einer Aufgabe, die einen Korrekturdienst verwenden, sind in einer Tabelle unterhalb des Quellcode-Felds aufgeführt:
Von Studierenden eingegebene oder ausgewählte Antworten werden mit Hilfe eines Python3-Skripts korrigiert. Dies ermöglicht beispielsweise die Berücksichtigung von Folgefehlern oder die Vergabe von Teilpunkten.
Dieser Korrekturdienst steht Ihnen bei folgenden Aufgabentypen zur Verfügung:
Aufgabentyp | Beispielaufgabe | Was zeigt das Beispiel? |
---|---|---|
Codeeingabe-Aufgabe | Beispielaufgabe | Überprüfen von Code auf Korrektheit |
Einfachauswahl-Aufgabe | Beispielaufgabe | Berücksichtigung von Folgefehlern |
Ergebniseingabe-Aufgabe | Beispielaufgabe | Überprüfen von Berechnungen. Werte in der Aufgabenstellung sind dabei zufällig generiert (Parametrisierung). |
Freitext-Aufgabe | Beispielaufgabe | Durchsuchen von Text, Vergabe von Teilpunkten |
Hotspot-Aufgabe | Beispielaufgabe | Vergabe von Teilpunkten (bei diesem Aufgabentyp ohne Korrekturdienst nicht möglich) |
Klassifikations-Aufgabe | Beispielaufgabe | Punktevergabe nur dann, wenn alle Antworten korrekt sind (Klassen pro Teilaufgabe sind gleich). |
Lückentext-Aufgabe | Beispielaufgabe | Gruppierung von Lücken |
Lückentext-Aufgabe | Beispielaufgabe | Berücksichtigung von Folgefehlern und Ausgabe von Kommentaren abhängig vom Fehler (ausführliches Beispiel mit Code-Erklärungen). |
Mehrfachauswahl-Aufgabe | Beispielaufgabe | Vergabe von Teilpunkten (bei diesem Aufgabentyp ohne Korrekturdienst nicht möglich) |
Tabellenlücken-Aufgabe | Beispielaufgabe | Überprüfen von Berechnungen |
Es handelt sich hierbei um stark vereinfachte Beispiele, welche in erster Linie den Einsatz des Korrekturdienstes veranschaulichen sollen.
Benutzer*innen mit der Rolle Administrator können eine Datei mit allen Beispielaufgaben hier herunterladen und dann über die Import/Export-Funktion in Dynexite integrieren.
Diese Beispielaufgabe zeigt, wie mit Hilfe des Korrekturdienstes festgelegt werden kann, dass bei falschen Eingaben noch Teilpunkte für korrekte Codebestandteile erzielt werden. Die Studierenden sollen zwei Variablen nach bestimmten Vorgaben erstellen. Dabei erzielen sie auch dann noch Punkte, wenn sie ein in der Aufgabenstellung nicht geforderten Ausrufezeichen hinter "Hallo Welt" einfügen.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Codeeingabe-Aufgabe.
Klicken Sie auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst Python3 auszuwählen.
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Geben Sie Folgendes in das Quellcode-Feld ein:
if "test" not in answer or "Hallo Welt" not in answer or "Hallo Test" not in answer:
return 0
if 'test' in answer and 'Hallo Welt' in answer and '!' not in answer:
return 1
elif 'test' in answer and 'Hallo Welt' in answer and '!' in answer:
return 0.5
return 0
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Diese Beispielaufgabe zeigt, wie Folgefehler berücksichtigt werden können. Bei den Studierenden wird zunächst Wissen abgefragt ("Was ist die Richtgeschwindigkeit auf deutschen Autobahnen?"), anschließend müssen sie mit dem angegebenen Wert eine Rechnung durchführen ("Wie lange ist die Fahrtzeit von Hamburg nach München bei Richtgeschwindigkeit?"). Für die Berechnung der zweiten Teilaufgabe wird also die Antwort der ersten Teilaufgabe verwendet.
Mit Hilfe des Korrekturdienstes können auch Studierende, deren erste Antwort falsch war, Punkte für die richtige Berechnung der zweiten Teilaufgabe erzielen.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Aufgabe bestehend aus zwei Teilaufgaben vom Typ Einfachauswahl.
Klicken Sie in der ersten Teilaufgabe auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst auszuwählen.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr manuell markieren kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
Wiederholen Sie Schritt 2 für die zweite Teilaufgabe.
Vergeben Sie nun Namen für die beiden Teilaufgaben (Elemente). Klicken Sie hierzu auf das Korrekturdienste-Symbol der ersten Teilaufgabe. Klicken Sie dann auf das Stift-Symbol neben der Überschrift Korrektur: Unbenanntes Element und tragen Sie den Namen "Richtgeschwindigkeit" ein.
Das Benennen der Elemente erhöht die Übersichtlichkeit bei der Bezugnahme auf diese bzw. deren Antwortmöglichkeiten im Code.
Wiederholen Sie Schritt 4 für die zweite Teilaufgabe. Geben Sie diesem Element den Namen "Fahrtdauer".
Klicken Sie erneut auf das Korrekturdienste-Symbol der ersten Teilaufgabe und tragen Sie folgenden Code in das Quellcode-Feld für dieses Element ein:
if answer == 2:
return 1
return 0
Der Index der Antwortmöglichkeiten beginnt mit 0.
answer == 2
bezieht sich also auf die korrekte Antwortmöglichkeit, für deren Auswahl es 1 Punkt gibt (return 1
), während für die anderen Antworten keine Punkte vergeben werden (return 0
).
Klicken Sie nun auf das Korrekturdienste-Symbol der zweiten Teilaufgabe und tragen Sie folgenden Code in das Quellcode-Feld ein:
if Richtgeschwindigkeit == 0 and answer == 2:
return 1
elif Richtgeschwindigkeit == 1 and answer == 1:
return 1
elif Richtgeschwindigkeit == 2 and answer == 0:
return 1
return 0
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Dieses Beispiel zeigt eine Kombination aus Parametrisierung und Korrekturdienst. Die Studierenden sollen die Wurzel aus vorgegebenen Werten ziehen. Die Werte werden via Parametrisierung generiert, d.h. sie werden aus einer vorgegebenen Reihe an Zahlen zufällig ausgewählt. Die Berechnung der Wurzel durch die Studierenden wird über den Korrekturdienst mit Hilfe von Code überprüft.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Ergebniseingabe-Aufgabe mit drei Frageblöcken, tragen Sie dabei der Schreibweise für Parametrisierungen folgend die Variablen {{ x }}
, {{ y }}
und {{ z }}
in die Textfelder für die Fragestellungen ein.
Klicken Sie in der Seitenleiste auf das Symbol </>. Der Bereich Parametrisierung öffnet sich. Geben Sie folgenden Code in das Quellcode-Feld ein:
x = dynexite.choice([4, 9, 16])
y = dynexite.choice([64, 81, 121])
z = dynexite.choice([2025, 6561, 3025])
Fahren Sie nun mit dem Konfigurieren der Lücken fort, indem Sie pro Lücke einen Korrekturdienst auswählen und konfigurieren. Klicken Sie hierzu auf die erste Lücke (1). Das Konfigurationsmenü in der rechten Seitenleiste öffnet sich. Ändern Sie die Art der Lücke über das gleichnamige Drop-down-Menü in den Typ Zahlen (2). Klicken Sie dann im Seitenleistenmenü auf das Symbol Korrekturdienste (3).
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr eingeben oder manuell markieren kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
Geben Sie Folgendes in das Feld Quellcode ein:
import math
if answer == math.sqrt(int(x)):
return 1
return 0
Wiederholen Sie Schritt 3 und 4 für alle weiteren Lücken. Ändern Sie an folgender Stelle entsprechend der in der Fragestellung verwendeten Variablen im Quellcode das x in y bzw. z: (int(x)):
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Dieses Beispiel zeigt, wie der Korrekturdienst einen Freitext auf bestimmte Antworten durchsucht und hierfür Teilpunkte vergeben werden. Die Studierenden sollen eine Anzahl von Begriffen nennen (hier: die Namen von drei deutschen Bundeskanzler*innen) und der Korrekturdienst vergleicht die Eingaben mit einer Liste korrekter Antworten. Pro richtiger Antwort wird 1 Teilpunkt vergeben bei maximal 3 erreichbaren Gesamtpunken.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Freitext-Aufgabe.
Klicken Sie auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst auszuwählen.
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Tragen Sie Folgendes in das Quellcode-Feld ein:
if answer == "" or answer is None:
return 0
result = 0
if "Adenauer" in answer:
result = result + 0.333
if "Erhard" in answer:
result = result + 0.333
if "Kiesinger" in answer:
result = result + 0.333
if "Brandt" in answer:
result = result + 0.333
if "Schmidt" in answer:
result = result + 0.333
if "Kohl" in answer:
result = result + 0.333
if "Schröder" in answer:
result = result + 0.333
if "Merkel" in answer:
result = result + 0.333
if "Scholz" in answer:
result = result + 0.333
if result > 0.99:
return 1
return result
Im Code steht
result
für den prozentualen Anteil an der Maximalpunktzahl. D.h. für jeden korrekt genannten Namen (bis maximal 3) gibt es 0.333 Punkte, daresult
maximal 1 betragen kann.
Dieses Beispiel zeigt, wie Sie mit Hilfe des Korrekturdienstes festgelegen können, dass Teilpunkte für korrekte Markierungen erzielt werden. Die Studierenden sollen in einer Matrix alle Primzahlen markieren. Ohne Verwendung eines Korrekturdienstes gäbe es nur dann Punkte, wenn alle vier Stellen richtig markiert werden. Mit Korrekturdienst werden für jede richtige Markierung Punkte vergeben; bei mehr als vier Klicks werden allerdings automatisch 0 Punkte erzielt (if len(answer) > 4: return 0
).
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Hotspot-Aufgabe und fügen Sie ein Bild hinzu, in diesem Beispiel eine Matrix mit Zahlen von 31 bis 46.
Klicken Sie auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst auszuwählen.
Daraufhin werden ein Quellcode-Feld und verschiedene Konfigurationselemente angezeigt.
Sobald Sie den Korrekturdienst auswählen, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass Sie die korrekten Antworten nicht mehr manuell markieren können. Stattdessen müssen Sie den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
if len(answer) > 4:
return 0
result = 0
for ans in answer:
if ans['x'] > 0 and ans['x'] < 163 and ans['y'] > 0 and ans['y']< 133:
result = result + 0.25
elif ans['x'] > 321 and ans['x'] < 483 and ans['y'] > 133 and ans['y'] < 265:
result = result + 0.25
elif ans['x'] > 321 and ans['x'] < 482 and ans['y'] > 265 and ans['y'] < 397:
result = result + 0.25
elif ans['x'] > 2 and ans['x'] < 161 and ans['y'] > 397 and ans['y'] < 529:
result = result + 0.25
return result
Um die Koordinaten einer Position auf dem Bild einzusehen, fahren Sie mit dem Mauszeiger darüber. Die Daten werden unten links angezeigt. Der linke Wert ist der Wert auf der x-Achse (Horizontale), der rechte der für die y-Achse (Vertikale).
Im Code wird ein gültiger Markierungsbereich wie folgt angegeben:if ans['x'] > 321 and ans['x'] < 482 and ans['y'] > 265 and ans['y'] < 397:
D.h. um einen rechteckigen Bereich zu definieren, der als richtige Antwort gewertet werden soll, müssen Sie die vier Eckpunkte des Rechtecks ermitteln.
Dieses Beispiel zeigt, wie mit Hilfe des Korrekturdienstes festgelegt werden kann, dass nur dann Punkte vergeben werden (return 1
), wenn die Antworten für alle Fragen korrekt ausgewählt wurden (if answer[0] == 1 and answer[1] == 0 and answer[2] == 2:
). Die Studierenden sollen drei Fragen beantworten, indem sie eine Antwort aus einer Reihe vorgegebener Möglichkeiten auswählen.
answer [0] == 1
bezieht sich auf die erste Frage des Beispiels ("Welcher Monat hat 31 Tage?"). Die korrekte Antwort hierauf ist die zweite der drei vorgegebenen Klassen (Februar, März, April). Die Nummerierung der Klassen beginnt bei 0, also wird die Antwort (März) hier durch den Bezug== 1
referenziert.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Klassfikations-Aufgabe. Die drei vorgegebenen Antwortmöglichkeiten (Klassen) in diesem Beispiel sind "Februar", "März" und "April".
Klicken Sie auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst auszuwählen.
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr manuell eingeben oder markieren kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
Tragen Sie Folgendes in das Quellcode-Feld ein:
if answer[0] == 1 and answer[1] == 0 and answer[2] == 2:
return 1
return 0
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Dieses Beispiel zeigt, wie der Korrekturdienst den Gruppierungsmodus ersetzen kann. Die Studierenden sollen drei Lücken ausfüllen, wobei die Reihenfolge der Antworten egal ist.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Lückentext-Aufgabe mit 3 Textlücken.
Klicken Sie auf die erste Lücke (1). Die Seitenleiste öffnet sich. Klicken Sie dort auf das Korrekturdienste-Symbol (2) und dann auf den Button Benutzen (3), um den Korrekturdienst auszuwählen.
Klicken Sie im Bereich Korrekturdienste auf das Stift-Symbol neben "Unbenanntes Element" und vergeben Sie den Namen "Luecke1". Dies ermöglicht im Code die Bezugnahme auf das Element.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr manuell eingeben oder markieren kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
Tragen Sie Folgendes in das Quellcode-Feld ein:
if answer == "" or answer is None:
return 0
cities = [
"Frankfurt am Main",
"Köln",
"München",
"Hamburg",
"Berlin",
"Stuttgart",
"Düsseldorf",
"Leipzig",
"Dortmund",
"Essen"
]
if answer in cities and Luecke2 != answer and Luecke3 != answer:
return 1
return 0
Wiederholen Sie die Schritte 2 bis 4 für die anderen beiden Elemente (Lücken).
Benennen Sie die beiden anderen Elemente als "Luecke2" bzw. "Luecke3", indem Sie auf das Stift-Symbol neben der Registerüberschrift Korrektur klicken. Ändern Sie dann im Quellcode der jeweiligen Lücke Zeile 16 wie folgt:
if answer in cities and Luecke1 != answer and Luecke3 != answer:
if answer in cities and Luecke1 != answer and Luecke2 != answer:
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Dieses Beispiel zeigt, wie in einer Lückentext-Aufgabe Folgefehler mit Hilfe des Korrekturdienstes Python3 berücksichtigt werden können. Es wird also verhindert, dass aufgrund eines Folgefehlers gar keine Punkte vergeben werden.
Eine korrekte Antwort setzt voraus, dass die Eingaben in luecke_a und luecke_b genau gleich sind und dabei valider Python-Code verwendet wird. In der zweiten (im Screenshot nicht umrahmten) Lücke für das Datum wird kein Korrekturdienst verwendet, es handelt sich um eine normale Textlücke. Hier wird die Eingabe der Variable "date" erwartet.
Der in der Lücke (A) in der Korrekturdienst-Konfiguration hinterlegte Quellcode (B) überprüft die Eingabe des Studierenden auf mehrere Kriterien und liefert je nach Ergebnis einen Statuswert (result
) und ggf. einen Kommentar (comment
) zur Bewertung zurück. Unter anderem wird durch den Code verifiziert, ob eine Eingabe ein gültiger Python-Begriff ist.
Im Bereich Verbindungen zu anderen Elementen (C) werden alle anderen Lücken mit aktiviertem Korrekturdienst automatisch angezeigt. Die Benennung einer Lücke kann in der obersten Zeile des Konfigurationsfensters (D) angepasst werden. Im Quellcode kann über den Namen Bezug auf andere Elemente bzw. Lücken mit aktiviertem Korrekturdienst in derselben Aufgabe genommen werden.
def is_keyword(string):
keywords = [
'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
'try', 'while', 'with', 'yield'
]
return string in keywords
if answer is None:
return {"result": 0}
if not answer.isidentifier():
return {"result": 0, "comment": "Parameter ist kein gültiger Identifier. Ein Identifier darf nur mit einem Buchstabe oder Unterstrich beginnen und nur Buchstaben, Ziffern und Unterstrichen enthalten."}
elif is_keyword(answer):
return {"result": 0, "comment": "Parameter ist kein gültiger Identifier. Ihr Parameter entspricht einem Python-Keyword."}
else:
return {"result": 1}
Im Detail macht der Code folgendes:
def is_keyword(string):
keywords = [
'False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
'try', 'while', 'with', 'yield'
]
return string in keywords
is_keyword
hilft bei der Überprüfung, ob eine Eingabe ein Python-Keyword ist.if
, def
, class
). D.h. sie können nicht als Namen für Variablen, Klassen oder Funktionen verwendet werden.Nun wird überprüft, ob bestimmte Bedingungen zutreffen, unter denen die Eingabe des Studierenden in die Lücke falsch bzw. richtig ist, also kein bzw. 1 Punkt vergeben wird.
if answer is None:
return {"result": 0}
answer is None
), wird {"result": 0}
zurückgegeben.if not answer.isidentifier():
return {"result": 0, "comment": "Parameter ist kein gültiger Identifier. Ein Identifier darf nur mit einem Buchstabe oder Unterstrich beginnen und nur Buchstaben, Ziffern und Unterstrichen enthalten."}
answer.isidentifier()
überprüft, ob die Eingabe ein gültiger Python-Identifier ist."result": 0
) für eine Eingabe in ungültigem Python-Code in dieser Lücke vergeben.elif is_keyword(answer):
return {"result": 0, "comment": "Parameter ist kein gültiger Identifier. Ihr Parameter entspricht einem Python-Keyword."}
is_keyword(answer)
) handelt, diese wurden in der Liste am Anfang des Codes definiert."result": 0
) für die Antwort in dieser Lücke vergeben.else:
return {"result": 1}
else
) ist die Eingabe gültig und es wird {"result": 1}
zurückgegeben.Auch der in der dritten Lücke (A) hinterlegte Quellcode (B) überprüft die Eingabe auf mehrere Kriterien hin und liefert je nach Ergebnis einen Statuswert (result
) und ggf. einen Kommentar (comment
) zurück. Für eine korrekte Antwort muss die Eingabe in dieser Lücke mit der Eingabe in der ersten Lücke übereinstimmen.
Wie auch bei der ersten Lücke werden bei aktiviertem Korrekturdienst im Bereich Verbindungen zu anderen Elementen (C) alle anderen Lücken mit aktiviertem Korrekturdienst automatisch angezeigt. Die Benennung einer Lücke kann in der obersten Zeile des Konfigurationsfensters (D) angepasst werden. Im Quellcode kann über den Namen Bezug auf andere Elemente bzw. Lücken mit aktiviertem Korrekturdienst in derselben Aufgabe genommen werden.
if answer is None:
return {"result": 0}
if answer == luecke_a:
return {"result": 1}
elif luecke_a == None and answer == "self":
return {"result": 1}
else:
return {"result": 0, "comment": f"Referenz auf das eigene Objekt stimmt nicht (muss der ersten Lücke ({luecke_a}) entsprechen)."}
Im Detail macht der Code folgendes:
Nun wird überprüft, ob bestimmte Bedingungen zutreffen, unter denen eine Eingabe falsch bzw. richtig ist, sie also keinen bzw. 1 Punkt erzielt.
if answer is None:
return {"result": 0}
answer is None
), wird {"result": 0}
zurückgegeben.if answer == luecke_a:
return {"result": 1}
answer
identisch ist mit der Eingabe in luecke_a
, wird {"result": 1}
zurückgegeben.elif luecke_a == None and answer == "self":
return {"result": 1}
"self"
stellt die Instanz der Klasse dar. Durch die Verwendung von "self" kann auf ein Attribut zugegriffen werden.luecke_a
einzutragen (luecke_a hat den Wert None
), aber gleichzeitig luecke_b
korrekt mit "self"
ausgefüllt wurde (and answer == "self"
). Ist dies der Fall, wird der fehlende Eintrag in luecke_a nicht damit bestraft, dass es für luecke_b ebenfalls keine Punkte gibt.else:
return {"result": 0, "comment": f"Referenz auf das eigene Objekt stimmt nicht (muss der ersten Lücke ({luecke_a}) entsprechen)."}
{"result": 0}
zurückgegeben. Es werden also 0 Punkte für die Antwort in dieser Lücke vergeben."self"
stimmt nicht mit luecke_a
überein.Eine korrekte Anwort setzt voraus, dass die Eingaben in luecke_a und luecke_b gleich sind. Außerdem muss die Eingabe in korrekter Python-Schreibweise gemacht werden.
Der Studierende verwendet zwar eine fehlerhafte Python-Schreibweise, erhält jedoch noch 1 Punkt für seine Eingaben. Der Folgefehler (falsche Schreibweise in beiden Lücken) wird berücksichtigt und aufgrund der korrekten identischen Eingabe in beiden Lücken wird 1 Punkt vergeben.
Die Eingabe in luecke_a ist falsch, denn sie beginnt mit einer Zahl. Dies wird entsprechend in einem Bewertungskommentar angemerkt. Für diese Lücke werden 0 Punkte vergeben.
Die Eingabe in luecke_b ist zwar ebenfalls aufgrund ihrer Schreibweise falsch. Richtig ist hier allerdings, dass die Eingabe in luecke_a und luecke_b gleich ist. Daher wird der Folgefehler berücksichtigt und der Studierende erzielt noch 1 Punkt für die Eingabe in luecke_b.
Dem Studierenden wird (in der Einsicht) ein Kommentar zur Bewertung der fehlerhaften Eingabe angezeigt. Dieser erklärt, dass die Eingabe zwar identisch ist mit der in einer anderen Lücke, jedoch handelt es sich um die falsche Lücke.
Anstatt den Inhalt von luecke_a zu wiederholen, wurde bei dieser fehlerhaften Eingabe in luecke_b der Inhalt der falschen Lücke wiederholt. Der Kommentar spiegelt dies wieder.
Dieses Beispiel zeigt, wie durch den Einsatz des Korrekturdienstes für jede richtige Antwort Teilpunkte vergeben werden und nicht nur dann, wenn alle richtigen Antworten ausgewählt wurden (wie es bei Mehrfachauswahl-Aufgaben normalerweise der Fall wäre). Die Studierenden sollen also die richtigen Antworten aus einer Reihe vorgegebener Antwortmöglichkeiten auswählen. Wählen sie allerdings eine falsche Antwort aus, werden keine Punkte vergeben. Dies verhindert, dass alle Antworten angekreuzt werden, um ganz sicher die volle Punktzahl zu erhalten.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Mehrfachauswahl-Aufgabe.
Klicken Sie auf das Korrekturdienste-Symbol (1). Die Seitenleiste öffnet sich. Klicken Sie dann auf den Button Benutzen (2), um den Korrekturdienst auszuwählen.
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr manuell markieren kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
Tragen Sie Folgendes in das Quellcode-Feld ein:
result = 0
if answer[0] == True:
result = result + 0.5
if answer[1] == True:
result = result + 0.5
if answer[2] == True:
result = 0
if answer[3] == True:
result = 0
return result
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Dieses Beispiel zeigt, wie der Korrekturdienst eine Berechnung auf Korrektheit prüft. Die Studierenden sollen die Quersumme für drei vorgegebene Werte ermitteln.
Um die Aufgabe anzulegen, gehen Sie wie folgt vor:
Erstellen Sie eine Tabellenlücken-Aufgabe mit drei Zahlenlücken.
Klicken Sie auf die erste Lücke (1). Die Seitenleiste öffnet sich. Klicken Sie dort auf das Korrekturdienste-Symbol (2) und dann auf den Button Benutzen (3), um den Korrekturdienst auszuwählen.
Ein Quellcode-Feld und verschiedene Konfigurationselemente werden angezeigt.
Sobald du den Korrekturdienst auswählst, werden die Standard-Korrektureinstellungen für die Aufgabe deaktiviert. Das bedeutet z.B., dass du die korrekten Antworten nicht mehr manuell oder markieren eingeben kannst. Stattdessen musst du den entsprechenden Code im Konfigurationsfenster des Korrekturdienstes hinterlegen.
value = sum(int(y) for y in str(answer))
if value == 8:
return 1
return 0
Wiederholen Sie die Schritte 2 und 3 für die beiden anderen Lücken.
Passen Sie im Quellcode der beiden anderen Lücken den Code an der Stelle if value == 8:
mit dem vorgegebenen Wert der jeweiligen Lücke (also if value == 10:
bzw. if value == 15:
) an.
Die Aufgabe ist nun fertig konfiguriert. Klicken Sie auf Vorschau um zu testen, ob sie korrekt funktioniert.
Bei Fehlern im Python3-Code einer Aufgabe, die erst nach der Prüfungsdurchführung auffallen, sind nachträgliche Code-Anpassungen möglich. Klicken Sie im Schritt Korrektur einer Prüfung neben der entsprechenden Aufgabe auf den Button Korrigieren. Klicken Sie dann auf das Korrekturdienste-Symbol und nehmen Sie die Anpassungen im Code vor. Klicken Sie dann auf den Button Korrektur speichern (links am Ende der Aufgabe), startet dies eine neue Korrektur.
Beachten Sie, dass Sie die Änderung für jede Variante einzeln übernehmen müssen.
Um zusätzliche Systemlast zu vermeiden, wird nur das korrigiert, was geändert wurde. Jedes Element wird autark korrigiert, damit es nicht zu Fehlern bei Abhängigkeiten kommen kann. Die Korrekturen beziehen sich also immer nur auf die Eingaben der Studierenden und die Variablen aus der Parametrisierung, aber nie auf Variablen oder Ergebnisse aus anderen Korrekturskripten.
Python Generator
Python Unit Grader
Python Cas Grader