Hallo Leute,
beschäftige mich erst seit kurzem mit dem Programmieren und habe dieses Forum entdeckt.
Bei meinen ersten Gehversuchen bin ich heute bei einem (für euch bestimmt offensichtlichem) Problem am verzweifeln.
Kann mir jemand sagen wo der Fehler liegt?
__________________
password = "test"
ilogin = ""
ipass = ""
def displaywelcome():
print("")
print ("Willkommen zu Login")
print ("")
def getUserLogin():
return input("Bitte Namen eingeben: ")
def getUserPass():
return input("Bitte Passwort eingeben: ")
#def displayLoginUser(login, passwrd):
# print ("Login: " + login)
# print ("Passwort: " + passwrd)
def checkpwd(password):
if (password == getUserPass):
return "true";
else:
return "false";
displaywelcome ()
ilogin = getUserLogin()
ipass = getUserPass()
print (checkpwd (password));
#displayLoginUser (ilogin, ipass)
---------------------------
Egal was ich eintrage die Rückmeldung ist immer "false"...
Danke euch schon mal im voraus
LG aus Berlin
Log-in
Bitte in Zukunft die Code-Tags benutzen. Sonst ist dein Code nicht lesbar.
Und schau dir mal genau an, womit du vergleichst in checkpwd (warum die Abkuerzung? Sind dir ploetzlich a, s, o und r ausgegangen?).
Dein Argument heisst genau so wie etwas anderes. Und dann vergleichst du mit etwas, das noch nicht mal ein String ist.
Und schau dir mal genau an, womit du vergleichst in checkpwd (warum die Abkuerzung? Sind dir ploetzlich a, s, o und r ausgegangen?).
Dein Argument heisst genau so wie etwas anderes. Und dann vergleichst du mit etwas, das noch nicht mal ein String ist.
Danke erstmal für die schnelle Reaktion. Wie gesagt fange gerade erst an ...__deets__ hat geschrieben: ↑Sonntag 24. März 2019, 20:29 Bitte in Zukunft die Code-Tags benutzen. Sonst ist dein Code nicht lesbar.
Und schau dir mal genau an, womit du vergleichst in checkpwd (warum die Abkuerzung? Sind dir ploetzlich a, s, o und r ausgegangen?).
Dein Argument heisst genau so wie etwas anderes. Und dann vergleichst du mit etwas, das noch nicht mal ein String ist.
Was meinst du mit Code-Tags (Zeilen Nummern)?
Die fehlenden Buchstaben sollten eigentlich nicht die Ursache sein, da diese als Kommentare markiert sind.
Sorry aber ich verstehe nicht worauf du hinaus willst ;-(
LG
Hier im Forum musst du den Quelltext in code-tags setzen. Das ist der </>-Button im erweiterten Editor. Sonst gehen die Einrueckungen verloren.
Und natuerlich sind die fehlenden Buchstaben nicht das Problem. Sie sind nur eine unnoetige Abkuerzung. Sollte man sich gar nicht erst angewoehnen.
Und direkt bevor du vergleichst, gib dir mal mit print die beiden Werte aus, die du danach miteinander vergleichst. Dann macht es hoffentlich klick.
Und natuerlich sind die fehlenden Buchstaben nicht das Problem. Sie sind nur eine unnoetige Abkuerzung. Sollte man sich gar nicht erst angewoehnen.
Und direkt bevor du vergleichst, gib dir mal mit print die beiden Werte aus, die du danach miteinander vergleichst. Dann macht es hoffentlich klick.
@gmen: was soll denn das i bei `ilogin` und `ipass`? In Python definiert man keine Variablen, die also an Dummystrings zu binden ist absolut unsinnig.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 2 und mal 8.
Variablennamen und Funktionen schreibt man klein_mit_unterstrich.
`if` ist keine Funktion, die Klammern daher überflüssig.
`;` sind falsch, weil man das nur zum Trennen von Anweisungen auf einer Zeile benutzt, was man aber nicht machen sollte. Statt Strings "true" und "false" benutzt man die Literale True und False.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 2 und mal 8.
Variablennamen und Funktionen schreibt man klein_mit_unterstrich.
`if` ist keine Funktion, die Klammern daher überflüssig.
`;` sind falsch, weil man das nur zum Trennen von Anweisungen auf einer Zeile benutzt, was man aber nicht machen sollte. Statt Strings "true" und "false" benutzt man die Literale True und False.
Sirius3 hat geschrieben: ↑Sonntag 24. März 2019, 21:01 @gmen: was soll denn das i bei `ilogin` und `ipass`? In Python definiert man keine Variablen, die also an Dummystrings zu binden ist absolut unsinnig.
Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 2 und mal 8.
Variablennamen und Funktionen schreibt man klein_mit_unterstrich.
`if` ist keine Funktion, die Klammern daher überflüssig.
`;` sind falsch, weil man das nur zum Trennen von Anweisungen auf einer Zeile benutzt, was man aber nicht machen sollte. Statt Strings "true" und "false" benutzt man die Literale True und False.
Habe es jetzt von neuem versucht , klappt immer noch nicht...selbe Denkfehler!!!...tick gleich aus
Code: Alles auswählen
user_login = ""
user_pass = ""
password = "test"
def willkommen():
print("")
print ("Willkommen zu Login")
print ("")
def user_login():
input("Bitte Namen eingeben: ")
def user_pass():
input("Bitte Passwort eingeben: ")
def check_pass():
if user_pass == password:
print ("Willkommen")
else:
return print ("Falsches Passwort")
willkommen ()
user_login()
user_pass ()
check_pass ()
- __blackjack__
- User
- Beiträge: 13114
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@gmen: Dir wurde der Tipp gegeben in der Zeile vor dem Vergleich mal die beiden Werte auszugeben, die Du da vergleichst. Mach das doch mal. Dann siehst Du warum die nicht gleich sein können.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich habe es versucht ...bekomme nur die Fehlermeldung__blackjack__ hat geschrieben: ↑Sonntag 24. März 2019, 22:04 @gmen: Dir wurde der Tipp gegeben in der Zeile vor dem Vergleich mal die beiden Werte auszugeben, die Du da vergleichst. Mach das doch mal. Dann siehst Du warum die nicht gleich sein können.
<function user_pass at 0x1095eb1e0>
<function user_login at 0x1095eb158>
kann damit aber nicht anfangen...wäre echt dankbar wenn jemand sagt wo genau der Fehler liegt ...ich weiß nur durch denken kann man lernen, aber wäre echt nett wenn jemand einfach sagen könnte worin der Fehler liegt...
Das sind keine Fehlermeldungen.
Offensichtlich verbergen sich hinter den Namen Funktionen.
Du solltest ein Python-Tutorial durcharbeiten.
Das offizielle funktioniert meist ganz gut.
Ansonsten musst du verstehen, was Funktionen tun.
Offensichtlich verbergen sich hinter den Namen Funktionen.
Du solltest ein Python-Tutorial durcharbeiten.
Das offizielle funktioniert meist ganz gut.
Ansonsten musst du verstehen, was Funktionen tun.
Die Frage wäre, was Du wo ausgegeben hast. Die Ausgabe ist übrigens keine Fehlermeldung, sondern die Ausgabe, die Du bekommst, wenn Du ein Funktions-Objekt ausgibst.
Jetzt rufst Du zwei Funktionen auf, die `input` aufrufen, aber nichts mit dem Rückgabewert tun. Die zwei Funktionen überschreiben auch die beiden Variablen mit leeren Strings als Inhalt.
Bei `check_pass` würde man als Rückgabewert einen Wahrheitswert erwarten und nicht `None`, einmal explizit als Rückgabewert der `print`-Funktion und einmal implizit.
Die erste Variante war sehr viel sinnvoller, was die Programmlogik betrifft, bis auf den kleinen Fehler, dass `checkpwd` gar kein Passwort prüfen kann, weil es gar kein Passwort zum Prüfen bekommt.
Jetzt rufst Du zwei Funktionen auf, die `input` aufrufen, aber nichts mit dem Rückgabewert tun. Die zwei Funktionen überschreiben auch die beiden Variablen mit leeren Strings als Inhalt.
Bei `check_pass` würde man als Rückgabewert einen Wahrheitswert erwarten und nicht `None`, einmal explizit als Rückgabewert der `print`-Funktion und einmal implizit.
Die erste Variante war sehr viel sinnvoller, was die Programmlogik betrifft, bis auf den kleinen Fehler, dass `checkpwd` gar kein Passwort prüfen kann, weil es gar kein Passwort zum Prüfen bekommt.
Hallo,
du rufst die Funktion auf, wirst aufgefordert das Passwort einzugeben und das war es, mehr macht deine Funktion nicht. Der eingebene Wert wird weder gespeichert noch wird mit diesem irgendwas angestellt.
Damit du damit weiterarbeiten kannst muss die Funktion einen Wert zurückgeben. Das macht man mit return.
In deiner Funktion check_pass vergleichst du user_pass mit passwort. In der ersten Zeile deines Codes belegst du user_pass mit einem leeren String. Danach änderst du diesen nicht mehr. Du vergleichst also immer einen leeren String mit deinem Passwort also "" == "test", das da dann False raus kommt ist ja logisch. Um die Abfrage so hinzubekommen wie du es dir vorstellst musst du bei der If-Bedingung die Methode aufrufen. Beim Aufruf springt die dann quasi in deine Methode user_pass() und bekommt deine Eingabe als wert zurück. Du musst also
abfragen.
Außerdem sind Funktionen nicht als Sprung zu einer anderen Codestelle gedacht. Ich würde dir empfehlen die deutsche Doku durchzulesen (besser wäre zu jedem Thema auch bisschen testen)
https://py-tutorial-de.readthedocs.io/de/python-3.3/
Auch ein Blick in den Style-Guide kann nicht schaden, das macht den Code einfacher lesbar. (https://www.python.org/dev/peps/pep-0008/)
(mein Beitrag könnte Fehler enthalten, bin selber noch Anfänger)
Mit freundlichen Grüßen
Jankie
du rufst die Funktion auf, wirst aufgefordert das Passwort einzugeben und das war es, mehr macht deine Funktion nicht. Der eingebene Wert wird weder gespeichert noch wird mit diesem irgendwas angestellt.
Damit du damit weiterarbeiten kannst muss die Funktion einen Wert zurückgeben. Das macht man mit return.
Code: Alles auswählen
def user_pass():
return str(input("Bitte Passwort eingeben: "))
Code: Alles auswählen
PASSWORD = "test"
def check_pass():
if user_pass() == PASSWORD:
print("Willkommen")
else:
print("Falsches Passwort")
abfragen.
Außerdem sind Funktionen nicht als Sprung zu einer anderen Codestelle gedacht. Ich würde dir empfehlen die deutsche Doku durchzulesen (besser wäre zu jedem Thema auch bisschen testen)
https://py-tutorial-de.readthedocs.io/de/python-3.3/
Auch ein Blick in den Style-Guide kann nicht schaden, das macht den Code einfacher lesbar. (https://www.python.org/dev/peps/pep-0008/)
(mein Beitrag könnte Fehler enthalten, bin selber noch Anfänger)
Mit freundlichen Grüßen
Jankie
@Jankie: `input` liefert bereits einen String zurück, der Aufruf von `str` also unnötig.
`user_pass` enthält keinen leeren String, sondern die Funktion `user_pass` die nach dem setzen auf leeren String definiert wurde, in der ersten Version hieß das sogar noch `getUserPass`.
`user_pass` enthält keinen leeren String, sondern die Funktion `user_pass` die nach dem setzen auf leeren String definiert wurde, in der ersten Version hieß das sogar noch `getUserPass`.