Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:tutorial_oop3 [2025-05-19 20:13] hoftalit:tutorial_oop3 [2025-10-28 08:38] (aktuell) – [Score berechnen] hof
Zeile 203: Zeile 203:
   * Der neueste Versuch soll mehr Gewicht haben als lange zurückliegende Versuche.   * Der neueste Versuch soll mehr Gewicht haben als lange zurückliegende Versuche.
  
-Es bietet sich an, mit einem Decay zu arbeiten: jedes Mal, wenn ein neuer Wert dazukommt, wird der alte Score mit einem Faktor <1 multipliziert. Mit einem Faktor von 0.5 setzt sich der Score zur Hälfte aus dem neuesten Test, zur anderen Hälfte aus dem bisherigen Score zusammen: +Es bietet sich an, mit einem _Decay_ (_de_: Zerfall) zu arbeiten: jedes Mal, wenn ein neuer Wert dazukommt, wird der alte Score mit einem Faktor <1 multipliziert. Mit einem Faktor von 0.5 setzt sich der Score zur Hälfte aus dem neuesten Test, zur anderen Hälfte aus dem bisherigen Score zusammen: 
 $$\begin{aligned} score_{new} &= 0.5 \cdot (test_0 + score_{old}) \\ $$\begin{aligned} score_{new} &= 0.5 \cdot (test_0 + score_{old}) \\
   &= 0.5 \cdot (test_0 + 0.5 \cdot (test_1 + 0.5 \cdot (test_2 + \ldots))) \\   &= 0.5 \cdot (test_0 + 0.5 \cdot (test_1 + 0.5 \cdot (test_2 + \ldots))) \\
Zeile 307: Zeile 307:
  
 Wie sieht die `ConsoleLearner.learn` Methode jetzt aus? Wie sieht die `ConsoleLearner.learn` Methode jetzt aus?
- 
 ## Speichern & Lesen ## Speichern & Lesen
 Wir möchten `VocabularyUnits` in eine Datei speichern und von dort wieder lesen können. Es bietet sich an, eine Unit als JSON-Objekt zu speichern. JSON (JavaScript Object Notation) sind Dictionaries, die als Keys nur Strings, als Werte ausschliesslich Strings, Zahlen, Boolean-Werte, Listen und wiederum JSON-Objekte enthalten. Ein `WordPair` könnte zum Beispiel so aussehen: Wir möchten `VocabularyUnits` in eine Datei speichern und von dort wieder lesen können. Es bietet sich an, eine Unit als JSON-Objekt zu speichern. JSON (JavaScript Object Notation) sind Dictionaries, die als Keys nur Strings, als Werte ausschliesslich Strings, Zahlen, Boolean-Werte, Listen und wiederum JSON-Objekte enthalten. Ein `WordPair` könnte zum Beispiel so aussehen:
Zeile 315: Zeile 314:
 </code> </code>
  
 +Eine ganze Unit wäre dann eine Liste solcher Objekte:
 +
 +<code python>
 +[
 +  {
 +    "word1": "Baum",
 +    "word2": "tree",
 +    "correct": 24,
 +    "incorrect": 4,
 +    "score": 0.9249845921993256
 +  },
 +  {
 +    "word1": "Blume",
 +    "word2": "flower",
 +    "correct": 30,
 +    "incorrect": 14,
 +    "score": 0.9999847523718017
 +  }
 +]
 +</code>
 ### Aufgabe E: JSON-Serialisierung ### Aufgabe E: JSON-Serialisierung
  
Zeile 325: Zeile 344:
         import json         import json
         with open(filename, 'w') as out:         with open(filename, 'w') as out:
-            json.dump(json_list, out)+            json.dump(json_list, out, indent=2 # indent=2 aligns the output nicely
 </code> </code>
 +
  
 ### Statische Methoden ### Statische Methoden
Zeile 355: Zeile 375:
             return VocabularyUnit(pairs)             return VocabularyUnit(pairs)
 </code> </code>
 +### Aufgabe F
 +Füge statische Methoden zu `VocabularyUnit` und `WordPair` hinzu, um die gespeicherten Daten wieder einlesen zu können.
 +
 +Ein Beispielprogramm für unseren Code könnte nun so aussehen:
 +
 +<code python>
 +from voci import *
 +
 +filename = 'data/test.voci'
 +unit = VocabularyUnit.read_from(filename)
 +
 +learner = ConsoleLearner()
 +try:
 +    learner.learn(unit)
 +    unit.print_stats()
 +finally:   # Code im finally-Block wird jedenfalls ausgeführt, auch wenn eine Exception passiert ist.
 +    unit.save_to(filename)
 +</code>
 +
 +
 +### Aufgabe G - Webapp
 +S. auch [[talit:flask_webserver]] und [[ef_informatik:webapps:start]].
  • talit/tutorial_oop3.1747685589.txt.gz
  • Zuletzt geändert: 2025-05-19 20:13
  • von hof