Funktion zum Einlesen von Integer-Werten

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
BastiL
User
Beiträge: 116
Registriert: Montag 7. Juli 2008, 20:22

Donnerstag 7. August 2008, 20:49

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.
Area51
User
Beiträge: 27
Registriert: Donnerstag 24. Juli 2008, 11:38
Wohnort: Heidelberg
Kontaktdaten:

Donnerstag 7. August 2008, 21:06

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):
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 7. August 2008, 21:11

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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 7. August 2008, 21:12

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
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Donnerstag 7. August 2008, 21:14

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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
abgdf

Donnerstag 7. August 2008, 21:17

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ß
BastiL
User
Beiträge: 116
Registriert: Montag 7. Juli 2008, 20:22

Donnerstag 7. August 2008, 21:19

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.
DasIch
User
Beiträge: 2465
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 7. August 2008, 21:22

BastiL hat geschrieben:Wie mache ich das?
Schau dir mal HWKs Posting an.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Donnerstag 7. August 2008, 21:23

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.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
BastiL
User
Beiträge: 116
Registriert: Montag 7. Juli 2008, 20:22

Montag 11. August 2008, 10:36

Danke für die Hilfe. So wird das laufen, das war genau das was ich gesucht habe.
Antworten