CodeHilfe

Hilfe zur CodeHilfe

Mit der CodeHilfe können Schülerinnen und Schüler Lücken in einem Programm ergänzen, Codebausteine einsetzen und durcheinandergeratene Zeilen sortieren. Die Lösung wird direkt im Browser überprüft.

Eine CodeHilfe erstellen

Grundlage jeder CodeHilfe ist das fertige, richtige Programm. Darin markierst du, was die Schülerinnen und Schüler ergänzen oder ordnen sollen. Das Werkzeug ist sprachunabhängig; die Beispiele auf dieser Seite verwenden Python und Kotlin.

  1. Öffne den Editor, füge den Lösungscode ein und wähle die Programmiersprache für die Syntaxhervorhebung. Zum Ausprobieren lädt „Beispiel laden“ eine kleine fertige Aufgabe.
  2. Wähle Text aus und setze mit den Knöpfen über dem Codefeld Lücken und Zeilenmarkierungen. Du kannst die Markierungen auch direkt tippen.
  3. Lege unter Einstellungen fest, ob Zeilen sortiert werden, wie Lücken gefüllt werden und ob eine Lösung angezeigt wird.
  4. Ergänze bei Bedarf eine Überschrift und eine Aufgabenstellung.
  5. Prüfe die Aufgabe in der Vorschau. Sie verhält sich genau so wie bei deinen Schülerinnen und Schülern. Stimmt etwas mit den Markierungen nicht, erklärt die Vorschau, was zu ändern ist.
  6. Teile den Link, den QR-Code oder bette die Aufgabe ein (siehe Teilen).

Ein umfassendes Beispiel

Dieses Beispiel verbindet sortierbare und feste Zeilen, zu tippende Lücken, Codebausteine, eine überflüssige Zeile und einen zusätzlichen Baustein. Außerdem kann die Lösung nach einem fehlerhaften Versuch angezeigt werden.

Aufgabe – Temperaturbericht

Baue einen Temperaturbericht für Mainz zusammen. Heute sind es 18 °C, morgen soll die Temperatur um 2 °C steigen. Das fertige Programm soll folgende Ausgabe erzeugen:

Heute in Mainz: 18 °C
Vorhersage für morgen:
20 °C

Fülle die Lücken und bringe die Zeilen in die richtige Reihenfolge. Die Zuweisungen für Ort und heutige Temperatur dürfen ihre Reihenfolge tauschen. Ziehe die nicht benötigte Ausgabezeile in die Ablage oder nutze dafür den Knopf ✕. Einer der angebotenen Bausteine wird nicht benötigt.


def temperaturbericht():                       §§fest
    ort = §§"Mainz"§§                           §§gruppe
    heute = §§18§§                              §§gruppe
    print(f"Heute in {ort}: {heute} °C")
    print("Vorhersage für morgen:")              §§fest
    morgen = heute + §§2::tippen§§
    print(f"{morgen} °C")
    print("Keine Daten")                         §§extra
    §§20::extra§§
temperaturbericht()                            §§fest

Der Lösungscode dazu, wie er im Editor steht:


def temperaturbericht():                       §§fest
    ort = §§"Mainz"§§                           §§gruppe
    heute = §§18§§                              §§gruppe
    print(f"Heute in {ort}: {heute} °C")
    print("Vorhersage für morgen:")              §§fest
    morgen = heute + §§2::tippen§§
    print(f"{morgen} °C")
    print("Keine Daten")                         §§extra
    §§20::extra§§
temperaturbericht()                            §§fest

Einstellungen: Zeilen mischen und sortieren lassen, Lücken füllen durch Tippen oder Bausteine, Lösung anzeigen nach einem Fehlversuch.

Referenz

Einstellungen

Einstellung Werte Bedeutung
Zeilen mischen und sortieren lassen an / aus (Standard) Die beweglichen Zeilen mischen und sortierbar machen. Ist die Einstellung aus, bleibt ihre Reihenfolge fest. Lücken können unabhängig davon immer verwendet werden.
Zeilen verschieben über feste Zeilen hinweg (Standard), nur innerhalb ihres Abschnitts Die beweglichen Zeilen über feste Zeilen hinweg mischen und verschieben oder beides auf die durch feste Zeilen begrenzten Abschnitte beschränken. Nur beim Sortieren wirksam.
Lücken füllen durch Tippen (Standard), durch Tippen oder Bausteine Für alle Lücken festlegen, ob nur eine getippte Lösung erwartet oder zusätzlich ein Codebaustein angeboten wird. Richtig eingetippter Text wird in beiden Fällen anerkannt. Für einzelne Lücken lässt sich das mit ::tippen oder ::baustein überschreiben.
Lösung anzeigen nie (Standard), nach einem Fehlversuch, jederzeit Keine Lösungsanzeige anbieten, sie erst nach einer erfolglosen Überprüfung freischalten oder von Anfang an anbieten.

Markierungen im Lösungscode

Markierung Knopf Bedeutung
§§antwort§§ Lücke Eine Lücke. Standardmäßig wird die Antwort eingetippt.
§§antwort§alternative§§ + Alternative Eine zu tippende Lücke mit mehreren akzeptierten Antworten. Die Antworten werden durch ein einzelnes § getrennt.
§§antwort::baustein§§ Baustein Für diese Lücke einen Codebaustein anbieten. Die richtige Antwort darf weiterhin eingetippt werden.
§§antwort::tippen§§ Nur tippen Für diese Lücke ausschließlich eine getippte Antwort erwarten.
§§antwort::extra§§ Extra-Baustein Einen zusätzlichen Codebaustein anbieten, der für keine Lücke benötigt wird. Die Markierung muss allein in einer Zeile stehen und erscheint nicht im zusammengesetzten Code.
§§fest am Zeilenende Fest Die Zeile bleibt an ihrer Position. Leerzeichen oder Tabs vor der Markierung werden zusammen mit ihr entfernt.
§§gruppe am Zeilenende Austauschbar Direkt aufeinanderfolgende Zeilen mit dieser Markierung dürfen innerhalb ihrer Gruppe in beliebiger Reihenfolge stehen.
§§gruppe=name am Zeilenende Gruppe … Alle gleich benannten Zeilen dürfen die für diese Gruppe vorgesehenen Positionen untereinander tauschen. Sie müssen nicht direkt aufeinanderfolgen und dürfen durch feste Zeilen getrennt sein.
§§extra am Zeilenende Überflüssig Die ganze Zeile gehört nicht zur Lösung und muss in die Ablage verschoben werden.

Zeilenmarkierungen (§§fest, §§gruppe, §§extra) wirken nur, wenn Zeilen sortiert werden. Der Editor schaltet das Sortieren deshalb ein, sobald du eine davon setzt, und richtet alle Zeilenmarkierungen untereinander aus.

Aufgabenstellung formatieren

Eingabe Wirkung
Leerzeile Beginnt einen neuen Absatz. Ein einfacher Zeilenumbruch bleibt als Umbruch erhalten.
`print(x)` Code im Fließtext
**wichtig** Fettdruck
- Punkt Aufzählung; mit 1. Schritt eine nummerierte Liste
``` … ``` Die Zeilen zwischen zwei ```-Zeilen erscheinen als Block in fester Schriftbreite, z.B. für eine erwartete Ausgabe.

Überprüfung und Kopieren

Empfehlungen für den Einsatz

Teilen, Speichern und Datenschutz

Wege zum Teilen

Weg Wofür
Link für Schülerinnen und Schüler Öffnet nur die Aufgabe, z.B. über Moodle, Messenger oder E-Mail.
QR-Code Für Tablets und Smartphones im Unterricht, etwa über den Beamer. Je länger die Aufgabe, desto feiner wird der Code.
Einbetten Ein iframe-Code für Webseiten oder eine Moodle-Textseite. Die eingebettete Aufgabe erscheint ohne Rahmen auf weißem Grund.
Link zum Weiterbearbeiten Nur für dich: Öffnet die Aufgabe wieder im Editor. Damit kannst du sie später ändern oder als Vorlage für eine neue Aufgabe nutzen. Mit dem Schülerlink geht das nicht: Er unterscheidet sich nicht nur im Seitennamen, und der Editor lehnt ihn ab.
Datei Eine Sicherungskopie (.codehilfe.json), die du über „Öffnen …“ wieder lädst.

Wo wird die Aufgabe gespeichert?

Beispiele

Jedes Beispiel hat einen Schwerpunkt. Mit „Im Editor öffnen“ kannst du es als Vorlage für eine eigene Aufgabe verwenden.

Beispiel 1 – Einfache Zeilensortierung

Für eine reine Sortieraufgabe genügt die Einstellung Zeilen mischen und sortieren lassen. Die erste und letzte Zeile bleiben hier fest.

Bringe die drei beweglichen Zeilen so in die richtige Reihenfolge, dass das Programm zunächst eine Zahl speichert, sie verdoppelt und anschließend das Ergebnis ausgibt.


def verdoppeln():                  §§fest
    zahl = 5
    doppelt = zahl * 2
    print(doppelt)
verdoppeln()                       §§fest

Beispiel 2 – Einfache Lücken

Ohne weitere Einstellungen bleiben die Zeilen geordnet und die Lösungen werden eingetippt. Es wird kein Lösungsbutton angezeigt.

Ergänze den Datentyp des Attributs und gib dem Hund den Namen Bello.


class Hund {
    var name: §§String§§ = "§§Bello§§"
}

Beispiel 3 – Getrennte Sortierabschnitte

Mit Zeilen verschieben: nur innerhalb ihres Abschnitts werden bewegliche Zeilen nur innerhalb des jeweiligen, durch feste Zeilen begrenzten Abschnitts gemischt und verschoben.

Sortiere zuerst die Begrüßung und danach die Berechnung. Die Trennlinie zwischen den beiden Programmteilen bleibt dabei an ihrer Position.


def ausgabe():                       §§fest
    name = "Ada"
    print(f"Hallo {name}")
    print("----------------")         §§fest
    zahl = 5
    doppelt = zahl * 2
    print(doppelt)
ausgabe()                            §§fest

Beispiel 4 – Tippen und Bausteine mischen

Mit ::baustein kann bei der standardmäßigen Texteingabe für eine einzelne Lücke ein Baustein angeboten werden. In jedes Feld kann trotzdem getippt werden. Ein Baustein in einer reinen Tipplücke gilt dagegen als falsch.

Ergänze die Person: Setze ihren Namen als Baustein ein und tippe ihr Alter in die zweite Lücke.


class Person {
    val name = §§"Ada"::baustein§§
    val alter = §§17§§
}

Beispiel 5 – Alternative Antworten und sofortige Lösung

Alternative Antworten werden mit einem einzelnen § getrennt. Lösung anzeigen: jederzeit zeigt den Lösungsbutton von Anfang an.

Ergänze die Funktion so, dass sie das Doppelte der übergebenen Zahl zurückgibt.


def verdoppeln(zahl):
    return §§zahl * 2§2 * zahl§§

Beispiel 6 – Direkt aufeinanderfolgende austauschbare Zeilen

Direkt aufeinanderfolgende Zeilen mit §§gruppe bilden eine unbenannte Gruppe. Ihre Reihenfolge ist für die Lösung unerheblich.

Sortiere die Klasse Hund. Die beiden Attribute dürfen in beliebiger Reihenfolge direkt hinter dem Klassenkopf stehen.


class Hund {                       §§fest
    var name = ""                  §§gruppe
    var alter = 0                  §§gruppe
    fun bellen() {
        println("Wuff")
    }
}                                  §§fest

Beispiel 7 – Verteilte austauschbare Zeilen

Eine benannte Gruppe gilt in der gesamten CodeHilfe. Gleich benannte Zeilen dürfen deshalb auch über eine feste Zeile hinweg ihre vorgesehenen Plätze tauschen.

Sortiere die Funktion. Sie soll zuerst Beginn, danach die beiden Farben in beliebiger Reihenfolge und zuletzt Ende ausgeben.


def farben_ausgeben():              §§fest
    print("Beginn")
    print("Rot")                     §§gruppe=farben
    print("----------------")         §§fest
    print("Blau")                    §§gruppe=farben
    print("Ende")
farben_ausgeben()                    §§fest

Beispiel 8 – Überflüssige Zeile

Eine mit §§extra markierte Zeile gehört nicht zur Lösung. Sie kann in die Ablage gezogen oder mit dem Knopf ✕ dorthin verschoben werden.

Sortiere die Funktion so, dass sie die gespeicherte Zahl ausgibt. Verschiebe die syntaktisch fehlerhafte Zeile in die Ablage.


def zahl_ausgeben():          §§fest
    zahl = 5
    print(zahl)
    print zahl                §§extra
zahl_ausgeben()               §§fest

Beispiel 9 – Hinweise bei fehlerhaften Markierungen

Erkennt die CodeHilfe eine widersprüchliche oder unvollständige Konfiguration, zeigt sie anstelle der Aufgabe konkrete Hinweise. Im Editor erscheinen sie in der Vorschau; Schülerlink und QR-Code gibt es erst, wenn alles stimmt. Das folgende Beispiel ist absichtlich fehlerhaft: Die Lücke soll ein Baustein sein, hat aber zwei Antworten, und eine Gruppe besteht aus nur einer Zeile.

Ergänze eine Tierart und ordne die Ausgabe richtig in das Hauptprogramm ein.


fun main() {                              §§fest
    val tier = §§"Hund"§"Katze"§§
    println(tier)                         §§gruppe
}                                         §§fest

In eigene Webseiten einbinden

Für eine einzelne Aufgabe genügt der iframe-Code aus dem Editor. Wer eigene Webseiten mit mehreren CodeHilfen gestaltet, kann das Skript auch direkt einbinden. Dazu den Ordner lib/codehilfe aus dem Quelltext dieses Werkzeugs in das eigene Projekt kopieren.


<link rel="stylesheet" href="lib/codehilfe/css/codehilfe.css">
…
<article>
    <pre class="quelltext codehilfe" data-zeilen-sortieren><code class="language-python">
    …
    </code></pre>
</article>
…
<script src="lib/codehilfe/js/codehilfe.js"></script>

Attribute am pre-Element

Attribut Werte Einstellung im Editor
data-zeilen-sortieren ohne Wert Zeilen mischen und sortieren lassen
data-zeilen-verschieben ueberall (Standard), abschnitt Zeilen verschieben
data-luecken-eingabe tippen (Standard), baustein Lücken füllen
data-loesung nie (Standard), nach-fehler, immer Lösung anzeigen

Beispiel 10 – CodeHilfe als aufklappbare Hilfe

Auf einer eigenen Seite kann die CodeHilfe als freiwillige Hilfe zu einer offenen Programmieraufgabe in einem aufklappbaren Bereich stehen. Wer die Aufgabe selbstständig löst, sieht sie nicht.

Entwickle ein Programm, das die Zahlen von 1 bis n addiert und die Summe ausgibt.

Hilfe zum Programm

Bringe die Zeilen in die richtige Reihenfolge. Eine Zeile wird nicht benötigt.


n = int(input("n: "))                 §§fest
summe = 0                             §§gruppe
zahl = 1                              §§gruppe
while zahl <= n:
    summe = summe + zahl
    zahl = zahl + 1
    print(summe)                      §§extra
print("Summe:", summe)                §§fest

<details class="frage">
<summary>Hilfe zum Programm</summary>
<p>
    Bringe die Zeilen in die richtige Reihenfolge. Eine Zeile wird nicht
    benötigt.
</p>
<pre class="quelltext codehilfe" data-zeilen-sortieren data-loesung="nach-fehler"><code class="language-python">
n = int(input("n: "))                 §§fest
summe = 0                             §§gruppe
zahl = 1                              §§gruppe
while zahl &lt;= n:
    summe = summe + zahl
    zahl = zahl + 1
    print(summe)                      §§extra
print("Summe:", summe)                §§fest
</code></pre>
</details>