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
von stdin lesen
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Frank!Frank hat geschrieben:läßt sich prima durch faule Eingaben abschießen.
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()
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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
*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
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'>
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
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi!pr0stAta hat geschrieben:Input() ist nicht immer ratsam
Dazu habe ich noch paar Links:
http://www.python-forum.de/post-31806.html#31806
http://www.python-forum.de/post-30204.html#30204
http://www.python-forum.de/post-38274.html#38274
http://www.python-forum.de/post-28277.html#28277
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
@Gerold
Ah, die try/except-Geschichte hab ich gesucht. Vielen Dank!
@pr0stAta
Gruß, Frank
Ah, die try/except-Geschichte hab ich gesucht. Vielen Dank!
@pr0stAta
Indianisches IT-Sprichwort: Nur geprüfte Daten sind gute Daten.pr0stAta hat geschrieben:Wenn du dir sicher sein kannst, das ein Integer kommt...
Gruß, Frank
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 meistIndianisches IT-Sprichwort: Nur geprüfte Daten sind gute Daten.
auch ausreichen :>