Seite 1 von 1

Funktion zum Einlesen von Integer-Werten

Verfasst: Donnerstag 7. August 2008, 20:49
von BastiL
Hallo zusammen,

ich schreibe gerade ein kleines User-Interface bei dem ich mehrmals User-Input einlesen muss. Der Input soll ein Integer-Wert sein der zwischen 1 und einer variablen Obergrenze liegt. Ich möchte dazu eine Funktion schreiben um den Input zu prüfen. Ich versuche etwas in diese Richtung:

Code: Alles auswählen

def Integercheck(Input, Grenze):
     while int(Input) < 1 or int(Input) > Grenze:
    if int(Input) >= 1 < and int(Input) <= Grenze:
        return Input
    else:
         Input = raw_input("Bitte nochmal versuchen (1-", Grenze, ")"

Eingabe = raw_input("Bitte Eingabe (1-", Grenze, ")"
Integer = Integercheck(Eingabe, Limit)
Das ganze hat einige Probleme:
- raw_input kommt mit dem Syntax so nicht klar, wie kann ich da ne Variable reinbringen?
- Der Check mit der while-Schleife kommt mir auch nicht so elegant vor. Wie macht man so etwas geschickter?
- Probleme gibt es auch, wenn der EIngabewert keine Zahl ist. Dann stürzt das ganze beim ersten Umwandlungsversuch ab. We kann ich so etwas abfangen?

Danke.

Verfasst: Donnerstag 7. August 2008, 21:06
von Area51
Nimm anstatt raw_input() nur input(), dann können nur Zahlen eingegeben werden :)

Ich weiß nicht, ob das in Python möglich ist (in PHP ist es das), aber ich denke mal, man kann das while so zusammenfassen:

Code: Alles auswählen

while int(Input) (< 1 or > Grenze):

Verfasst: Donnerstag 7. August 2008, 21:11
von DasIch
Area51 hat geschrieben:Nimm anstatt raw_input() nur input(), dann können nur Zahlen eingegeben werden :)
Nein, dann wird ausgeführt was eingegeben wird, deswegen besser vergessen dass es input() überhaupt gibt.

Verfasst: Donnerstag 7. August 2008, 21:12
von HWK
Z.B. so:

Code: Alles auswählen

def integercheck(limit):
    while True:
        try:
            input_ = int(raw_input('Bitte Eingage 1-%i: ' % limit))
        except ValueError:
            continue
        if 1 <= input_ <= limit:
            return input_

print 'Eingabe %i' % integercheck(20)
MfG
HWK

Verfasst: Donnerstag 7. August 2008, 21:14
von Trundle
Area51 hat geschrieben:Nimm anstatt raw_input() nur input(), dann können nur Zahlen eingegeben werden :)
Eben genau das _nicht_ machen. Bei ``input`` kann erheblich mehr als "nur Zahlen" eingegeben werden, siehe dazu auch zahllose Forenbeiträge hier im Forum.

Auf jeden Fall muss noch ein ``ValueError`` abgefangen werden, der auftreten kann, wenn der Anwender keine Zahl eingibt. Und ansonsten würde ich die Eingabe nur einmal umwandeln und dann mit dem umgewandelten Wert arbeiten. Und ansonsten "String Formatting Operations" anschauen.

Edit: Viel zu lahm.

Verfasst: Donnerstag 7. August 2008, 21:17
von abgdf
Hallo,

ich würd's so machen (aber eigentlich die Variablennamen klein schreiben):

Code: Alles auswählen

Grenze = 10

inputstr = "Bitte Eingabe (1-" + str(Grenze) + "): "

Eingabe = 0

while Eingabe == 0:

    Eingabe = raw_input(inputstr)

    if Eingabe.isdigit() and int(Eingabe) >= 1 and int(Eingabe) <= Grenze:
        Eingabe = int(Eingabe)
    else:
        Eingabe = 0
Gruß

Verfasst: Donnerstag 7. August 2008, 21:19
von BastiL
Trundle hat geschrieben: Auf jeden Fall muss noch ein ``ValueError`` abgefangen werden, der auftreten kann, wenn der Anwender keine Zahl eingibt.
Wie mache ich das?

Edit: Habe es schon gesehen, danke.

Verfasst: Donnerstag 7. August 2008, 21:22
von DasIch
BastiL hat geschrieben:Wie mache ich das?
Schau dir mal HWKs Posting an.

Verfasst: Donnerstag 7. August 2008, 21:23
von Trundle
So, wie beispielsweise im Posting von HWK oder allgemein:

Code: Alles auswählen

try:
    # Hier der Code, bei dem der ValueError auftreten kann
except ValueError:
    # Hier der Code, was dann passieren soll
Das ist aber IMHO elementares Basiswissen.

Edit: Heute bin ich einfach nur zu lahm.

Verfasst: Montag 11. August 2008, 10:36
von BastiL
Danke für die Hilfe. So wird das laufen, das war genau das was ich gesucht habe.