Seite 1 von 1

if-Abfrage

Verfasst: Mittwoch 29. März 2006, 18:04
von D0mino
Hallo, ich programmier gerade ein bisschen und habe eine Frage.
Ich möchte, dass der Benutzer eine Zahl eingibt. Wenn diese Zahl 0 ist, möchte ich, dass so etwas wie "keine 0 eingeben, nochmal" oder so ausgegeben wird. Das möchte ich als Schleife haben, sodass der Benutzer 100x 0 eingeben kann und jedes Mal wieder die eingabe wiederholt wird. Wie kann ich das machen? Bis jetzt habe ich es so:

Code: Alles auswählen

    print
    zaehler1=input()
    print
    if (zaehler1==0):
        print "Bitte keine 0 eingeben!"
        print
        print "Wiederholen Sie bitte die Eingabe :"
        print
        zaehler1=input()
    print
Da wird die Eingabe aber eben nur einmal wiederholt und wenn der benutzer jetzt nochmal eine 0 eingibt, schmiert das Programm ab.
Danke schonmal!

Verfasst: Mittwoch 29. März 2006, 18:38
von lemmi
du brauchst da ne schleife

die frage ist, soll das was danach kommt nur einmal oder mehrmals.
ich bin auch noch ganz am anfang und hoffe, dass ich hier keinen all zu großen misst verzapf:

Code: Alles auswählen

done = False
while done == False:
   zaehler1=input()
   if zaehler1 == 0:
      print "bitte nochmal eingeben"
   else:
      <dein algorithmus>
      done = True
verbessert mich bitte ebenfalls, falls hier etwas nicht stimmt.

Verfasst: Mittwoch 29. März 2006, 18:49
von D0mino
Ah, super, danke Lemmi! Das ist genau das was ich brauche! Diese "done true / false" - geschichte ist mir zwar völlig neu, aber es funktioniert.
Also das mit dem done ist ja praktisch wie eine Klammer um die ganze Sache. Als done=false wird dann zaehler1==0 beschrieben und wenn das der Fall ist, geht es in die Schleife rein. Wenn zaehler1 irgendwas anderes ist, ist das done=true und es geht normal mit dem programm weiter... richtig?
Also, danke nochmal :D

Verfasst: Mittwoch 29. März 2006, 19:11
von icepacker
noch ein bisschen kürzer:

Code: Alles auswählen

while True:
   zaehler1 = raw_input()
   if zaehler1 == 0:
      print "bitte nochmal eingeben"
   else:
      <dein algorithmus>
      break

Verfasst: Mittwoch 29. März 2006, 20:32
von Leonidas
icepacker hat geschrieben:noch ein bisschen kürzer:

Code: Alles auswählen

while True:
   zaehler1 = raw_input()
   if zaehler1 == 0:
      print "bitte nochmal eingeben"
   else:
      <dein algorithmus>
      break
Wird wohl kaum gehen, da raw_input() immer Strings ausgibt, und ein string ist nie == 0. Aber das ist ein geringes Problem.

Ich würde es so machen (wenn du nur Zahlen annehmen willst, bei Buchstaben sieht es noch etwas anders aus):

Code: Alles auswählen

while True:
    zaehler1 = raw_input()
    try:
        zaehler1 = int(zaehler1)
        
        if zaehler1 == 0:
            print "bitte nochmal eingeben"
        else:
            print 'out'
            break
        
    except ValueError:
        print "bitte nochmal eingeben"

Verfasst: Mittwoch 29. März 2006, 21:05
von Python 47
oder so:

Code: Alles auswählen

while True:
   zahl=raw_input('Zahl eingeben:')
   if zahl=='0':
      print 'Bitte nochmal eine Zahl eingeben'
   else:
      break

Verfasst: Mittwoch 29. März 2006, 23:30
von modelnine
Noch kürzer:

Code: Alles auswählen

zahl = 0
while zahl <= 0:
    try:
        zahl = int(raw_input("Bitte positive Zahl eingeben:"))
    except ValueError:
        pass

Verfasst: Donnerstag 30. März 2006, 10:34
von Python 47
Naja sehr viel kürzer ist dein Code nicht als meiner! :lol:

Verfasst: Donnerstag 30. März 2006, 10:57
von modelnine
Doch, denn er macht gleich zwei Dinge mehr: 1) gucken ob es tatsächlich eine Zahl ist die eingegeben wird, 2) gucken ob die Zahl null oder negativ ist (was ja auch keinen Sinn macht für einen Schleifenzähler)...

Verfasst: Donnerstag 30. März 2006, 12:09
von D0mino
Klasse, danke für die vielen Vorschläge! :D