Python Passwortabfrage?
Hey an alle Leser!
Ich muss als Hausaufgabe in Python eine Passwortabfrage erstellen, wo man nach dem dritten falschen Versuch eingeblendet bekommt "Du wirst das Passwort nie hinbekommen" .
Leider weiß ich nicht, wie genau ich das erstellen soll...hat jemand vielleicht eine Antwort und kann auch sagen was man eingeben soll und alles wenn´s geht erklären?!
Danke schon mal im voraus fürs erklären und für die Antworten!
2 Antworten
Bei meiner Antwort solltest du vielleicht nicht gleich ans Ende schauen, sondern erst einmal selbst zwischendurch dir selbst an einigen Stellen nochmal Gedanken machen, wie du das lösen würdest. (Auch wenn du dich am Ende natürlich an meinem Code orientieren kannst, ist das nur ein Beispiel, wie man das lösen könnte. Es gibt auch andere bessere/schlechtere Lösungen. Letztendlich geht es ja auch darum, dass du dich damit beschäftigst.)
===========
Zunächst solltest du dir beispielsweise über folgende Punkte Gedanken machen:
- Wie wird das richtige Passwort gespeichert bzw. mit dem richtigen Passwort verglichen?
- Wie erhalte ich eine Eingabe vom Benutzer, was er denkt, wie das Passwort lautet?
- Wie schaffe ich es, dass es bis zu 3 Versuche gibt? (Evtl. mit einer Schleife? Wie verhindere ich, dass bei einem Erfolg trotzdem noch weitere Versuche stattfinden? Wie bekomme ich die geforderte Meldung nach dem dritten Versuch, und zwar nur dann?)
===========
Zunächst einmal muss man abgleichen können, ob es das richtige Passwort ist. Bei richtigen Anwendungen würde man das Passwort nicht im Klartext speichern, sondern man würde da eher einen Hashwert berechnen und mit dem weiterarbeiten. Aber für die einfache Übungsaufgabe würde ich der Einfachheit halber einfach das richtige Passwort, mit dem verglichen werden soll, einfach als Klartext speichern und bei der Überprüfung einen einfachen Vergleich machen.
RICHTIGES_PASSWORT = "Baum1234"
if passwort == RICHTIGES_PASSWORT:
print("Das Passwort war richtig.")
else:
print("Das Passwort war falsch.")
Nun muss irgendwie die Variable passwort mit dem bei der Passwortabfrage vom Nutzer eingegebenen Passwort befüllt werden. Dazu kann man mit input() eine Eingabe für das Passwort entgegennehmen.
RICHTIGES_PASSWORT = "Baum1234"
passwort = input("Passwort: ")
if passwort == RICHTIGES_PASSWORT:
print("Das Passwort war richtig.")
else:
print("Das Passwort war falsch.")
Nun soll es nicht nur ein Versuch sein. Sondern der Nutzer soll bis zu 3 Versuche haben. Dazu würde ich eine for-Schleife nutzen, die 3-mal durchlaufen wird. Bei erfolgreicher Passworteingabe wird die Schleife mit break abgebrochen. Wenn die Schleife (anstatt mit break bei Erfolg abgebrochen zu werden) alle 3 Versuche durchlaufen hat, wird das else der for-Schleife ausgeführt, womit dann "Du wirst das Passwort nie hinbekommen." ausgegeben wird.
Letztendlich würde ich persönlich das folgende Skript für die Aufgabe verwenden:
RICHTIGES_PASSWORT = "Baum1234"
for _ in range(3):
passwort = input("Passwort: ")
if passwort == RICHTIGES_PASSWORT:
print("Das Passwort war richtig.")
break
else:
print("Das Passwort war falsch.")
else:
print("Du wirst das Passwort nie hinbekommen.")
Das i-Tüpfelchen wäre es jetzt noch, wenn in die Anzahl der Versuche in einer Datei gespeichert werden, damit man beim nächsten Programmstart nicht wieder drei Versuche hat. (Und natürlich das, was du selbst schon gesagt hast: Passwörter nicht als Klartext, sondern gehasht. Am besten mit einem Hash-Algorithmus, der speziell für Passwörter gedacht ist, z.B. bcrypt)
Um die Passwort Eingabe unsichtbar zu machen kann man getpass verwenden, um shoulder surfing zu vermeiden
from getpass import getpass
getpass("Password: ")
du musst doch eig nur prüfen, ob das passwort equal is
dann kannst du mit einer variablen zählen, wenn 3 mal falsch ist, gib den text aus
den rest kriegst du selbst hin
viel zu erklären gibts eigentlich nicht