Log-in

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
gmen
User
Beiträge: 4
Registriert: Sonntag 24. März 2019, 20:14

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14: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.
gmen
User
Beiträge: 4
Registriert: Sonntag 24. März 2019, 20:14

__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.
Danke erstmal für die schnelle Reaktion. Wie gesagt fange gerade erst an ...;-)
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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
gmen
User
Beiträge: 4
Registriert: Sonntag 24. März 2019, 20:14

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 :evil:

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 ()
Benutzeravatar
__blackjack__
User
Beiträge: 13003
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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
gmen
User
Beiträge: 4
Registriert: Sonntag 24. März 2019, 20:14

__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.
Ich habe es versucht ...bekomme nur die Fehlermeldung
<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...
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

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.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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.

Code: Alles auswählen

def user_pass():
    return str(input("Bitte Passwort eingeben: "))
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

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
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@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`.
Antworten