python 사용법 변수가 정수인지 아닌지 확인




matplotlib 사용법 (24)

지금까지 제안 된 모든 대답은 double (파이썬의 실수는 실제로 두 배입니다) 또한 정수가 될 수 있다는 사실을 놓치고있는 것 같습니다 (소수점 뒤에 아무 것도없는 경우). 이것을 확인하기 위해 double에 내장 된 is_integer() 메서드를 사용합니다.

예 (for 회 돌이에서 매 x 번째 무언가를하기) :

for index in range(y): 
    # do something
    if (index/x.).is_integer():
        # do something special

편집하다:

이 메서드를 호출하기 전에 항상 float로 변환 할 수 있습니다. 세 가지 가능성 :

>>> float(5).is_integer()
True
>>> float(5.1).is_integer()
False
>>> float(5.0).is_integer()
True

그렇지 않으면 Agostino가 말한 것처럼 이것이 int인지 먼저 확인할 수 있습니다.

def is_int(val):
    if type(val) == int:
        return True
    else:
        if val.is_integer():
            return True
        else:
            return False

변수가 정수인지 어떻게 확인합니까?


값이 필요한 경우 operator.index ( __index__ 특수 메서드)를 사용하는 것이 좋습니다. 정수로 안전하게 캐스팅 할 수있는 모든 유형에서 작동해야하기 때문입니다. 즉, 실수, 정수, 정수형 추상 클래스를 구현하지 않는 멋진 정수 클래스도 오리 입력으로 작동합니다.

operator.index 는 목록 색인 작성 등에 사용되는 것입니다. 제 의견으로는 훨씬 더 많이 사용하거나 홍보해야합니다.

사실 난 정수 값을 얻을 수있는 유일한 올바른 방법이라고 주장하고 싶다면 부동 소수점, 자르기 문제 등으로 거부되고 모든 정수 유형 (예 : numpy 등)에서도 작동합니다. 그들은 추상 클래스를 (아직) 지원하지 않을 수도있다.

이것은 __index__소개 된 것 입니다!


다음은 여기에 언급 된 여러 가지 방법에 대한 요약입니다.

  • int(x) == x
  • try x = operator.index(x)
  • isinstance(x, int)
  • isinstance(x, numbers.Integral)

정수 값을 갖는 다양한 수치 유형에 적용하는 방법은 다음과 같습니다.

당신은 그들이 100 % 일치하지 않는 것을 볼 수 있습니다. 분수와 Rational은 개념적으로 동일하지만, 하나는 .index() 메소드를 제공하고 다른 하나는 제공하지 않습니다. 복잡한 부분은 실수 부분이 정수이고 허수 부분이 0 인 경우에도 int로 변환하는 것을 싫어합니다.

( np.int8|16|32|64(5)np.int8(5) , np.int32(5) 등이 모두 동일하게 작동 함을 의미합니다)


유형 검사를 수행하는 또 다른 옵션이 있습니다.

예 :

  n = 14
  if type(n)==int:
  return "this is an int"

문자열이 숫자로만 구성되어 있는지 확인하려고하지만 int로 변환해도 도움이되지 않으면 항상 regex를 사용할 수 있습니다.

import re
x = "01234"
match = re.search("^\d+$", x)
try: x = match.group(0)
except AttributeError: print("not a valid number")

Result: x == "01234"

이 경우 x가 "hello"이면 숫자 유형으로 변환하면 ValueError가 발생하지만 데이터는 프로세스에서 손실됩니다. 정규 표현식을 사용하고 AttributeError를 잡으면 문자열의 숫자 문자를 확인할 수 있습니다 (예 : leading 0).

AttributeError를 던지기를 원하지 않고보다 구체적인 문제를 찾고 싶다면 정규식을 다양하게하고 일치를 확인할 수 있습니다.

import re
x = "h01234"
match = re.search("\D", x)
if not match:
    print("x is a number")
else:
    print("encountered a problem at character:", match.group(0))

Result: "encountered a problem at character: h"

실제로 예외를 사용하지 않고 문제가 발생한 위치를 보여줍니다. 다시 말하지만, 이것은 유형을 테스트하는 것이 아니라 문자 자체를 테스트하는 것입니다. 이렇게하면 형식을 확인하는 것보다 훨씬 유연성이 뛰어납니다. 특히 형식간에 변환을 수행하면 0을 선행하는 것처럼 중요한 문자열 데이터가 손실 될 수 있습니다.


모든 소프트웨어에서 사용하는 간단한 방법은 이것입니다. 변수가 숫자로 구성되었는지 확인합니다.

test = input("Enter some text here: ")
if test.isdigit() == True:
   print("This is a number.")
else:
   print("This is not a number.")

실제로 확인해야하는 경우 구체적인 클래스가 아닌 추상적 인 기본 클래스 를 사용하는 것이 좋습니다. 다음을 의미하는 정수의 경우 :

>>> import numbers
>>> isinstance(3, numbers.Integral)
True

이것은 검사를 int 또는 intlong 제한하지 않고 정수로 작동하는 다른 사용자 정의 유형을 작동하게합니다.


변수가 문자열과 같이 입력되면 (예 : '2010' ) :

if variable and variable.isdigit():
    return variable #or whatever you want to do with it. 
else: 
    return "Error" #or whatever you want to do with it.

이것을 사용하기 전에 try/except(int(variable)) 확인해 보았지만 더 긴 코드였습니다. 자원이나 속도의 사용에 차이가 있는지 궁금합니다.


int 함수를 사용하여 도움을 받으십시오.

intchecker = float(input('Please enter a integer: '))
intcheck = 0
while intcheck != 1:
    if intchecker - int(intchecker) > 0:
        intchecker = float(input("You didn't enter a integer. "
                                 "Please enter a integer: "))
    else:
        intcheck = 1
print('you have entered a integer')

단순한 것만 큼 복잡한 것은 아닙니다.

if type(var) is int:

당신이 int 가 아닌 경우에 이것을 할 수 있습니다 :

var = 15.4
if(var - int(var) != 0):
    print "Value is not integer"

여기에 관련 질문을 찾았습니다.

Python 개발자는 유형을 확인하지 않고 유형별 작업을 수행하고 TypeError 예외를 catch하는 것을 선호합니다. 그러나 당신이 유형을 모르는 경우에 당신은 뒤에 오는 것있다.

>>> i = 12345
>>> type(i)
<type 'int'>
>>> type(i) is int
True

그러한 기본적이고 유효하며 믿을만한 질문이 제기 될 때 그러한 열띤 토론이 일어나기를 정말 놀라워합니다.

어떤 사람들은 int (및 long )에 대한 유형 검사가 큰 십진수가있는 느슨한 경우를 지적했습니다. 맞아.

어떤 사람들은 '그냥 x + 1 을해야하고 실패했는지 확인해야한다고 지적했습니다. 음, 한 가지로, 이것은 float에서도 작동합니다. 반면에, 확실히 숫자가 아니지만 + 연산자를 어떤 식 으로든 정의하는 클래스를 만드는 것은 쉽습니다.

나는 당신이 유형을 확인해서는 안된다는 것을 강력하게 선언하는 많은 게시물과 확답이 없습니다. 글쎄, GvR은 순수한 이론에서 옳을 수도있는 것을 말했지만 실제로는 isinstance 종종 유용한 목적으로 사용됩니다 (예전에는 링크가 없으므로 GvR에서 관련 정보를 읽을 수 있습니다. 이 같은 게시물에 문제가 있음).

재미있는 것은 얼마나 많은 사람들이 OP의 의도는 주어진 x유형 이 숫자 정수형인지를 확인하는 것이라고 생각하는 것입니다. OP의 단어를 사용할 때 일반적으로 의미하는 것입니다 : x 가 정수를 나타내는 지 여부 . 이것은 매우 중요 할 수 있습니다. 누군가에게 얼마나 많은 항목을 선택할지 묻는 것처럼, 음수가 아닌 정수를 다시 확인할 수 있습니다. 이와 같은 사용 사례는 많습니다.

그것은 제 의견으로는 (1) 타입 검사가 ONE이고 프로그램의 정확성을 측정하는 경우가 많다는 것을 알아야합니다. (2) 종종 의미있는 값으로 묶여 있고 값을 벗어납니다. 말도 안돼. 때로는 일부 간헐적 인 값이 의미가 있습니다. 예를 들어 모든 숫자를 고려할 때, 실제의 (복잡하지 않은) 정수 만 주어진 경우에 가능할 수 있습니다.

재미 아닌 사람은 x == math.floor( x ) 확인하는 것을 언급하는 것 같습니다. 그게 큰 10 진수 클래스에서 오류를 발생 시킨다면, 아마도 OOP 패러다임을 다시 생각할 때입니다. 목록 인덱스로 사용되기 위해 너무도 명백하지는 않지만 정수가 아닌 값을 사용하는 방법을 고려하는 PEP 357 이 있습니다. 내가 솔루션을 좋아하는지 확실하지 않다.


번호가 정사각형인지 확인하고이 문제가 발생했는지 확인하기 위해 프로그램을 작성했습니다. 사용한 코드는 다음과 같습니다.

import math
print ("this program will tell you if a number is square")
print ("enter an integer")
num = float(input())
if num > 0:
    print ("ok!")
    num = (math.sqrt(num))
    inter = int(num)
    if num == inter:
            print ("It's a square number, and its root is")
            print (num)
    else:
            print ("It's not a square number, but its root is")
            print (num)
else:
    print ("That's not a positive number!")

숫자가 정수인지 확인하려면 사용자 입력을 루팅 한 값에서 반올림 한 정수 (값으로 저장 됨)로 변환 한 후 두 숫자가 같으면 첫 번째 숫자가 정수 여야합니다. 응답 할 프로그램. 이 일을하는 가장 짧은 방법은 아니지만 그것은 나를 위해 일했습니다.


#######################################
# Value_Is_Int
#######################################
def value_is_int(value):
    try:
        tempVal = int(value)
        return True
    except:
        return False

이 함수를 호출하십시오.

if value_is_int(value):
    print "Integer"
else:
    print "Not integer"

이 작업을 수행해야하는 경우

isinstance(<var>, int)

파이썬 2.x에 있지 않는 한 원하는 경우

isinstance(<var>, (int, long))

type 사용하지 마십시오. 다형성의 모든 융통성을 차단하기 때문에 파이썬에서 옳은 대답은 거의 없습니다. 예를 들어, int 를 서브 클래스 화한다면, 새로운 클래스는 int 로 등록해야합니다.

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

이것은 파이썬의 강력한 다형성을 고수합니다 : 하나가되도록 요구하는 대신 int 와 같이 동작하는 모든 객체를 허용해야합니다.

그러나

하지만 고전적인 파이썬 정신은 허가보다는 용서를 구하는 것이 더 쉽다는 것 입니다. 즉, x 가 정수인지 확인하지 마십시오. 그렇지 않으면 예외 결과를 catch한다고 가정합니다.

try:
    x += 1
except TypeError:
    ...

이러한 생각은 추상 기본 클래스를 사용하여 서서히 추월되고 있습니다.이 기본 클래스를 사용하면 특별히 생성 된 클래스에서 상속 받아 객체에 있어야 할 속성 (곱하기? 배가를 추가)을 정확하게 등록 할 수 있습니다. 이것이 가장 필요한 솔루션이 될 것입니다. 필요한 속성을 가진 객체를 정확하게 허용하기 때문입니다. 그러나 문서를 사용하는 방법을 읽어야합니다.


이를 수행하는 간단한 방법은 1로 나누기에서 나머지가 0인지 아닌지 직접 확인하는 것입니다.

if this_variable % 1 == 0:
    list.append(this_variable)
else:
    print 'Not an Integer!'

>>> isinstance(3, int)
True

자세한 내용은 here 를 참조 here .

int 와 같은 속성을 찾는 경우에는 이것이 도움이되지 않습니다. 이 경우에는 long 확인하고 싶을 수도 있습니다.

>>> isinstance(3L, (long, int))
True

이 종류의 검사를 파이썬 소스의 배열 / 인덱스 유형에 대해 보았지만 C 외부에서 볼 수는 없다고 생각합니다.

토큰 그래서 답장 : 당신은 그 유형을 확인해야합니까? 처리 할 수없는 유형을 전달하지 않거나 잠재적 인 코드 재사용자를 능가하려고 시도하지 마십시오. 함수에 int를 전달하지 않는 좋은 이유가있을 수 있습니다.


문자열로 주어진 정수와 정수를 확인하려고하는보다 일반적인 접근법은 다음과 같습니다.

def isInt(anyNumberOrString):
    try:
        int(anyNumberOrString) #to check float and int use "float(anyNumberOrString)"
        return True
    except ValueError :
        return False

isInt("A") #False
isInt("5") #True
isInt(8) #True
isInt("5.88") #False *see comment above on how to make this True

x = n ** (1.0 / m) 인 경우를 생각해 보자. 여기서 n = 10 ** 5, m = 5이다. 파이썬에서 x는 부동 소수점 산술 연산 때문에 정수가 아닌 10.000000000000002가됩니다.

그래서 나는

if str(float(x)).endswith('.0'): print "It's an integer."

이 코드로 테스트했습니다 :

for a in range(2,100):
    for b in range(2,100):
        x = (a**b)**(1.0/b)
        print a,b, x, str(float(x)).endswith('.0')

모든 a와 b에 대해 True를 출력합니다.


Python 버전 (2.x vs 3.x)을 고려하지 않으려면 six ( PyPI )를 사용하고 integer_types 속성을 사용하십시오.

import six

if isinstance(obj, six.integer_types):
    print('obj is an integer!')

six (매우 가벼운 단일 파일 모듈) 내에서이 작업을 수행하는 것입니다.

import sys
PY3 = sys.version_info[0] == 3

if PY3:
    integer_types = int,
else:
    integer_types = (int, long)

파일에서 읽고 배열이나 사전에 여러 데이터 유형 값이있는 경우 다음이 유용합니다. 변수가 int (또는 적용하려는 다른 데이터 유형)로 유형 캐스트 ​​될 수 있는지 여부를 확인하십시오.

try :
    int(a);
    #Variable a is int
except ValueError : 
    # Variable a is not an int

다음은 정수를 결정하는 간단한 예제입니다.

def is_int(x):
    print round(x),
    if x == round(x):
        print 'True',
    else:
        print 'False'

is_int(7.0)   # True
is_int(7.5)   # False
is_int(-1)    # True    

확인하려는 값이 아래에 표시된 정수로 캐스팅 된 것과 동일한 지 확인하는 것이 가장 좋은 이유는 무엇입니까?

def isInt(val):
    return val == int(val)






python