Hallo und Willkommen im Forum!
Hui... da ist leider viel zu verbessern an Deinem Code
- als erstes: Achte auf PEP8. Das ist der offizielle Python-Style Guide. Funktionsnamen schreibt man danach klein. Bezeichner ebenso (``BE`` -> ``be``)
- Deine Namen sind schlecht gewählt. ``B1`` soll wohl "Benutzer nummer eins" sein, ``BE`` "Benutzereingabe"? Wieso nicht schlicht ``usser`` und ``user_input``? Du weisst nach einigen Wochen bestimmt nicht mehr, was sich hinter diesen Bezeichnern verbirgt. Das sinnvolle Benennen ist extrem wichtig und leider auch nicht wirklich einfach. Aber auch als Anfänger solltest Du darauf schon achten. Wenn Du einen Namen liest, solltest Du im Idealfall sofort erkennen, welches Art von Objekt sich dahinter verbrigt.
- Nummerieren sollte man Namen auch nicht; wenn man das tut, dann will man eigentlich eine Liste oder eine ähnliche Datenstruktur benutzen.
- Generell ist es eine schlechte Idee, zwei zusammenhängende Daten separat an zwei unterschiedliche Namen zu binden. Der Benutzer, sein Passwort und seine Frage bilden doch für jeden Benutzer eine "Einheit". Später würdest Du sicherlich eine Klasse ``User`` schreiben, aber zu Beginn kannst Du das mit einem Tupel, einer Liste oder einem Dictionary lösen; hier mal als Dictionary:
Code: Alles auswählen
user = {"name": "Hyperion", "password": "secret", "hint": "..."}
- Den Sinn hinter ``Einloggen1`` (auch kein guter Name!) sehe ich nicht.
- Du hast eine unbeabsichtigte Rekursion in Deinem Code! In ``Einloggen2`` rufst Du dieselbe Funktion innerhalb noch einmal auf. Das fällt bei wenigen Calls nicht auf, führt aber später zu einem Absturz.
- Deine Verwendung von ``print`` als Statement legt nahe, dass Du Python in Version 2.x verwendest. Dann solltest Du aber nicht ``input``, sondern ``raw_input`` verwenden.
- ``versuche`` wird in ``Einloggen2`` einen ``NameError`` auslösen, da das Binden in ``Einloggen1`` passiert und Namensräume in Python nicht über mehrere Funktionen hinaus gültig sind. Du musst die Anzahl an Login-Versuchen schon in dieser Funktion an einen Namen binden, oder etwa per Parameter übergeben.
- Du solltest Code auf Modulebene vermeiden:
Code: Alles auswählen
B1="Niklas"
pw="Haus"
pwtipp="Worin wohnt man normalerweise?"
# und unten
Einloggen()
Stattdessen verwende diesen Trick:
Code: Alles auswählen
def main():
# hier setze Deine Parameter
# rufe Deine Einstiegsfunktion auf
if __name__ == "__main__":
main()
Ansonsten solltest Du Dir auf jeden Fall neben den grundlegenden Datentypen (s.o.) auch Funktionen genauer angucken. Dabei solltest Du Dich über Paraneter und Rückgabewerte schlau lesen. Deine Abfragen kann man nämlich in eine allgemeine Funktion auslagern und das Testen so vom Codeumfang reduzieren und leserlicher machen.