Wieso wird die For Schleife in Python nicht ausgeführt?
Hey, ich hätte da eine Frage. Ich bin gerade beim Anfang, für eine Vokabel Lern Anwendung in Python. Jedoch wird meine For Schleife aus irgendeinem Grund nicht ausgeführt. Dass erkenne ich daran, dass der Print-Befehl nicht ausgeführt wird und keine Fehler auftritt.
Hier ist meine Funktion in der auch die For-Schleife ist:
def Prüfungs_Start():
Prüfungs_Start_Fenster = Tk()
Prüfungs_Start_Fenster.title("Prüfung")
#Random 2 Vokabeln finden - Programmieren!
Datei = open("Vokabeln.txt", "a")
Datei = open("Vokabeln.txt", "r")
Datei_Anzahl_Zeilen = 0
for Zeile in Datei:
Datei_Anzahl_Zeilen += 1
Randomzeile = randint(0, Datei_Anzahl_Zeilen)
print(Randomzeile)
#Lern_Vokabel1 = Randomzeile>INHALT
Zähler = 0
print("Vor FOR Schleife")
#Hier ist meine Frage. Diese For-Schleife wird nicht ausgeführt:
for Zeilen_Inhalt in Datei:
print("In FOR Schleife")
if Zähler == Randomzeile:
print(Zeilen_Inhalt)
Zähler += 1
print("Nach FOR Schleife")
Danke im Voraus für eure Antworten! :D
2 Antworten
Du machst Dir das Leben unnötig schwer.
with open('Vokabeln.txt','r') as f:
vokabeln=[l.strip() for l in f.readlines()]
random.shuffle(vokabeln)
Jetzt kannst Du von vorne Zeilen entnehmen.
Zumindest bei einer Länge < 2000 ist das ein passabler Ansatz, sonst nimmst Du einfach random.sample() um Dir einen Stapel zufälliger Zeilen zu besorgen.
Wenn ich mal davon absehe, daß DU Deien Datei zweifach öffnest, dann wird nach dem steht nach dem ersten vollständigen lesen der Dateizeiger am Ende der Datei, den müßtest Du schon wieder zurückbiegen, wenn Du sie nochmal lesen möchtest.
Es gibt den Modus 'a+', also anhängen und lesen, der bei fehlender Datei auch selbige erzeugt. Ich halte das aber auch für einen schlechten Ansatz, zumal die Doku von Python nicht 100% deutlich bezüglich der Semantik ist.
Wie dem auch sei, Du öffnest die Datei um zu Lesen, wenn sie noch nicht existiert, dann ergibt die Ausführung des restlichen gezeigten Codes doch keinen Sinn.
Besser wärea es in dem Fall doch die Exception zu fangen und von mir aus dann die Datei zu erzeugen, wenn Du es nicht dort machen willst, wo Du sowieso in die Datei schreibst.
Okay, danke. Ich werde mal gucken, was ich machen kann. Das Problem ist halt, dass wenn bei dem Start Bildschirm zuvor die Taste mit dieser Funktion gedrückt wird, diese Datei noch nicht exestiert.
Es sieht so aus, als ob die For-Schleife in der Funktion Prüfungs_Start() nicht ausgeführt wird, weil der Dateizeiger am Ende der Datei ist, nachdem die erste For-Schleife beendet wurde. Die For-Schleife wird daher nicht ausgeführt, weil es keine weiteren Zeilen in der Datei gibt, über die iteriert werden kann.
Um das Problem zu beheben, können Sie den Dateizeiger am Anfang der Datei setzen, indem Sie die .seek()-Methode verwenden. Hier ist ein Beispiel für eine korrigierte Version der Funktion
Prüfungs_Start():
def Prüfungs_Start():
# ...
Datei = open("Vokabeln.txt", "r")
Datei_Anzahl_Zeilen = 0
for Zeile in Datei:
Datei_Anzahl_Zeilen += 1
Randomzeile = randint(0, Datei_Anzahl_Zeilen)
print(Randomzeile)
# Set the file pointer at the beginning of the file
Datei.seek(0)
Zähler = 0
print("Vor FOR Schleife")
# Now the For-Schleife should be executed properly
for Zeilen_Inhalt in Datei:
print("In FOR Schleife")
if Zähler == Randomzeile:
print(Zeilen_Inhalt)
Zähler += 1
print("Nach FOR Schleife")
# ...
Hinweis: In Python werden Variablennamen und Funktionsnamen, die in der deutschen Sprache geschrieben sind, in der Regel in Kleinbuchstaben geschrieben und durch Unterstriche getrennt, z.B. prüfungs_start() statt Prüfungs_Start(). Es wird empfohlen, diese Konventionen beim Schreiben von Python-Code zu verwenden, um die Lesbarkeit und Verständlichkeit des Codes zu verbessern.
Ich hoffe das hilft!
Danke dir für die Antwort. Find ich sehr gut erklärt und hoffentlich funktioniert es dann. :D
Also erstens, danke auch dir für deine Erklärung und Hilfe. Und Zweitens, öffne ich meine Datei zweifach, denn bei der "r" Öffnung wird, wenn die Datei nicht da ist, die Datei nicht neu erstellt. Bei "a" jedoch schon. Und wenn es eine andere Möglichkeit gibt, die Datei zu erstellen, ohne dass es so seltsam aussieht, dann würde ich mich freuen, wenn du mir diese Möglichkeit zeigst...