Seite 1 von 1

Vokabel-Programm

Verfasst: Mittwoch 6. April 2005, 13:27
von marco_
Wie in diesem Thread schon angekündigt, versuche ich als erstes Programm einen Vokabel-Trainer zu schreiben.
Mir war Yaml am anfang zu schwer, also hab ich mich für normale Textdateien entschieden, das kann ich später noch ändern.
Die wordlist.txt ist in diesem Schema geschrieben:
Text;Text;Text#Übersetzung;Übersetzung;Übersetzung

Zurzeit wird nur ein deutsches Wort und mehrere Übersetzungen unterstützt, das kann man später leicht ändern. Jetzt ist mir aber erstmal wichtiger das es überhaupt Funktioniert.

Ich wollte zu dem normalen Vokabel abfragen noch ein kleines Ranking erstellen um die Wörter die man nicht so gut kann öfter abzufragen als die restlichen.
Also wollte ich das ganze in einer Textdatei abspeichern...Alles schön und gut, aber dann umsetzen ist etwas schwieriger...
Ich wollte bei jedem Falschen Wort eine Reihe von Aufgaben durchgehen, die die Übersetzung des Wortes in eine Liste einträgt und diese Liste dann abspeichert. Erst wenn das geschafft ist wollte ich mit dem Zusammenzählen der Punkte beginnen...
Zu Übungszwecken habe ich das ganze gleich in eine Klasse gepackt, aber genau dort liegt der Fehler.

Hier der Quellcode, wie er bis jetzt ausschaut:

Code: Alles auswählen

#!/usr/bin/python 
# -*- coding: UTF-8 -*-

#read line for line from a .txt file and ask for a words translation.
import random
class ranking(object):
     def __init__(self):
          object.__init__(self)
          self.data = []
     def add_false(begr):
          data.append(points,begr) #Hinzufügen der Falschen Wörter
     def save_ranking():#Falsche Wörter speichern
          f = open("false.txt","aU")
          f.write(self.data)
          f.close()
     
          
def ask_voc():
     '''
     Read the file in a list, search one entry, ask it.
     '''
     rank = ranking()
     f = open("wordlist.txt", "r") #open the wordlist
     inh = f.readlines() #write the lines from wordlist down
     f.close #close wordlist
     now = random.choice(inh)#Search a random line from the wordlist
     words, translations = now.split('#')#Split the line in words and their translations
     translations = translations.rstrip("\n") #Remove the n on the end of the line
     #For debugging: add following line, print words;print translations
     word = words.split(';')#Split the words in singles.
     translation = translations.split(';')#Split the translations in singles.
     print "übersetzung für:"; print word#ask the translation from word
     answ = raw_input('Antwort:')#get the answere
     print "#" * 20#Print a little line
     if answ in translation:
          print "right"
          print "+" * 20#Print a little line
     else:
          print "false"
          print "answer:" + answ#Print the answere
          print "translation:" ; print translation#Print the needed translation
          rank.add_false("1",translation)
          print "-" * 20#Print a little line
          safe_ranking()
ask_voc()

Ich bekomme aber immer diese Fehlermeldung:
TypeError: add_false() takes exactly 1 argument (3 given)

Welche Argumente geb ich ihm denn?? Also so wie ich das sehe gebe ich im Zwei (1 und Übersetzung). Und er verlang doch auch zwei??
[/python][/url]

Verfasst: Mittwoch 6. April 2005, 13:41
von Leonidas
Ich hab den Thread mal nach Allgemeine Fragen verschoben, da dies eher eine Frage um das Klassensystem Pythons ist.

Jede (praktisch jede) Funktion in einer Klasse hat als erstes Argument self. Da musst du

Code: Alles auswählen

     def add_false(self, points, begr):
          data.append(points,begr) 
Dein altes add_false() verlangt 1 (begr), aber er bekommt drei: self, "1" und translation.

Verfasst: Mittwoch 6. April 2005, 14:17
von marco_
danke, funktioniert jetzt.

Verfasst: Mittwoch 6. April 2005, 18:06
von Gast
hi

mich interessiert hier was anderes, beschäftige mich ein wenig mit new_style klassen:

kann mir jmd. sagen warum der konstruktor von object aufgerufen werden muss?

Code: Alles auswählen

class ranking(object):
     def __init__(self):
          object.__init__(self) 
die anweisung hat mich überrascht, aber wie gesagt new_style ist mir sowieso noch ein buch mit sieben siegeln :wink:

mfg

rolgal

Verfasst: Mittwoch 6. April 2005, 21:51
von BlackJack
Man "muss" von jeder Klasse, von der man erbt den Konstruktor aufrufen. Das hat nichts mit "new-style" oder "classic" zu tun.

Verfasst: Donnerstag 7. April 2005, 00:15
von Gast
hi blackjack,

Man "muss" von jeder Klasse, von der man erbt den Konstruktor aufrufen. Das hat nichts mit "new-style" oder "classic" zu tun.
nach kurzer verwirrung ganz einfach:
nein muss man nicht, ich kann ihn auch überschreiben, dennoch kann ich klassenattribute und andere methoden erben.
die frage war eigentlich warum in dem konkreten beispiel der konstruktor von object aufgerufen wird bzw. vielleicht aufgerufen werden muss.




mfg

rolgal

Verfasst: Donnerstag 7. April 2005, 14:36
von Leonidas
Tu ich nicht, hatte deswegen aber noch nie Probleme.
Zum Aufrufen von object.__init__() steht auch im Python 2.2 What's New nichts drin.

Verfasst: Samstag 9. April 2005, 15:21
von Flano
Zum Thema: Falsche Wörter häufiger üben.
Habe vor einiger Zeit für meine Tochter auch einen Vokabeltrainer geschrieben(Erstlingswerk!). Gespeichert werden die Vokabeln in 5 Textdateien. In Textdatei 1 werden die neuen Vokabeln eingegeben,dann vom Programm aufgerufen. Wird die Vokabel richtig beantwortet wandert sie nach Textdatei 2. Bei falsch, bleibt sie in Textdatei 1.
Wird Texdatei 2 vom Programm aufgerufen, wandern die richtig beantworteten Vokabeln nach Textdatei 3 usw.. Falsche Antworten wandern immer zurück nach Textdatei 1, die jeden Tag beanwortet werden sollte. Erstellt habe ich das ganze mit 2 Listen(Arrays). Eine nimmt die deutschen Wörter aus den Textdateien auf, die andere die englischen. Vielleicht ist die Art für dich brauchbar. :)

Verfasst: Samstag 9. April 2005, 22:30
von Vortec
Flano: Prinzipiell eine gute Idee, nur hätte ich sie programmiertechnisch einen Ticken anders mit einem Dictionary gelöst ;)

Verfasst: Sonntag 10. April 2005, 12:51
von marco_
Flano,
Danke, gefaellt mir wesentlich besser als mein dummes Ranking-System. Ich werd dein Prinzip uebernehmen wenn es dir nichts ausmacht.

Re: Vokabel-Programm

Verfasst: Samstag 4. Juni 2016, 19:58
von TutorialMichel
Grrrrr... :evil: :evil: :evil:
Ideen Dieb :D
Mein VT(VokabelTrainer) hier: viewtopic.php?f=21&t=38610&p=295895#p295895