Vokabel-Programm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

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]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

danke, funktioniert jetzt.
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
BlackJack

Man "muss" von jeder Klasse, von der man erbt den Konstruktor aufrufen. Das hat nichts mit "new-style" oder "classic" zu tun.
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
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Flano
User
Beiträge: 43
Registriert: Sonntag 5. September 2004, 14:13

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. :)
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Flano: Prinzipiell eine gute Idee, nur hätte ich sie programmiertechnisch einen Ticken anders mit einem Dictionary gelöst ;)
| [url=http://www.sourceforge.net/projects/propolice/]propolice[/url] | [url=http://del.icio.us/vortec/]bookmarks[/url] | [url=http://www.BlowIRC.net/]irc[/url] | [url=irc://irc.BlowIRC.net/python]#python[/url] |
marco_
User
Beiträge: 78
Registriert: Freitag 25. März 2005, 12:24

Flano,
Danke, gefaellt mir wesentlich besser als mein dummes Ranking-System. Ich werd dein Prinzip uebernehmen wenn es dir nichts ausmacht.
Benutzeravatar
TutorialMichel
User
Beiträge: 10
Registriert: Samstag 4. Juni 2016, 15:08

Grrrrr... :evil: :evil: :evil:
Ideen Dieb :D
Mein VT(VokabelTrainer) hier: viewtopic.php?f=21&t=38610&p=295895#p295895
₪฿௹₥₪ ฿௹₥₪ ฿௹₥₪฿௹₥₪฿ ௹₥₪฿ ௹₥₪฿௹₥₪฿ ௹₥ ₪฿௹₥₪฿௹₥ ₪฿௹₥ ₪฿௹₥ ₪฿௹₥₪฿௹ ₥₪฿௹₥₪ ฿௹₥₪฿௹ ₥₪฿௹₥₪ ฿௹₥₪฿௹₥₪฿௹₥₪ ฿௹₥₪฿௹ ₥₪฿௹₥₪฿ ௹₥₪฿௹ ₥₪ ฿௹₥₪ ฿௹₥₪฿௹₥₪ ฿ ௹₥₪฿ ௹₥₪฿௹₥₪฿௹₥ ₪฿௹₥₪฿௹₥ ₪฿௹₥₪฿௹₥ ₪฿௹₥₪฿௹ ₥₪฿௹₥₪ ฿௹₥₪฿௹ ₥₪฿ ௹₥₪ ฿௹₥₪฿௹₥₪฿௹₥₪฿௹₥ ₪฿௹ ₥₪฿௹₥₪฿ ௹₥
Antworten