Ich programmiere erst seit einem Monat und dies ist mein erstes Programm. Für Tipps bin ich immer offen. Wie ich aus einer Funktion an eine andere Funktion eine Variable in Form eines Arguments übergebe weiß ich nicht. Mein Wissen beschränkt sich in dem Gebiet darauf, dass ich in der Ursprungs-Funktion die neue Funktion mit Parameter aufrufen müsste. Wahrscheinlich nutze ich die Funktionen im Moment noch nicht so wie man es sollte oder könnte.
@Sirius3
Das pass war ein überbleibsel als das Feature noch nicht implementiert wurde. Ja, die int() Aufrufe waren ein Stochern im Nebel. Das Programm funktioniert ohne die if-Bedingung wie es soll. Mit if-Bedingung funktioniert es genau einen Durchlauf, nach dem Zweiten dann nicht mehr. Wenn ich den type von max(anzahl) und anzahl_aufrufe im "Leerlauf" (also ohne if-Bedingung) abfrage, dann steht immer 'int' da. Das verwundert mich.
Ob ich eine Schleife aufrufen will? Ja, ich möchte, dass die Funktion erneut ausgeführt wird. Das ist in gewisser Weise eine Schleife. Also neues Wort per Zufall suchen und untersuchen ob es schon einmal aufgerufen wurde. Das ist ja auch das, was die Funktion im Endeffekt tut. Sie sucht ein Wort und schaut ob es schonmal aufgerufen worden ist.
@BlackJack
Die Liste enthält anfangs nur "0"en. Wird ein Wort aufgerufen, dann bekommt es in seiner Zeile "anzahl_aufrufe" + 1 . Nun stehen in der Liste ein Haufen "0"en und eine 1. Ich wusste nicht wie ich es anders hätte umsetzen sollen. In der if-Schleife wird jetzt geschaut ob der aktuelle Datensatz bei "anzahl_aufrufe" < 1 ist, dann wird der Wert + 1 gezählt und ein weiteres Wort wurde damit einmal abgerufen. Usw.
Für die Harten unter euch, hier der Code.
Code: Alles auswählen
import csv
import random as ran
import tkinter as tk
deutsch_auf_englisch = "deutsch"
englisch_auf_deutsch = "englisch"
"""Einlesen der Daten aus der CSV-Liste und umwandeln in eine Liste pro Spalte """
def einlesen():
global vocabularies
global FIELDNAMES
FIELDNAMES = ["englisch", "deutsch", "sprachniveau", "anzahl_aufrufe", "anzahl_ungewusst", "anzahl_ungewusst_aufrufe", "dummy"] # Einlesen
with open("englisch.csv") as csvfile: # der
reader = csv.DictReader(csvfile, delimiter=';', fieldnames=FIELDNAMES) # benötigten
vocabularies = list(reader)
return vocabularies
def schreiben():
with open("englisch.csv", "w") as csvfile:
writer = csv.DictWriter(csvfile, delimiter=";", fieldnames=FIELDNAMES)
writer.writerows(vocabularies)
return vocabularies
""" Festlegen der GUI """
def raise_frame(frame):
frame.tkraise()
root = tk.Tk()
Menu_Frame = tk.Frame(root)
Seite2_Frame = tk.Frame(root)
Loesung_Frame = tk.Frame(root)
falsch_Frame = tk.Frame(root)
unbekannt_Frame = tk.Frame(root)
for frame in (Menu_Frame, Seite2_Frame, Loesung_Frame, falsch_Frame, unbekannt_Frame):
frame.grid(row=0, column=0, sticky="news")
"""Erstellen einer Liste bei der die Anzahl der Aufrufe überprüft werden kann"""
def list_count():
global anzahl
anzahl = []
for reihe_anzahl in vocabularies:
anzahl_liste = anzahl.append(reihe_anzahl["anzahl_aufrufe"])
del anzahl[0]
return anzahl
""" GUI """
def Startseite(): # Das ist das Menü des Programms, die allererste Seite
raise_frame(Menu_Frame)
tk.Button(Menu_Frame, width=30, text="Englisch > Deutsch", command=lambda index=englisch_auf_deutsch: ausfuehrung_der_abfrage(index)).grid(row=0, column=0)
tk.Button(Menu_Frame, width=30, text="Deutsch > Englisch", command=lambda index=deutsch_auf_englisch: ausfuehrung_der_abfrage(index)).grid(row=1, column=0)
tk.Button(Menu_Frame, width=30, text="Unsichere Wörter", command=unbekannte_woerter).grid(row=2, column=0)
tk.Button(Menu_Frame, width=30, text="Beenden", command=schreiben).grid(row=3, column=0)
def ausfuehrung_der_abfrage(richtung): # Das ist die Seite die erscheint, wenn man die Sprachauswahl wählt.
raise_frame(Seite2_Frame)
if richtung == deutsch_auf_englisch:
deutsch_englisch()
else:
englisch_deutsch()
tk.Label(Seite2_Frame, width=30, text=zufallswort["deutsch"]).grid(row=1, column=0)
tk.Button(Seite2_Frame, width=30, text="Lösung", command=lambda index=richtung: Loesung(index)).grid(row=2, column=0)
tk.Button(Seite2_Frame, width=30, text="Zurück", command=Startseite).grid(row=3, column=0)
tk.Button(Seite2_Frame, width=30, text="Beenden", command=schreiben).grid(row=4, column=0)
def Loesung(richtung):
raise_frame(Loesung_Frame)
uebersetzung(richtung)
tk.Label(Loesung_Frame, width=30, text=ubersetzt).grid(row=1, column=0)
tk.Button(Loesung_Frame, width=30, text="Weiter", command=lambda index=richtung: ausfuehrung_der_abfrage(index)).grid(row=2, column=0)
tk.Button(Loesung_Frame, width=30, text="Nicht gewusst", command=unbekannte_woerter).grid(row=3, column=0)
tk.Button(Loesung_Frame, width=30, text="Beenden", command=schreiben).grid(row=4, column=0)
def unbekannte_woerter(): # Wörter die nicht bekannt sind, in eine extra Datei schreiben um diese gesondert anzeigen lassen zu können
zufallswort["anzahl_ungewusst_aufrufe"] = 1
with open("englisch.csv", "w") as csvfile:
writer = csv.DictWriter(csvfile, delimiter=";", fieldnames=FIELDNAMES)
writer.writerows(vocabularies)
return vocabularies
def uebersetzung(richtung):
global ubersetzt
if richtung == deutsch_auf_englisch:
ubersetzt = zufallswort["englisch"]
else:
ubersetzt = zufallswort["deutsch"]
def deutsch_englisch(): # Deutsche Wörter anzeigen und auf Englisch übersetzen
global zufallswort
global zufallszahl
global vocabularies
zufallszahl = ran.randint(1, len(vocabularies)) # wählt ein zufälliges englisches Wort aus
zufallswort = vocabularies[zufallszahl]
anzahl_aufrufe = zufallswort["anzahl_aufrufe"]
list_count()
anzahl_aufrufe = anzahl_aufrufe
if anzahl_aufrufe < max(anzahl):
neue_anzahl = int(anzahl_aufrufe) + 1
zufallswort["anzahl_aufrufe"] = neue_anzahl
elif anzahl_aufrufe == max(anzahl):
if anzahl_aufrufe == min(anzahl):
neue_anzahl = int(anzahl_aufrufe) + 1
zufallswort["anzahl_aufrufe"] = int(zufallswort["anzahl_aufrufe"]) + 1
else:
deutsch_englisch()
if __name__ == '__main__':
einlesen()
Startseite()
root.mainloop()
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:\Users\Stefan\Desktop\Sprachprogramm\englisch1.py", line 73, in <lambda>
tk.Button(Loesung_Frame, width=30, text="Weiter", command=lambda index=richtung: ausfuehrung_der_abfrage(index)).grid(row=2, column=0)
File "C:\Users\Stefan\Desktop\Sprachprogramm\englisch1.py", line 60, in ausfuehrung_der_abfrage
deutsch_englisch()
File "C:\Users\Stefan\Desktop\Sprachprogramm\englisch1.py", line 103, in deutsch_englisch
if anzahl_aufrufe < max(anzahl):
TypeError: unorderable types: int() > str()