Giriş aşağıdaki gibi olabilir:
a="50"
b=50
c=50.1
d="50.1"
1-Genel giriş:
Bu fonksiyonun girişi her şey olabilir!
Verilen değişkenin sayısal olup olmadığını bulur. Sayısal dizeler isteğe bağlı işaret, herhangi bir sayı basamağı, isteğe bağlı ondalık bölüm ve isteğe bağlı üstel bölümden oluşur. Böylece + 0123.45e6 geçerli bir sayısal değerdir. Onaltılık (örn. 0xf4c3b00c) ve ikili (örn. 0b10100111001) gösterimine izin verilmez.
is_numeric işlevi
import ast
import numbers
def is_numeric(obj):
if isinstance(obj, numbers.Number):
return True
elif isinstance(obj, str):
nodes = list(ast.walk(ast.parse(obj)))[1:]
if not isinstance(nodes[0], ast.Expr):
return False
if not isinstance(nodes[-1], ast.Num):
return False
nodes = nodes[1:-1]
for i in range(len(nodes)):
#if used + or - in digit :
if i % 2 == 0:
if not isinstance(nodes[i], ast.UnaryOp):
return False
else:
if not isinstance(nodes[i], (ast.USub, ast.UAdd)):
return False
return True
else:
return False
Ölçek:
>>> is_numeric("54")
True
>>> is_numeric("54.545")
True
>>> is_numeric("0x45")
True
is_float işlevi
Verilen değişkenin kayan noktalı olup olmadığını bulur. şamandıra dizeleri isteğe bağlı işareti, herhangi bir sayı basamak, oluşur ...
import ast
def is_float(obj):
if isinstance(obj, float):
return True
if isinstance(obj, int):
return False
elif isinstance(obj, str):
nodes = list(ast.walk(ast.parse(obj)))[1:]
if not isinstance(nodes[0], ast.Expr):
return False
if not isinstance(nodes[-1], ast.Num):
return False
if not isinstance(nodes[-1].n, float):
return False
nodes = nodes[1:-1]
for i in range(len(nodes)):
if i % 2 == 0:
if not isinstance(nodes[i], ast.UnaryOp):
return False
else:
if not isinstance(nodes[i], (ast.USub, ast.UAdd)):
return False
return True
else:
return False
Ölçek:
>>> is_float("5.4")
True
>>> is_float("5")
False
>>> is_float(5)
False
>>> is_float("5")
False
>>> is_float("+5.4")
True
nedir ast ?
2- Değişken içeriğin String olduğundan eminseniz :
Kullanım str.isdigit () metodu
>>> a=454
>>> a.isdigit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'isdigit'
>>> a="454"
>>> a.isdigit()
True
3-Sayısal giriş:
int değerini tespit et:
>>> isinstance("54", int)
False
>>> isinstance(54, int)
True
>>>
şamandıra tespit:
>>> isinstance("45.1", float)
False
>>> isinstance(45.1, float)
True