Wieso wird die For Schleife in Python nicht ausgeführt?


07.12.2022, 21:44

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.


Alex950130 
Beitragsersteller
 09.12.2022, 19:27

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...

KarlRanseierIII  09.12.2022, 19:39
@Alex950130

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.

Alex950130 
Beitragsersteller
 10.12.2022, 13:06
@KarlRanseierIII

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!


Alex950130 
Beitragsersteller
 07.12.2022, 21:50

Danke dir für die Antwort. Find ich sehr gut erklärt und hoffentlich funktioniert es dann. :D