ubuntuusers.de

V-Trainr - Ein Vokabeltrainer in Python

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels Baustelle/Trash/V-Trainr.

nexonic

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Hi,

ich habe vor knapp einem Monat angefangen PyQt4 zu lernen und daraufhin beschlossen einen Vokabeltrainer zu schreiben. Vor ein paar Tagen habe ich ihn jetzt "V-Trainr" getauft. Sicher gibt es eine Menge anderer super Vokabeltrainer für Linux, aber Vielfalt belebt ja das Geschäft ☺

Was man zurzeit mit ihm machen kann:

  • Vokabeldateien anlegen

  • Vokabeldateien öffnen

  • in diesen Dateien Vokabeln speichern

  • Vokabeln editieren(löschen noch nicht)

  • sich abfragen lassen(Muttersprache-Fremdsprache und Fremdsprache-Muttersprache) mit Zeitmessung

  • Programmsprache auf Englisch stellen(Vorsicht: mein Englisch ist nicht besoners gut 😉)

Was auf jedenfall noch geplant ist:

  • Vokabeln löschen

  • Beim Abfragen einen Button "Akzeptieren", falls man sich bei einer Vokabel verschrieben hat

  • Man soll zusätzliche Daten zu einer Vokabel angeben können(z.B. Kommentare/Synonyme/usw.)

  • eine Funktion, dass man nach einer Abfrage die falschen wiederholen kann

  • bestimmt noch mehr Sachen, die mir nur gerade nicht einfallen 😉

Die aktuelle Version gibt es hier:

zum Ausführen mit "cd /pfad/zu/vtrainr" in den Pfad wechseln und mit "./start.py" ausführen.

Da ich noch kaum Erfahrung habe, bitte ich um etwas Nachsicht was den Code angeht; Kritik/Anregungen sind aber natürlich trotzdem erwünscht.

Gruss
N3X0NIC

dauerbaustelle

Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Hallo,

sieht doch schon mal schön aus. Der Code ist sehr gut dokumentiert, finde ich. Die Darstellung der Code-Kommentare und -Dokumentation ist mir fremd, wenn auch deswegen nicht schlimm.

Aber sowas hier:

1
2
sys.path.append('./main')
import requester

ersetze bitte mit

1
import main.requester

Ist schöner, übersichtlicher und vermeidet Namenskonflikte ☺

Grüße

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Dauerbaustelle schrieb:

ersetze bitte mit

1
import main.requester

Ist schöner, übersichtlicher und vermeidet Namenskonflikte ☺

Hi,

joa, so wollte ich das am Anfang auch machen, leider kommt dann immer sowas:

1
2
3
4
Traceback (most recent call last):
  File "./start.py", line 32, in <module>
    import main.editor
ImportError: No module named main.editor

Finde ich irgendwie komisch, aber vielleicht weisst du/jemand ja eine Lösung ☺

EDIT: Habs schon, __init__.py musste in die Verzeichnisse ☺

Gruss
N3X0NIC

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Hallo,

ein kleines Update:

  • löschen von Vokabeln möglich

  • nach editieren einer Vokabel muss nicht mehr das Fenster aktualisiert werden

Wieder zu finden unter

Viel Spass!

Gruss
N3X0NIC

dauerbaustelle

Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Würde die Vokabeln gerne komplett mit der Tastatur eingeben.

Das heißt:

  • Cursor soll automatisch in das "Muttersprache"-Feld springen

  • erstes Enter soll in das "Fremssprache"-Feld springen

  • zweites Enter soll das Gleiche wie ein Klick auf <OK> bewirken

Gruß

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Kann das hier gerade nicht testen, aber eigentlich sollte der Cursor schon automatisch im ersten Feld sein. Ins nächste Feld kommt man ja mit dem Tabulator. Das mit dem bestätigen nach Enter kann ich noch einbauen 😉

Gruss
N3X0NIC

Keba Team-Icon

Ehemalige
Avatar von Keba

Anmeldungsdatum:
24. Juli 2007

Beiträge: 3802

Ich bin eigentlich zu faul um mir Vokabeln abzufragen, aber wenn man Stundenlang vorm PC sitzt wäre so ein kleines Fenster in der Notification Area nett, alle x Minuten blinkt das auf, ich klicke drauf und es werden y Vokabeln abgefragt.

Dann würde ich dein Projekt gerne gerne nutzen.

Ist auch so was wie das Phasenprinzip geplant, also wie man es von dem Karteikasten kennt. Beantwortet man eine Vokabel richtig, kommt sie in das nächste Kästchen und wird X tage nicht mehr abgefragt, noch eins weiter wird es noch länger nicht mehr abgefragt usw. wenn man was falsch macht, kommt es wieder nach ganz vorne...

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

So, habe jetzt erstmal den Vorschlag umgesetzt, dass man beim eingeben einer Vokabel bzw. der Dateisprache Enter zum bestätigen drücken kann. Für den Rest des Programms mach ich das gelegentlich auch mal ☺

Keba schrieb:

Ich bin eigentlich zu faul um mir Vokabeln abzufragen, aber wenn man Stundenlang vorm PC sitzt wäre so ein kleines Fenster in der Notification Area nett, alle x Minuten blinkt das auf, ich klicke drauf und es werden y Vokabeln abgefragt.

Eine super Idee, leider kann ich die nicht sofort umsetzen, weil ich die entsprechenden Klassen von PyQt4 noch nicht kenne. Ich werde mir das aber auf jedenfall mal zu Gemüte führen und dann kommts irgendwann ins Programm.

Ist auch so was wie das Phasenprinzip geplant, also wie man es von dem Karteikasten kennt. Beantwortet man eine Vokabel richtig, kommt sie in das nächste Kästchen und wird X tage nicht mehr abgefragt, noch eins weiter wird es noch länger nicht mehr abgefragt usw. wenn man was falsch macht, kommt es wieder nach ganz vorne...

Hm, hatte erst auch daran gedacht, mich dann aber erinnert, dass ich das nicht so gut finde. Eher einfach, dass man nach jeder Abfrage die wiederholt, die falsch waren. Wenn es aber stichhaltige Argumente für dieses Phasenprinzip gibt, werde ich mir es aber vielleicht noch überlegen 😀

Keba Team-Icon

Ehemalige
Avatar von Keba

Anmeldungsdatum:
24. Juli 2007

Beiträge: 3802

Mein Englischlehrer hat gesagt, dass Phasenprinzip ist gut. Und Lehrer haben immer recht! 🙄

Ernsthaft: Es bringt mir nichts wenn to go - gehen abgefragt wird, sowas kann ich dann doch noch, dass kann von mir aus alle 3 Monate drankommen. Drankommen muss es, immerhin weiß das Programm ja nicht ob es so eine einfache Vokabel ist oder ob es eine ist, die ich 3 Mal in Folge richtig hatte.

Was wären denn die Nachteile eines solchen Prinzips? Mir fielen da keine ein. Perfekt aber wäre es natürlich, wenn du den Nutzer entscheiden lässt.

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Keba schrieb:

Ernsthaft: Es bringt mir nichts wenn to go - gehen abgefragt wird, sowas kann ich dann doch noch, dass kann von mir aus alle 3 Monate drankommen. Drankommen muss es, immerhin weiß das Programm ja nicht ob es so eine einfache Vokabel ist oder ob es eine ist, die ich 3 Mal in Folge richtig hatte.

Naja, wenn die Funktion drin ist, dass man nach einer Abfrage die falschen wiederholen kann, wiederholst du ja nicht z.b. "(to) go". Das erst dann wieder wenn du das Fenster schliesst und ganz neu beginnst. Und ansonsten kann man sie ja auch löschen, wenn man sie nicht mehr braucht 😉

Was wären denn die Nachteile eines solchen Prinzips? Mir fielen da keine ein.

Mir fällt da gerade auch nur einer ein: Wenn man jetzt z.B. zufällig eine Vokabel weiß, die man sonst nicht weiß, wird sie erstmal beiseite gelegt. Da man sie aber nicht wirklich "wie aus der Pistole geschossen" weiß, ist dies nicht so gut, weil sie ja dann erstmal nicht mehr wiederholt wird.

Perfekt aber wäre es natürlich, wenn du den Nutzer entscheiden lässt.

Da hast du Recht, deshalb werde ich es wahrscheinlich als wählbare Funktion einbauen:) Allerdings kann ich mir gerade noch nicht ganz ausmalen kann, wie ich diese Funktion umsetze ☹

Vielleicht hat da jemand mit mehr Pythonerfahrung konkrete Ideen?

Gruss
N3X0NIC

Keba Team-Icon

Ehemalige
Avatar von Keba

Anmeldungsdatum:
24. Juli 2007

Beiträge: 3802

Mir fällt da gerade auch nur einer ein: Wenn man jetzt z.B. zufällig eine Vokabel weiß, die man sonst nicht weiß, wird sie erstmal beiseite gelegt. Da man sie aber nicht wirklich "wie aus der Pistole geschossen" weiß, ist dies nicht so gut, weil sie ja dann erstmal nicht mehr wiederholt wird.

Und dann wird sie in sagen wir 5 Tagen wiederholt, wenn man eine Vokabel falsch hat, wird sie halt in 3 Tagen wiedeholt. Erst wenn man eine vokabel mehrmals richtig hat, steigen die Abstände. So macht das imho viel viel mehr Sinn als Löschen von bekannten Vokabeln. Klar, to go kenn ich, aber sagen wir, ich hab gerade frisch trafic jam (Stau) gelernt und weiß das die ersten paar Male, einige Zeit später weiß ich es aber nicht mehr. Dann wird das wieder öfter wiederholt und es prägt sich ein. also ich mag das Prinzip...

Zur Umsetzung: Vorab: Ich bin am Pyhton lernen, ich kann nicht viel. Ich würde einfach jeder Vokabel eine Variabel phase oder so zuweisen. phase = phase + 1 und so ist ja kein Problem. Dann wird eine Art Speicher erstellt. Wenn eine Vokabel mit der Phase x dareinkommt, hat sie y Tage in dem Speicher zu bleiben. y wird dann pro Tag um 1 kleiner. Wenn y == 0, dann wird die Vokabel abgefragt und sortiert sich neu ein.

Ist irgendwie schlecht ausgedrückt, ich versuchs mal zu malen:

            ________________________________________
  [er]     | [ihr|1]            [sie|3]
[Du] [wir] |           [Ich|2]               usw...
  [sie]    |______[alle|1]__________________________

Ein Tag später sieht es dann so aus

            ________________________________________
  [ihr]     |           [sie|2] [er|3]
     [alle] |  [Ich|1]             [Du|3]  usw...
            |_______________________________________

Hoffe du verstehst was ich meine. Links ist eben der Pool, aus dem dann zufällig Vokabeln gegriffen werden, wenn eine Vokabel länger wartet, wird sie ehr genommmen...

dauerbaustelle

Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

Mein Vorschlag: Jede Vokabel bekommt einen Punktestand zugewiesen. Neue bekommen die Null.

Beim Abfragen der Vokabeln wird so vorgegangen, dass zuerst die abgefragt werden, die niedrige Punktestände haben.

Pro richtige Antwort gibts einen Punkt dazu, pro falsche einen abgezogen. Bei drei mal falsch hintereinander gibts nen Punktereset.

Ich schreib gleich mal bissl Code dazu 😉

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Dauerbaustelle schrieb:

Mein Vorschlag: Jede Vokabel bekommt einen Punktestand zugewiesen. Neue bekommen die Null.

Beim Abfragen der Vokabeln wird so vorgegangen, dass zuerst die abgefragt werden, die niedrige Punktestände haben.

Pro richtige Antwort gibts einen Punkt dazu, pro falsche einen abgezogen. Bei drei mal falsch hintereinander gibts nen Punktereset.

Ich schreib gleich mal bissl Code dazu 😉

Das ist doch super, ich bin nämlich gerade daran gescheitert das Phasenprinzip in meinen Code einzubauen 😬 auch wenn es eine gewisse Ähnlichkeit mit deinem Vorschlag hat.

dauerbaustelle

Avatar von dauerbaustelle

Anmeldungsdatum:
2. Juli 2007

Beiträge: 1936

http://paste.pocoo.org/show/88331/

So stelle ich mir das vor.

nexonic

(Themenstarter)

Anmeldungsdatum:
23. Januar 2008

Beiträge: 952

Dauerbaustelle schrieb:

http://paste.pocoo.org/show/88331/

So stelle ich mir das vor.

Ok, aber welche Vokabeln sollen dann zuerst genommen werden? Die mit hohem failure-Stand oder die mit niedrigem rank Stand? Und wäre es nicht sogar besser, eine Skala zu haben, bei falsch =0 bei richtig +=1. Und dann werden erstmal alle genommen, die auf 0 sind. Wenn keine mehr auf 0 da sind, werden alle auf 1 genommen, wenn alle auf 3 sind, werden wieder alle auf 0 gesetzt. Gut, das ähnelt jetzt noch mehr dem Phasenprinzip, allerdings ohne die Zeit.

Was haltet ihr davon?

Antworten |