Seite 1 von 1

(raw_)input und schleifen

Verfasst: Freitag 29. Oktober 2004, 18:09
von knekke
Hallo beisammen!
Ich fange gerade an Python zu lernen und programmiere zu Übungszwecken ein kleines Quiz.
Der benutzer hat in folgendem beispiel die möglichkeit eine antwort von 1 bis 4 zu wählen.
1. Wie bekomme ich es hin, das das script bei falscher Eingabe zur eingabeaufforderung zurückspringt?
2. Wenn statt einer Zahl ein Buchstabe eingegeben wird, soll die Eingabeaufforderung auch nochmal erscheinen. Ist das überhaupt möglich? ich verwende ja input() anstelle von raw_input() !?!

Hier der code:

Code: Alles auswählen

punkte = 0
print ""
print "Willkommen zum Testquiz"
print ""
print """Frage 1:

Was glauben sie ?"""
print ""
answer = input("""1 - erste
2 - zweite
3 - dritte
4 - vierte

Antwort (1-4):  """)
print ""
if answer == 1:
    print "richtig!!! 5 Punkte"
    punkte = punkte+5
elif answer == 2:
    print "knapp vorbei"
elif answer == 3:
    print "total falsch"
elif answer == 4:
    print "3 Punkte abzug"
    punkte = punkte-3
else:
    print "eine Zahl zwischen 1 und 4... das ist doch nicht zuviel verlangt.."
    AN DIESER STELLE SOLL ZUR EINGABEAUFFORDERUNG ZURÜCKGEKEHRT WERDEN

print "Du hast ",punkte, "Punkte!"
1. könnte ich evtl mit einer while-schleife basteln, aber es wäre doch schöner wenn man irgendwie returnpunkte oder so setzen könnte.
zu 2. hab ich keine ahnung

vielen dank,
thomas[/code]

Verfasst: Freitag 29. Oktober 2004, 18:32
von Dookie
Hi thomas,

ich hab mal deinen Code in [ python ]...[ /python ] gesetzt.
zu 1.: Das könntest Du nicht nur mit einer Whileschleife basteln, das wird auch mit einer Whileschleife gebastelt! Sprungmarken und goto findest Du in Basic oder C/C++

zu 2.: Ich würde immer raw_input verwenden und falls nötig in den entsprechenden Datentyp, hier Integer mit int(), umwandeln. Dann kannst Du auch einfach vorher mit if answer.isdigit(): testen ob eine Zahl eingegeben wurde.
Oder halt so:

Code: Alles auswählen

while True:
    answer = rawinput("""1 - erste
2 - zweite
3 - dritte
4 - vierte
Antwort (1-4):  """)
    print
    if not answer.isdigit(): # keine Zahl!
        print "Deine Eingabe ist keine Zahl!"
        continue
    answer = int(answer)
    if answer == 1:
        print "richtig!!! 5 Punkte"
    elif answer == 2:
    ...
    else:
        print "eine Zahl zwischen 1 und 4... das ist doch nicht zuviel verlangt.."
        continue
    break

print "Du hast %i Punkte!" % punkte

Gruß

Dookie

Verfasst: Freitag 29. Oktober 2004, 18:34
von Milan
Hi. Zuersteinmal: input ist dasselbe wie eval(raw_input()), von daher ist egal was man nimmt. Aus sicherheitsgründen nehm ich immer raw_input, da bei eval beliebiger Code ausgeführt werden kann. Tja, und um eine while-Schleife wirst du nicht herum kommen. Einfach solange abfragen, bis sich der Eingabestring in einen integer zwischen 1 und 4 wandeln lässt:

Code: Alles auswählen

while True:
    try:
        answer=int(raw_input("1-4 büdde: "))
    except ValueError:
        continue
    if 1<=answer<=4:
        break
EDIT: gut, da war Dookie wieder schneller als ich :lol: . Naja, das ist die Variante, wenn nicht geprüft wird ob was stimmt (kein Buchstabe), sondern einfach probiert wird und zur Not der Fehler unterdrückt.

Verfasst: Freitag 29. Oktober 2004, 19:11
von knekke
Vielen dank für die rasche Antwort.
das ging ja echt flux!

Jetzt steht meinem quiz ja nichts mehr im wege...
erstmal zumindest ;-)

schönes Wochenende,
Thomas