Programmcode zeigt Fehler!!

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
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Hallo und guten Morgen,

kann mir jemand den Fehler zeigen:

def registrierung (nutzername, passwort):
logindaten = [("karl01", "abcde"), ("*susi*",
"3107"),("00xyz00", "a7r9f3"), ("martin.mueller", "martin")]

for zugang in logindaten:
if zugang[0]==nutzername and zugang[1]==passwort:
print ("Login erfolgreich!")
return True
print ("Nutzernamen und Passwort stimmen nicht überein!")
return False
wert1 = input("Geben Sie bitte Ihren Nutzernamen ein: ")
wert2 = input("Geben Sie bitte Ihr Passwort ein: ")
angemeldet = registrierung(wert1, wert2)


Da gibt es den Fehler in Line 6 ?
Was ist daran falsch?

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Hallo Klaus, kannst du bitte den Code zwischen die Code-Tags (Button </>) setzen und auch die Fehlermeldung ergänzen?
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

Den Fehler verrät Dir Die Fehlermeldung, die Du bekommst.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, niemals Tabs und Leerzeichen mischen. Du mußt Deinen Editor so einstellen, dass er beim Drücken der Tab-Taste automatisch Leerzeichen einfügt.
Zwischen Funktionsname und öffnender Klammer kommt kein Leerzeichen, dagegen nach Komma und um == fehlen zum Teil die Leerzeichen.

wert1 und wert2 sind schlechte Namen für einen Nutzernamen oder ein Passwort.
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo Kla-Sur ,
die return Anweisung ist immer am Schluss einer Funktion.
Wenn die Eingabe falsch ist, fehlt dir ein else
Ist die Eingabe korrekt, solttest Du eine neue Funktion aufrufen, um Login erfolgreich mitzuteilen.
Am Schluss dieser neuen Funktion kannst Du dann das return True setzen.
Gruss Peter
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

@peterpy: nein, alle returns sind korrekt. Man kann auch innerhalb einer for-Schleife ein `return` einbauen, um die Schleife im Erfolgsfall gleich abzubrechen.
Dass der Login erfolgreich war, wird ja durch den Rückgabewert (True oder False) mitgeteilt, warum sollte man da noch eine weitere Funktion aufrufen?

Kann man natürlich auch ohne for-Schleife schreiben, dann wird es vielleicht klarer:

Code: Alles auswählen

LOGIN_DATEN = [
    ("karl01", "abcde"),
    ("*susi*", "3107"),
    ("00xyz00", "a7r9f3"),
    ("martin.mueller", "martin"),
]

def registrierung(nutzername, passwort):
    if (nutzername, passwort) in LOGIN_DATEN:
        print("Login erfolgreich!")
        return True
    else:
        print("Nutzernamen und Passwort stimmen nicht überein!")
        return False

def main():
    nutzername = input("Geben Sie bitte Ihren Nutzernamen ein: ")
    passwort = input("Geben Sie bitte Ihr Passwort ein: ")
    angemeldet = registrierung(nutzername, passwort)
    if not angemeldet:
        print("Tschüss")
        return
    print("hier geht's weiter")

if __name__ == '__main__':
    main()
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Hallo und danke für die Hilfe!

Das kleine Programm kommt aus einem Lehrbuch. Habe es sogar kopiert um keinen
Tippfehler zu erzeugen. Hat noch jemand eine Empfehlung für ein Lehrbuch !!

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Meine Empfehlung:
Python Basics:
A Practical Introduction to Python 3

Go from beginner to intermediate in Python with this complete curriculum, up-to-date for Python 3.9.
Python Basics includes exercises, interactive quizzes, and sample projects, so you’ll always know what to focus on next in order to build a strong Python foundation.

https://realpython.com/products/python-basics-book/

Podcast zum Buch: https://realpython.com/podcasts/rpp/32/

Ich habe es zwar nicht gelesen, aber den Podcast gehört und Real Python liefert konstant qualitativ hochwertige Inhalte.
Sirius3
User
Beiträge: 17797
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie hast Du es denn kopiert? Der Programmcode, den es im Netz zum Runterladen gibt, ist zwar nur mit 2 Leerzeichen eingerückt, aber sonst ohne Syntaxfehler.
Es gibt kein gutes Einsteigerbuch in Deutsch. Fast alle scheitern schon an den primitivsten Konventionen, zeigen Code, den man unter keinen Umständen so schreiben sollte oder darf und übertragen Konzepte falsch von anderen Programmiersprachen auf Python.
Da hilft nur mit verschiedenen Quellen zu arbeiten, und von keiner zu erwarten, dass sie fehlerfrei ist (außer natürlich dieses Forum hier).
Kla-Sur
User
Beiträge: 15
Registriert: Montag 15. Juni 2020, 14:04

Welch Glück das es dieses Forum gibt!

Ich habe mir Python 3.9 auf meinem Win10 Rechner installiert und lese digital ein Buch mit einem Pdf-Reader. Interessante Programme kopiere ich mir dann in mein Notepad++ und speichere sie als
*.py datei ab. Wenn ich die *.py Datei ausführen möchte gehe in die "Dos-Console" wechsel ins passende Verzeichnis und starte es !

Danke Bolitho, werde mir deine Empfehlung anschauen !

Gruß Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
Nufnus
User
Beiträge: 18
Registriert: Sonntag 29. November 2020, 21:40

Hallo,

vielleicht möchtest du dir Microsoft Visual Studio Code (Mit dem "Code" im Namen) mal anschauen.
Das ist eine kostenlose, schlanke Entwicklungsumgebung und finde ich persönlich zum Python programmieren angenehmer als "nur" einen Texteditor (zugegeben einen guten) mit Syntaxhighlighting.
Mit Visual Studio Code und der Python Extension hast du dann auch einen Debugger zur Verfügung und kannst damit Fehler aufspüren / Zeile für Zeile nachvollziehen was dein Code macht. Ich glaube das geht in notepad++ nicht so ohne weiteres oder?
Auch falls du irgendwann später mal mit einer Versionsverwaltung wie GIT arbeiten möchtest würde das mit Visual Studio Code gehen.

Gruß
Antworten