input(), raw_input()

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
koxbox
User
Beiträge: 11
Registriert: Donnerstag 27. Februar 2014, 13:45

Hallo,

ich versuche mich gerade dabei Benutzer- Tastatureingaben zu überprüfen.

z.B.

EINGABE = raw_input("Bitte geben sie A oder B ein:)

ich versuche jetzt schon die ganze Zeit die Eingabe auf A oder B zu prüfen.
Es soll so lange eine Eingabe kommen bis jemand A oder B eingegeben hat.

INSREG = raw_input("A or B:")

if INSREG is "A" or "a":
print "Y,y true"
elif INSREG is "B" or "b":
print "N,n false"

hier solle if auch erst abgearbeitet werden wenn der imput wirklcih A ,a oder B, b ist.

Gruß
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

du kannst nicht einfach natürliche Sprache in Code übersetzen. Bei dem or handelt es sich um ein logisches or. Wenn du schreibst ``x=="a" or "A"``, dann wird der Ausdruck wahr, falls ``x=="a"`` wahr ist, falls "A" wahr ist oder falls beide wahr sind. ``x == "a"`` trifft genau dann zu, wenn x den Wert "a" hat. "A" hingegen wird immer zu "wahr" ausgewertet, da jeder String, ausgenommen dem leeren "", zu wahr ausgewertet wird. Damit trifft auch immer die erste Bedingung zu.

Du meinst:

Code: Alles auswählen

if x=="a" or x=="A":
oder kürzer:

Code: Alles auswählen

if x in ("a", "A"):
oder noch einfacher:

Code: Alles auswählen

if x.lower() == "a":
Du solltest dir auch gleich abgewöhnen Gleichheit mittels "is" zu testen. "is" Testet auf Objektidentität und nicht auf Gleichheit. Benutze daher immer "==". Außer du weißt genau, dass du "is" verwenden kannst.
Zuletzt geändert von EyDu am Dienstag 4. März 2014, 15:30, insgesamt 1-mal geändert.
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

koxbox hat geschrieben:

Code: Alles auswählen

if INSREG is "A" or "a":
Diese Zeile tut nicht das was du glaubst. Sie wird abgearbeitet als (INSREG is "A") or "a". Nun ist "a" allerdings immer wahr und somit trifft die Bedingung immer zu. Zudem solltest du nicht mit is vergleichen. is vergleicht Objektidentitäten und nicht Werte. Korrekt wäre hier Folgendes

Code: Alles auswählen

if INSREG == "A" or INSREG == "a":
Diese Logik lässt sich abkürzen indem man auf das Vorhandensein in einer Sequenz prüft.

Code: Alles auswählen

if INSREG in ("A", "a"):
Alternativ kannst du die Eingabe auch in Kleinbuchstaben konvertieren und nur darauf prüfen.

Code: Alles auswählen

if INSREG.lower() = "a":
Jetzt sollte man noch den Namen INSREG durch irgendetwas sinnvolles ersetzen. Zunächst einmal sollte ein Bezeichnername laut Style Guide for Python Code in Kleinbuchstaben geschrieben werden und dann sollte man sich noch Gedanken über den Namen als solchen machen. "insreg" ist zumindest für mich absolut nichtssagend.

Der nächste Teil deines Problems ist, dass du eine Schleife für die Eingabe brauchst. Hier bietet sich eine Endlosschleife an, die so lange wiederholt wird, bis die Eingabe in Ordnung ist.

Code: Alles auswählen

while True:
    answer = raw_input('A oder B eingeben: ')
    if answer.lower() in ('a', 'b'):
        break
Das ist alles.
koxbox
User
Beiträge: 11
Registriert: Donnerstag 27. Februar 2014, 13:45

Danke für die schnellen und vielen Antworten.
/me hat geschrieben:if INSREG is "A" or "a":
sorry fuer das schlechte Beispiel.
Das hatte ich dann auch schon rausgefunden und in einem anderen script hatte ich das dann auch schon geändert auf:

if INSREG == "A" or INSREG == "a":

Mein Kopf ist nur schon so zu das ich das beim kopieren nicht gemerkt hatte :-).

@ /me

danke für den Tip mit der while schleife.
Das hatte ich vorher auch probiert, aber muss da wohl einen Fehler gemacht haben.

Aber jetzt tut es bestens.

Danke an alle!
Antworten