Python Code, wo ist mein Fehler?

4 Antworten

Dein Programm startet mit dem ersten Befehl, und das ist die Wertzuweisung an wert1. Das was davor steht wird erst ausgeführt, wenn Du mit

angemeldet = login(..)

die definierte Prozedur aufrufst. Vorher hast Du sie nur definiert, ausgeführt wird sie noch nicht.

ein533 
Fragesteller
 16.08.2023, 12:35

das heißt ich muss die reihenfolge ändern?

0

Python arbeitet einfach gesagt, den Programmcode "von oben nach unten" ab. Deine Prozedur "login", wird erst dann aufgerufen (bzw. ausgeführt), wenn du diese (in deinem Code in Zeile 19) im Hauptprogramm aufrufst.

Da du aber zuerst einen input bei den Variablen wert1 und wert2 verlangst, wird deine Prozedur erst danach aufgerufen und deine gewünschte Frage gestellt, ob man bereits einen Account hat.

Bei weiteren Fragen melde dich gerne

Gruß

Woher ich das weiß:eigene Erfahrung

Nur weil du die login Funktion definierst wird diese nicht ausgeführt. Der Code startet in Zeile 17, weil du dort den ersten code hast der nicht in einer Funktion ist. Du musst die Abfrage ob ob man einen Account hat davor ausführen. Außerdem stimmen noch ein par andere Dinge mit dem Code nicht. Der korrekte Code würde so aussehen:

logindaten = [("Karl", "Gustav"), ("Lina", "Huhn")]     # Die logindaten müssen Außerhalb der Funktion definiert sein, da der inhalt der variable solbald die login Funktion beendet ist weg wäre.


def login (name, passwort):
    for zugang in logindaten:
        if zugang[0] == name and zugang[1] == passwort:
            print("Login ergfolgreich")
            return True     # Da du nach der Funktion in der angemldet Variable speichern möchtest ob man angemeldet ist musst du auch True oder False zurückgeben (Da erfolgreich hier True)
        else:
            print("Der angegbene Account und das Passwort stimmen nicht überein!")
            return False     # Da hier nicht erfolgreich False
    
# Hier startet der Code
abfrage = input("Hast du schon einen Account? (ja/nein):")
if abfrage == "nein":
    n = input("Okay, dann gib bitte deinen Namen an:")
    p = input("bitte gib jetzt dein Passwort an:")
    logindaten += (n, p)     # Wenn du logindaten = [(n, p)] ausfürst wird der inhalt der Variable überschrieben und alle anderen logins würden nicht mehr gehen (logindaten += (n, p) is dasselbe wie logindaten = logindaten + (n, p))
    print("Du hast dich eingeloggt")
else:
    wer1 = input("Bitte gib deinen Accoutn namen ein:")
    wer2 = input("Bitte gib dein Passwort ein:")
    angemeldet = login(wer1, wer2)

In den Kommentaren hab ich dir die Änderungen erklärt.

Woher ich das weiß:Hobby – Ich programmiere seit 3 Jahren mit C#
ein533 
Fragesteller
 16.08.2023, 12:52

Oha, Dankeschön

Die version mit logindaten+= (n,p) kannte ich garnicht

0

Vllt das ,,+logindate" in Zeile 2?

Woher ich das weiß:Hobby – Programmiere in meiner Freizeit, hauptsächlich in C