Fehler Meldung

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
Henri1324365
User
Beiträge: 1
Registriert: Dienstag 4. Oktober 2022, 00:02

Hallo,
Ich bin mir nicht sicher ob die Frage hier rein passt aber ich habe mal versucht ein Vokabellerner zu programmieren, aber ürgentwie hat garnichts geklappt. Ich würde den Code hier reinstellen als Datei, da ich aber nicht weis wie das geht schick ich den einfach mal so als Text. Ob jemand weis wie ich den wieder hinbekomme. also hier der Text:

import random

wörterbuch_LK_1 = str({""})
wörterbuch_LK_1_1 = str({""})
wörterbuch_LK_1_2 = str({""})
wörterbuch_LK_1_3 = str({""})

wörterbuch_LK_2 = str({""})
wörterbuch_LK_2_wi = str({""})
wörterbuch_LK_2_1 = str({""})
wörterbuch_LK_2_2 = str({""})
wörterbuch_LK_2_3 = str({""})

wörterbuch_LK_3 = {""}
wörterbuch_LK_3_wi = {""}
wörterbuch_LK_3_1 = {""}
wörterbuch_LK_3_2 = {""}
wörterbuch_LK_3_3 = {""}

wörterbuch_LK_4 = {""}
wörterbuch_LK_4_wi = {""}
wörterbuch_LK_4_1 = {""}
wörterbuch_LK_4_3 = {""}

wörterbuch_LK_5 = {""}
wörterbuch_LK_5_wi = {""}
wörterbuch_LK_5_1 = {""}
wörterbuch_LK_5_2 = {""}
wörterbuch_LK_5_3 = {""}

wörterbuch_LK_6 = {""}
wörterbuch_LK_6_wi = {""}
wörterbuch_LK_6_1 = {""}
wörterbuch_LK_6_2 = {""}
wörterbuch_LK_6_3 = {""}

wörterbuch_LK_7 = str({""})
wörterbuch_LK_7_wi = str({""})
wörterbuch_LK_7_1 = str({""})
wörterbuch_LK_7_2 = str({""})
wörterbuch_LK_7_3 = str({""})

wörterbuch_LK_8 = str({""})
wörterbuch_LK_8_wi = str({""})
wörterbuch_LK_8_1 = str({""})
wörterbuch_LK_8_2 = str({"se, Akk." : "sich",})

g_wörterbuch_LK_1 = str({})
g_wörterbuch_LK_2 = str({})
g_wörterbuch_LK_3 = str({})
g_wörterbuch_LK_4 = str({})
g_wörterbuch_LK_5 = str({})
g_wörterbuch_LK_6 = str({})
g_wörterbuch_LK_7 = str({wörterbuch_LK_7_1,wörterbuch_LK_7_wi, wörterbuch_LK_7_2,wörterbuch_LK_7_3})
g_wörterbuch_LK_8 = str({wörterbuch_LK_8,wörterbuch_LK_8_1,wörterbuch_LK_8_wi,wörterbuch_LK_8_2})

g_wörterbuch = {g_wörterbuch_LK_1,g_wörterbuch_LK_2,g_wörterbuch_LK_3, g_wörterbuch_LK_4,g_wörterbuch_LK_5,g_wörterbuch_LK_6,g_wörterbuch_LK_7,g_wörterbuch_LK_8}



lektion = input ("gib ein zahl zwischen 1 und 8 ein die passende lektion wird dann ausgewählt: ")
t_lektion = input("gib nun den abschnitt der zuvor angegeben lektion an möglcih sind: g = gesammte lektion, wi = widerholungsvokabeln, 1 = 1er vokabel abschnitt, 2 = 2er vokabel abschnitt, 3 = 3er vokabel abschnitt : ")

liste = []
for key in lektion:
liste.append(key)


if lektion == 1:
if t_lektion == "g":
pass
elif t_lektion == 1:
pass
elif t_lektion == 2:
pass
elif t_lektion == 3:
pass
elif lektion == 2:
if t_lektion == "g":
pass
elif t_lektion == "wi":
pass
elif t_lektion == 1:
pass
elif t_lektion == 2:
pass
elif t_lektion == 3:
pass
elif lektion == 3:
if t_lektion == "g":
pass
elif t_lektion == "wi":
pass
elif t_lektion == 1:
pass
elif t_lektion == 2:
pass
elif t_lektion == 3:
pass
elif lektion == 4:
pass
elif lektion == 5:
pass
elif lektion == 6:
pass
elif lektion == 7:
pass
elif lektion == 8:
if t_lektion == str("wi"):
lernen = True
while lernen:
wort = random.choice(wörterbuch_LK_8_wi)
aktiv = True
while aktiv:
print ("Die übersetzung zu: " + wort + " ist gesucht")
eingabe = input("Eingabe: ")
übersetzung = wörterbuch_LK_8_wi[wort]
if eingabe.lower() == übersetzung:
print("Eingabe richtig: " + wörterbuch_LK_8_wi [wort])
aktiv = False
else:
print("Eingabe falsch, Nochmal? ")
aktiv = True

eingabe2 = input("Nochmal? Ja oder nein: ")
if eingabe2.lower() == "ja":
lernen = True
else:
lernen = False
elif t_lektion == 1:
lernen = True
while lernen:
wort = random.choice(wörterbuch_LK_8_1)
aktiv = True
while aktiv:
print ("Die übersetzung zu: " + wort + " ist gesucht")
eingabe = input("Eingabe: ")
übersetzung = wörterbuch_LK_8_1[wort]
if eingabe.lower() == übersetzung:
print("Eingabe richtig: " + wörterbuch_LK_8_1 [wort])
aktiv = False
else:
print("Eingabe falsch, Nochmal? ")
aktiv = True

eingabe2 = input("Nochmal? Ja oder nein: ")
if eingabe2.lower() == "ja":
lernen = True
else:
lernen = False
elif t_lektion == 2:
lernen = True
while lernen:
wort = random.choice(wörterbuch_LK_8_2)
aktiv = True
while aktiv:
print ("Die übersetzung zu: " + wort + " ist gesucht")
eingabe = input("Eingabe: ")
übersetzung = wörterbuch_LK_8_2[wort]
if eingabe.lower() == übersetzung:
print("Eingabe richtig: " + wörterbuch_LK_8_2 [wort])
aktiv = False
else:
print("Eingabe falsch, Nochmal? ")
aktiv = True

eingabe2 = input("Nochmal? Ja oder nein: ")
if eingabe2.lower() == "ja":
lernen = True
else:
lernen = False
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Henri1324365: Komplett löschen und neu anfangen ist der beste Weg. Da ist so viel falsch, das lohnt nicht irgendwas reparieren zu wollen.

Das Vorgehen ist auch falsch wenn man sich 200 Zeilen Quelltext nähert an denen so ziemlich alles Unsinn ist. Programme entwickelt man Stück für Stück und testet das bisher vorhandene, bevor man mehr dazu schreibt. Auf die Weise entsteht nicht so viel falscher, nicht funktionierender Code auf einen Haufen.

Der Ansatz Daten in Namen und Code zu stecken ist falsch. Diese ganzen nummerierten Wörterbücher sollten eigentlich in einer Datenstruktur stecken und statt so elend vieler ``if``-Abfragen sind das Informationen die aus den Daten genommen werden. Der Code muss nicht wissen wie viele Lektionen es gibt, der fragt einfach die die Anzahl von der Datenstruktur ab wo die Lektionen drin stecken, und schon kann man *einen* Code für alle Lektionen verwenden.

Namen sollten nicht zu generisch sein, keine kryptischen Abkürzungen enthalten, und nicht nummeriert werden.

Ganz viele Namen die Du da definierst, werden nirgends verwendet. Dann definiere die auch nicht. Wie gesagt, Programme entwickelt man in dem man verwendeten, funktionierenden Code schreibt. Und nicht Unmengen an Zeilen auf Vorrat die vielleicht irgendwann mal verwendet werden, von denen man aber noch gar nicht weiss, ob die dann auch funktionieren werden.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Wobei 170+ Zeilen auch zu lang für *eine* Funktion sind.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

``str({""})`` ist komplett unsinnig, selbst ohne den `str()`-Aufruf, denn ein `set` ist was anderes als ein `dict`. Kein einziger `str()`-Aufruf in dem Programm macht Sinn und nur einer davon macht nichts kaputt.

Flags wie `lernen` und `aktiv` verwendet man eher nicht. Stattdessen schreibt man ”Endlosschleifen” und verlässt die an entsprechender Stelle mit ``break`` oder manchmal in Funktionen auch mit ``return``.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wenn man mal das meiste raus wirft was offensichtlich nirgends verwendet wird und nichts bewirkt:

Code: Alles auswählen

#!/usr/bin/env python3
import random


def main():
    woerterbuch_lk_8_wi = str({""})
    woerterbuch_lk_8_1 = str({""})
    woerterbuch_lk_8_2 = str(
        {
            "se, Akk.": "sich",
        }
    )

    lektion = input(
        "gib ein zahl zwischen 1 und 8 ein die passende lektion wird dann "
        "ausgewählt: "
    )
    t_lektion = input(
        "gib nun den abschnitt der zuvor angegeben lektion an möglcih sind:"
        " g = gesammte lektion, wi = widerholungsvokabeln,"
        " 1 =  1er vokabel abschnitt, 2 = 2er vokabel abschnitt,"
        " 3 = 3er vokabel abschnitt : "
    )
    if lektion == 8:
        if t_lektion == "wi":
            lernen = True
            while lernen:
                wort = random.choice(woerterbuch_lk_8_wi)
                aktiv = True
            while aktiv:
                print("Die übersetzung zu: " + wort + " ist gesucht")
                eingabe = input("Eingabe: ")
                übersetzung = woerterbuch_lk_8_wi[wort]
            if eingabe.lower() == übersetzung:
                print("Eingabe richtig: " + woerterbuch_lk_8_wi[wort])
                aktiv = False
            else:
                print("Eingabe falsch, Nochmal? ")
                aktiv = True

            eingabe2 = input("Nochmal? Ja oder nein: ")
            if eingabe2.lower() == "ja":
                lernen = True
            else:
                lernen = False
        elif t_lektion == 1:
            lernen = True
            while lernen:
                wort = random.choice(woerterbuch_lk_8_1)
                aktiv = True
            while aktiv:
                print("Die übersetzung zu: " + wort + " ist gesucht")
                eingabe = input("Eingabe: ")
                übersetzung = woerterbuch_lk_8_1[wort]
            if eingabe.lower() == übersetzung:
                print("Eingabe richtig: " + woerterbuch_lk_8_1[wort])
                aktiv = False
            else:
                print("Eingabe falsch, Nochmal? ")
                aktiv = True

            eingabe2 = input("Nochmal? Ja oder nein: ")
            if eingabe2.lower() == "ja":
                lernen = True
            else:
                lernen = False
        elif t_lektion == 2:
            lernen = True
            while lernen:
                wort = random.choice(woerterbuch_lk_8_2)
                aktiv = True
            while aktiv:
                print("Die übersetzung zu: " + wort + " ist gesucht")
                eingabe = input("Eingabe: ")
                übersetzung = woerterbuch_lk_8_2[wort]
            if eingabe.lower() == übersetzung:
                print("Eingabe richtig: " + woerterbuch_lk_8_2[wort])
                aktiv = False
            else:
                print("Eingabe falsch, Nochmal? ")
                aktiv = True

            eingabe2 = input("Nochmal? Ja oder nein: ")
            if eingabe2.lower() == "ja":
                lernen = True
            else:
                lernen = False


if __name__ == "__main__":
    main()
Hier sieht man deutlich, das der gleiche Code mehrfach kopiert und angepasst wurde. Der ist aber unter anderem falsch eingerückt. Das müsste man jetzt bei jeder Kopie korrigieren, und zwar bei jeder gleich oder zumindest gleichwertig. Das macht unnötig Arbeit und ist fehleranfällig. Darum solltest Du immer innehalten wenn Du Code kopierst und leicht anpasst, denn das ist fast immer ein Zeichen, dass man was falsch macht.

Im Betreff steht was von Fehlermeldung: Welche? Bitte auch immer zeigen. Und wenn das Programm nicht trivial ist und der Benutzer Eingaben machen muss um zu dem Fehler zu kommen, sollte man auch verraten wie genau man zu der Fehlermeldung kommt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten