(raw_)input und schleifen

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.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

(raw_)input und schleifen

Beitragvon knekke » Freitag 29. Oktober 2004, 18:09

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]
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 29. Oktober 2004, 18:32

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

Code: Alles auswählen

#!/usr/bin/env python
import this
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Freitag 29. Oktober 2004, 18:34

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.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Beitragvon knekke » Freitag 29. Oktober 2004, 19:11

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder