Verfasst: Freitag 17. Juli 2009, 20:10
Glückwunsch, Du hast das von mir oben schon erwähnte
neu implementiert!
Code: Alles auswählen
str.isdigit()
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
str.isdigit()
Code: Alles auswählen
def int_input(prompt="Gimme an Integer! "):
try:
return int(input(prompt)
except ValueError:
print("I said Integer!")
return int_input()
Code: Alles auswählen
# überprüft, ob Nutzereingaben den Typen "int"
# oder "float" entsprechen
# überprüft auf Typ "integer" und gibt wert zurück
def int_check (string):
fehler = 1
while fehler == 1:
wert = input (string)
try:
wert = int (wert)
fehler = 0
return wert
except:
print ("FEHLER: erwartet Ganzzahl")
print ("")
# überprüft auf Typ "float" und gibt wert zurück
# Trennzeichen Komma "," wird in Punkt "." umgewandelt!
def float_check (string):
fehler = 1
while fehler == 1:
wert = input (string)
try:
wert = wert.replace (",", ".")
wert = float (wert)
fehler = 0
return wert
except:
print ("FEHLER: erwartet Gleitkommazahl")
print ("")
Code: Alles auswählen
import input_check
x = input_check.int_check ("bitte eine ganze Zahl eingeben: ")
y = input_check.float_check ("bitte eine Gleitkommazahl eingeben: ")
Besonders bei der Arbeit mit numpy führt kein Weg an isinstance vorbei:problembär hat geschrieben:Zeig' doch bitte mal ein Beispiel, in dem das mit dem Konstrukt, das ich genannt habe, nicht funktioniert.
Code: Alles auswählen
>>> import numpy
>>> x = numpy.arange(10).sum()
>>> x
45
>>> type(x)
<type 'numpy.int32'>
>>> type(x) == int
False
>>> isinstance(x, int)
True
Code: Alles auswählen
from functools import partial
def checked_input(convert_func, error_message, prompt):
while True:
try:
return convert_func(raw_input(prompt))
except Exception, error:
print error_message, error
print
def float_convert(string):
return float(string.replace(',', '.'))
int_input = partial(checked_input, int, 'Expected integer')
float_input = partial(checked_input, float_convert, 'Expected floating point')
Damit kann man nicht prüfen ob eine Zahl ein integer ist.problembär hat geschrieben:Glückwunsch, Du hast das von mir oben schon erwähnteneu implementiert!Code: Alles auswählen
str.isdigit()
Code: Alles auswählen
>> "-1".isdigit()
> False
>> int("-1")
> -1
Code: Alles auswählen
def isint(s):
if s.isdigit() or len(s) > 1 and s[0] == "-" and s[1:].isdigit():
return True
else:
return False
print isint("-1234")
Code: Alles auswählen
def isint(s):
return s.isdigit() or len(s) > 1 and s[0] == "-" and s[1:].isdigit()
# oder als lambda:
# isint = lambda s: s.isdigit() or len(s) > 1 and s[0] == "-" and s[1:].isdigit()
print isint("-1234")
Code: Alles auswählen
In [25]: isint('+1')
Out[25]: False
In [26]: int('+1')
Out[26]: 1
Code: Alles auswählen
def isint(s):
return s[s.startswith('-'):].isdigit()
Code: Alles auswählen
>>> isint("- 1")
False
>>> int("- 1")
-1
>>> isint(" -1")
False
>>> int(" -1")
-1
>>> isint(" 1")
False
>>> int(" 1")
1
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
import re
a = ('','foo 30','.20','20.',',20','20,','1.3E2', '2..3','++3','2.3.',
'10','..3','0','100','100.23','1,100.23','-3E-2', "- 15.3", " 24.32 ", "+ 32. ", " - 21,23 ", "-.", "-")
patobj = re.compile("^ *[+-]? *(\d+|\d+\.\d*|\d*\.\d+) *$")
for i in a:
if patobj.search(i):
print i + " is True."
else:
print i + " is False."
try:
b = float(i)
print i + " is Good."
except:
print i + " is Bad."
print
Wieso auch einfach wenn es auch kompliziert und unvollständig geht?problembär hat geschrieben:Wie oben schon gesagt, müßte man am besten wohl einen regulären Ausdruck nehmen.
Außerdem lasse ich meine Anwendung sich wenn möglich nicht vorsätzlich aufhängen (try: ... except: ....), vor allem wenn ich meinen Code auch mal in andere Sprachen bringen will, die das nicht unterstützen.>>USe an eval, it's correct (by definition) and avoids possible errors
>QA Editors note: This solution doesn't work as described.
try-except ist bei Python allerdings vollkommen üblich und sogar ausdrücklich erwünscht (Stichwort: EAFP).problembär hat geschrieben:Außerdem lasse ich meine Anwendung sich wenn möglich nicht vorsätzlich aufhängen (try: ... except: ....), vor allem wenn ich meinen Code auch mal in andere Sprachen bringen will, die das nicht unterstützen.
Ist soweit nicht unvollständig. Bei den Leerzeichen war ich nur etwas großzügig. Das heißt, vor der Umwandlung in float muß man noch die Leerzeichen rausziehen:und unvollständig
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-
import re
a = ('','foo 30','.20','20.',',20','20,','1.3E2', '2..3','++3','2.3.',
'10','..3','0','100','100.23','1,100.23','-3E-2', "- 15.3", " 24.32 ", "+ 32. ", " - 21,23 ", "-.", "-")
patobj = re.compile("^ *[+-]? *(\d+|\d+\.\d*|\d*\.\d+) *$")
for i in a:
if patobj.search(i):
print i + " is True."
i = i.replace(" ", "")
i = float(i)
print "Type of i is now: " + str(type(i))
else:
print i + " is False."
print