Seite 1 von 1

von stdin lesen

Verfasst: Freitag 23. Juni 2006, 12:30
von Frank
Hi,

eigentlich hätte ich gestern Abend ins Bett sollen. Allerdings mußte ich mich zu später Stunde entschließen nun doch mal ein wenig Python zu schnuppern. Nu bin ich mit Kaffee vollgepumpt ;) und hab eine kleine Sorge:

Ist es ratsam, Integer die von stdin kommen generell als String zu lesen und zu casten? Ein foo = int (raw_input ('Insert :')) läßt sich prima durch faule Eingaben abschießen. Oder hab ich nur nicht die richtige Funktion gefunden?


Gruß, Frank

Re: von stdin lesen

Verfasst: Freitag 23. Juni 2006, 12:41
von gerold
Frank hat geschrieben:läßt sich prima durch faule Eingaben abschießen.
Hi Frank!

So nicht :-) :

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

def eingabe():
    prompt = "Bitte geben Sie eine Ganzzahl ein (0 beendet das Programm): "
    retval = raw_input(prompt)
    try:
        return int(retval)
    except:
        return eingabe()
    
def main():
    while True:
        intval = eingabe()
        if intval == 0:
            break
        else:
            print "Ergebnis: %s" % (intval * intval)
            print
    
if __name__ == "__main__":
    main()
mfg
Gerold
:-)

Verfasst: Freitag 23. Juni 2006, 12:47
von pr0stAta
Wenn du dir sicher sein kannst, das ein Integer kommt,
kannst auch auch input() statt raw_input() verwenden.
um aus dem wiki zu zitieren:

raw_input gibt immer den unverarbeiteten Eingabestring (Typ: str) zurück
input hingegen wertet den String vor der Rückgabe aus
Der Rückgabewert ist daher nicht unbedingt vom Typ str

Code: Alles auswählen

>>> import types
>>> eingabe = raw_input("Eingabe: ")
Eingabe: 100
>>> types.TypeType(eingabe)
<type 'str'>
>>> eingabe = input("Eingabe: ")
Eingabe: 100
>>> types.TypeType(eingabe)
<type 'int'>
*edit* Nochmal kurz als Warnung möchte ich auf den Artikel bei
Wikipedia verlinken. Input() ist nicht immer ratsam:
http://de.wikibooks.org/wiki/Python-Pro ... Datentypen
relativ weit unten ist raw_input und input erklärt

Verfasst: Freitag 23. Juni 2006, 13:32
von gerold

Verfasst: Freitag 23. Juni 2006, 13:48
von Frank
@Gerold

Ah, die try/except-Geschichte hab ich gesucht. Vielen Dank!


@pr0stAta
pr0stAta hat geschrieben:Wenn du dir sicher sein kannst, das ein Integer kommt...
Indianisches IT-Sprichwort: Nur geprüfte Daten sind gute Daten. :)


Gruß, Frank

Verfasst: Freitag 23. Juni 2006, 14:04
von pr0stAta
Indianisches IT-Sprichwort: Nur geprüfte Daten sind gute Daten.
hehe das stimmt, daher ist der weg von gerold definitv der bessere. safety first ;) man sollte sich input auch gar nicht erst angewöhnen, aber wenn man nur kleine programme für sich selber schreibt, dürfte es meist
auch ausreichen :>