Seite 1 von 2

Verfasst: Mittwoch 27. Juni 2007, 17:41
von BlackJack
Wobei immer noch das Problem bleibt, das man `list` nicht als Namen verwenden sollte. Der Name sollte nämlich weder an `None` noch an irgendeine Liste gebunden sein, sondern an die eingebaute Funktion bzw. den Typ `list`:

Code: Alles auswählen

In [32]: list
Out[32]: <type 'list'>

In [33]: list()
Out[33]: []

Verfasst: Donnerstag 28. Juni 2007, 16:47
von klaus
ok, dann benenne ich es anders. Wäre "liste" ok oder soll ich es komplett anders nennen, damit man es überhaupt nicht verwechseln kann?

Verfasst: Freitag 6. Juli 2007, 17:07
von Leonidas
klaus hat geschrieben:Wäre "liste" ok oder soll ich es komplett anders nennen, damit man es überhaupt nicht verwechseln kann?
Ich würde es komplett anders nennen, da etwas wie ``liste = list()`` oder ``integer = 0`` ziemlich nichtssagend ist und es per ``type(objekt)`` sowieso herausgefunden werden kann. Variablen sollte man nach Bedeutung und nicht nach dem Datentyp benennen.

Verfasst: Freitag 6. Juli 2007, 17:35
von klaus
ok, ich habs in voklist umbenannt, weil ne es ja ne Vokabelliste is.
Des Programm funzt jetzt übrigens, also der schwierige Teil der Arbeit ist weg, jetzt kommt der zeitaufwändige, das Vokabelabtippen :( .
120 lektionen mit durchschnittlich ca. 15 Voks macht ungefähr 1800 Vokabeln. Eigentlich hatte ich in den Sommerferien was anderes vor.
Naja, 3 Lektionen hab ich schon, iss doch ein ganz guter Anfang.

Verfasst: Samstag 7. Juli 2007, 18:58
von klaus
Ich hab ein Problem: wieso bringt es hier ne Fehlermeldung wenn ich Umlaute eingebe? Des ist übrigens ein Programm, bei dem ich nur noch die Vokabeln eintippen und die Syntax nicht mehr beachten muss. Des is sehr praktisch für meinen Vokabeltrainer und ich hoffe, das ihr mir helfen könnt. Übrigens habe ich Python nach dem Buch "Python4Kids" installiert und es sollte deshalb eig. keine Probleme mir Umlauten und "ß" haben.

Code: Alles auswählen

def mklatlist():
    liste = []
    liste.append(raw_input())
    liste.append(raw_input())
    liste.append(0)
    return liste

def mklat2list(length):
    length = int(length)
    liste = []
    for n in range(length):
        print n + 1
        liste.append(mklatlist())
    return liste

def mklatdic(keys):
    dic = {}
    keys = keys.split("-")
    von = int(keys[0])
    bis = int(keys[1])
    for key in range(von, bis + 1):
        print "Lektion",key
        length = raw_input("Länge: ")
        value = mklat2list(length)
        dic[key] = value
    return dic
[/code]

Verfasst: Samstag 7. Juli 2007, 21:04
von BlackJack
Was für einen Fehler bekommst Du denn und wo!?

Verfasst: Sonntag 8. Juli 2007, 10:01
von Y0Gi
`vokabeln` ist auch ein guter Name für jene Liste :)

Verfasst: Sonntag 8. Juli 2007, 13:01
von klaus
Ok, dnn benenne ich es in vokabeln um.
Was fürn Fehler des ist weiß ich nicht, ich schau mal kurz nach und edite des dann. War aber keiner der schonmal bei irgendeinem Programm von mir aufgetreten ist.

edit: ich habs grad nochmal ausprobiert, jetzt hats funktioniert.
Der Fehler ist bis jetzt immer dann aufgetreten, wenn ich "er schmückt" (ornat) eingegeben habe. Ich habs mit "er schmuckt" (also ohne ü) probiert und da gings. Kann des daran liegen, das ich die Funktion bis jetzt immer über "run script" definiert habe, letztes mal (wo der Fehler auftrat) aber die from ... import * Anweisung benutzt habe?

Verfasst: Samstag 8. September 2007, 17:04
von klaus
Hi,

Ich bin jetzt fertig mit Vokabeln tippen und hab jetzt noch zwei fragen:
1. Wie kann ich des machen, dass ich eine Benutzeroberfläche erstell, die dann die lateinischen Vokabeln anzeigt, ein Feld hat wo man die deutsche Bedeutung eingeben kann und die dann die korrekte Bedeutung anzeigt (bzw. "Richtig" wenn die Vokabel gewusst wurde).

2. Kann ich das ganze in eine .exe-Datei umwandeln, so dass man nicht immer erst die Datei mit "Edit with IDLE" öffnen, dann auf "Run Script" klicken und dann die Funktion latein() aufrufen muss.

Wäre froh wenn ihr mir helfen könntet.

Verfasst: Samstag 8. September 2007, 17:51
von Leonidas
klaus hat geschrieben:1. Wie kann ich des machen, dass ich eine Benutzeroberfläche erstell, die dann die lateinischen Vokabeln anzeigt, ein Feld hat wo man die deutsche Bedeutung eingeben kann und die dann die korrekte Bedeutung anzeigt (bzw. "Richtig" wenn die Vokabel gewusst wurde).
Mit einem GUI-Toolkit?! Hast ja Tkinter, wxPython, PyGTK und pyQt zur Auswahl.
klaus hat geschrieben:2. Kann ich das ganze in eine .exe-Datei umwandeln, so dass man nicht immer erst die Datei mit "Edit with IDLE" öffnen, dann auf "Run Script" klicken und dann die Funktion latein() aufrufen muss.
Ja, aber wozu? Du kannst auch dem Skript sagen, dass es bei einem Doppelklick ``latein()`` (oder was auch immer) aufrufen soll.

Verfasst: Sonntag 9. September 2007, 12:03
von klaus
OK, werd ich wohl so machen. Mit Toolkits hab ich mich zwar noch nicht auseinandergesetz, aber ich werds schon hinkriegen.
Den Aufruf der Funktion latein() muss ich dann einfach hinter der Definition in das Script reinschreiben, oder?

Verfasst: Sonntag 9. September 2007, 12:12
von Leonidas
klaus hat geschrieben:Den Aufruf der Funktion latein() muss ich dann einfach hinter der Definition in das Script reinschreiben, oder?
Am besten so:

Code: Alles auswählen

if __name__ == '__main__':
    latein()

Verfasst: Sonntag 9. September 2007, 12:20
von klaus
stimmt, hab ich vergessen, danke

Verfasst: Montag 10. September 2007, 15:49
von klaus
Ich hab jetzt mal so nen groben Entwurf gemacht.

Code: Alles auswählen

from Tkinter import *

question = "Hallo!"
solve = "Richtig!"

class Iface:
    def __init__(self, master):        
        frame=Frame(master)
        frame.pack()

        self.question=Label(frame, text=question)
        self.question.pack()

        self.answer=Entry(frame)
        self.answer.pack()

        self.solve=Button(frame, text=solve)
        self.solve.pack()

        self.exit=Button(frame, text="Exit", fg="red", command=frame.quit)
        self.exit.pack()

root=Tk()
iface=Iface(root)
root.mainloop()
Ich hab aber noch ein paar Fragen:

1. Wie soll ich das in mein bisheriges Skript einbinden?

2. Wie krieg ich es hin, das der Inhalt von Entry einer Variablen zugewiesen wird, wenn ich Enter drücke?

3. Wie schaff ich es, dass die nächste Frage erst angezeigt wird, wenn man auf den Button klickt?

4. Wie lege ich die Größe von dem Frame fest

Verfasst: Dienstag 11. September 2007, 14:40
von Leonidas
klaus hat geschrieben:Ich hab aber noch ein paar Fragen:

1. Wie soll ich das in mein bisheriges Skript einbinden?

2. Wie krieg ich es hin, das der Inhalt von Entry einer Variablen zugewiesen wird, wenn ich Enter drücke?

3. Wie schaff ich es, dass die nächste Frage erst angezeigt wird, wenn man auf den Button klickt?

4. Wie lege ich die Größe von dem Frame fest
Ich glaube du hast hier das falsche Forum erwischt und viele Fragen erledigen sich schon, wenn man die Tkinter-Dokumentation lesen würde.

Verfasst: Freitag 14. September 2007, 16:09
von klaus
Hi,

Ich wollte gerade ein Programm erstellen, das in einer endlosschleife drei Fragen stellt und dann versuchen, die GUI erstmal dort zu testen. Dabei ist allerdings ein Fehler aufgetreten, den ich nicht verstehe. Hier mal der Code:

Code: Alles auswählen

voklist = [["a ", "b", 0], ["c ", "d", 0], ["e", "f", 0]

def frage(data):
    question, solve, stat = data
    solution = solve.split(", ")
    answer = raw_input(question)
    if answer in solution:
        print "Richtig!"
        data[2] = data[2] + 2
        return 1
    else:
        print "Falsch! Richtig ist: ", solve
        data[2] = data[2] + 1
        return 0

def quiz():
    while 1:
        for element in voklist:
            correct = frage(element)
            counter = counter + 1
            if correct == 1:
                points = points + 1
            print

if __name__ == __main__:
    quiz()
Und hier der Fehler:

Code: Alles auswählen

  File "C:\Py4Kids\mylib\tkquiz.py", line 3
    def frage(data):
      ^
SyntaxError: invalid syntax
wäre froh, wenn ihr mir sagen könntet, wieso hier ein Syntax-Fehler auftritt.

Verfasst: Freitag 14. September 2007, 17:24
von gerold
Hallo Klaus!

Code: Alles auswählen

voklist = [["a ", "b", 0], ["c ", "d", 0], ["e", "f", 0]]
Da war wohl eine Klammer zu wenig.

mfg
Gerold
:-)

Verfasst: Freitag 14. September 2007, 18:05
von klaus
Danke Gerold: Hab's ausgebessert.
Es gab zwar immer noch ein paar Fehler, aber die konnte ich selber beheben. Ich hab bloß nicht verstanden was die IDLE wollte, weil sie "def" markiert hat (und nicht den Ort wo die Klammer gefehlt hat).

edit: Thread unter "Tkinter / GUI in Programm integrieren" weitergeführt. ==> http://www.python-forum.de/topic-12058.html

wenn der Vokabeltrainer mal komplett fertig ist, wird er auf der Seite www.juggleclips.de.vu im Menü unter Hobbies / Python zu finden sein.