입력은 다음과 같습니다.
a="50"
b=50
c=50.1
d="50.1"
1 일반 입력 :
이 기능의 입력은 모든 것이 될 수 있습니다!
주어진 변수가 숫자인지 확인합니다. 숫자 문자열은 선택적 부호, 자릿수, 선택적 10 진수 부분 및 선택적 지수 부분으로 구성됩니다. 따라서 + 0123.45e6은 유효한 숫자 값입니다. 16 진법 (예 : 0xf4c3b00c) 및 이진법 (예 : 0b10100111001) 표기법은 허용되지 않습니다.
is_numeric 함수
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
테스트:
>>> is_numeric("54")
True
>>> is_numeric("54.545")
True
>>> is_numeric("0x45")
True
is_float 함수
주어진 변수가 실수인지 확인합니다. 부동 문자열은 선택적 부호, 자릿수, ...로 구성됩니다.
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
테스트:
>>> is_float("5.4")
True
>>> is_float("5")
False
>>> is_float(5)
False
>>> is_float("5")
False
>>> is_float("+5.4")
True
뭐가 ast 입니까?
2- 가변 콘텐츠가 문자열 :
사용 str.isdigit () 메소드
>>> 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- 숫자 입력 :
int 값을 감지하십시오.
>>> isinstance("54", int)
False
>>> isinstance(54, int)
True
>>>
플로트 감지 :
>>> isinstance("45.1", float)
False
>>> isinstance(45.1, float)
True