Code: Alles auswählen
str.isdigit()
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
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