Eine einfache if-Abfrage

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
Hyperforin
User
Beiträge: 3
Registriert: Donnerstag 3. November 2011, 14:25

Hi,

ich versuch gerade in Python (meine erste Programmiersprache) rein zu finden.
Beim durcharbeiten des Werkes "A byte of Python" versuche ich die Beispiele
selbst immer sinnvoll umzusetzen.

Ich hoffe ich bin nicht im falschen Unterforum. Aber ich hab jetzt keines für so profane Fragen gefunden ;)

So nun zu meinem Code:

Code: Alles auswählen

Benutzername = "XYZ1"
BenutzernameZwei = "ZRZ"
BenuzternameDrei = 123


data = input(("Geben Sie Ihren Benutzernamen ein:"))
try:
    data = int(data)
    if data == Benutzername or BenutzernameZwei or BenutzernameDrei:
        print ('Login gewährt.(Zahl)')
    else: ('Login verweigert.(Zahl)')
except:
    if data == Benutzername or BenutzernameZwei or BenutzernameDrei:
        print ('Login gewährt. (String)')
    else:
        print('Login verweigert. (String)')
    pass



Ich möchte quasi den Benutzernamen abfragen. Dabei muss natürlich geklärt werden ob es ein Literal oder ein String ist. Sonst kommt es zu Problemen beim input. Diese Unterscheidung funktioniert auch. Was aber nicht funktioniert ist wenn mehrere Variablen gelten können/sollen.

z.B. wenn Benutzername und BenutzernameZwei richtig sein sollen. Allerdings gibt er mir grundsätzlich 'Login gewährt. (String)' aus sobald ich etwas mit Buchstaben eingebe. Woran liegt das?


MfG
Zuletzt geändert von Hyperforin am Donnerstag 3. November 2011, 15:02, insgesamt 1-mal geändert.
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Zu der überschrift wird dir der eine oder andere sicher noch was sagen :D Ist so ein tägliches Thema

Zu deiner If-Abfrage:
du prüfst nur ob "data" und "Benutzername" gleich sind bei den anderen beiden prüfst du nicht gegen "data" sondern schaust im Prinziep nur ob sie True sind was bei einem string der Fall ist.

Btw hattest du schon listen? Damit wären die gültigen Benutzer leichter abzubilden.
deets

Zuerstmal der obligatorische Link:

http://if-schleife.de/

Und dann stimmen deine Bedingungen nicht: du kannst nich

foo == a or b or c

machen. Bzw du kannst schon, aber es ist nicht, was du willst - weil es nicht vergleicht, ob foo entweder a oder b oder c ist.

Die direkteste Aenderung waere

foo == a or foo == b or foo == c

Aber wenn du dir deine Variablen mal anschaust, dann faellt da was auf: du faengst an, sie durchzunummerieren - immer ein Zeichen dafuer, dass man die falsche Datenstruktur gewaehlt hat.

In deinem Fall sollteste statt 3 diskreten Benutzernamen lieber eine Liste von Benutzern haben:

Benutzer = ["XYZ1", "ZRZ", 123]

Und dann wird der Code oben auch gleich viel einfacher:

foo in Benutzer

reicht.

Und last but not least: Benutzernamen sind *Namen* - also eben *keine* Zahlen. Und so sollest du die auch handhaben, dieses int-gefummel ist unnoetig. Dein Code enhaelt dadurch naemlich auch einen Fehler, denn was passiert, wenn sich ein Benutzer den Namen

"123"

gibt? Also den *string* 123? Dann verwandelst du den bei der Eingabe in Zahl, und dann kannst du nicht mehr damit vergleichen.
problembär

deets hat geschrieben:Zuerstmal der obligatorische Link:

http://if-schleife.de/
Immer wieder schön! :P
Hyperforin
User
Beiträge: 3
Registriert: Donnerstag 3. November 2011, 14:25

Ok, ich werde es von nun an immer if-Abfrage nennen ;)
Ach und Danke für Eure Hinweise. Das Problem ist nun gelöst!

--->

Code: Alles auswählen


Benutzername = "Hors1t"
BenutzernameZwei = "LolFail"
BenuzternameDrei = 123


data = input(("Geben Sie Ihren Benutzernamen ein:"))
try:
    data = int(data)
    if data == Benutzername or data == BenutzernameZwei or data ==  BenuzternameDrei:
        print ('Login gewährt.(Zahl)')
    else: ('Login verweigert.(Zahl)')
except:
    if data == Benutzername or data == BenutzernameZwei or data == BenuzternameDrei:
        print ('Login gewährt. (String)')
    else:
        print('Login verweigert. (String)')
    pass
JonasR
User
Beiträge: 251
Registriert: Mittwoch 12. Mai 2010, 13:59

Kann es sein dass nach dem ersten else ein print fehlt? :D
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Hyperforin hat geschrieben:

Code: Alles auswählen

data = input(("Geben Sie Ihren Benutzernamen ein:"))
Die doppelten Klammern sind überflüssig.

Ich gehe bei dem gezeigten Code ohnehin davon aus, dass das reiner Spielcode zum Lernen der Sprache ist. Ein echtes Login hätte, wie deets bereits schrieb, dieses komplizierte Gemurkse nicht nötig. Spätestens wenn du beim Lernen bei Listen angekommen bist wirst du auch noch selber feststellen, wie hässlich das Durchnummerieren von Variablennamen ist.

Tu dir jetzt noch selber einen Gefallen und schau dir mal PEP-8 an. Beherzige die Informationen aus diesem Style Guide und mach es von Anfang an richtig, dann musst dich später nicht umgewöhnen.
Hyperforin
User
Beiträge: 3
Registriert: Donnerstag 3. November 2011, 14:25

/me hat geschrieben:
Hyperforin hat geschrieben:

Code: Alles auswählen

data = input(("Geben Sie Ihren Benutzernamen ein:"))
Die doppelten Klammern sind überflüssig.

Ich gehe bei dem gezeigten Code ohnehin davon aus, dass das reiner Spielcode zum Lernen der Sprache ist. Ein echtes Login hätte, wie deets bereits schrieb, dieses komplizierte Gemurkse nicht nötig. Spätestens wenn du beim Lernen bei Listen angekommen bist wirst du auch noch selber feststellen, wie hässlich das Durchnummerieren von Variablennamen ist.

Tu dir jetzt noch selber einen Gefallen und schau dir mal PEP-8 an. Beherzige die Informationen aus diesem Style Guide und mach es von Anfang an richtig, dann musst dich später nicht umgewöhnen.

Hi,

ja ich versuch nur das ein wenig umzuschreiben. So präg ich mir die Dinge besser ein.
Die Sache mit dem Style Guide werd ich mir anschaun.

Achja. Es hat ein Print gefehlt. Ist ausgemerzt ;)
Antworten