जांचें कि क्या कोई नंबर इंट या फ्लोट है


199

यहाँ है कि मैं यह कैसे किया:

inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
    print "this number is an int"
else:
    print "this number is a float"

ऐसा कुछ।
वहाँ किसी भी अच्छे तरीके से ऐसा करने के लिए देख रहे हैं?


4
चाल को एसओ पर खोज करना है अन्य सभी बार यह सवाल पूछा गया था। उनमें से प्रत्येक समान, मानक उत्तर का दोहराव प्रदान करेगा।
एस.लॉट

1
... और आपको जानने की आवश्यकता क्यों है?
कार्ल केनटेल


@Wooble: यह बड़ी संख्या के लिए विफल रहता है ।
JFS

assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)जब मुझे Google के साथ यह प्रश्न मिला तो मैं उसे ढूंढ रहा था।
मार्टिन थोमा

जवाबों:


283

उपयोग isinstance

>>> x = 12
>>> isinstance(x, int)
True
>>> y = 12.0
>>> isinstance(y, float)
True

इसलिए:

>>> if isinstance(x, int):
        print 'x is a int!'

x is a int!

_EDIT: _

जैसा कि बताया गया है, लंबे पूर्णांक के मामले में, ऊपर काम नहीं करेगा। तो आपको करने की आवश्यकता है:

>>> x = 12L
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x, int)
False

issubclassअधिक सामान्य नहीं होगा ?
डेविड हेफर्नन

3
@ डेविड: issubclassएक त्रुटि होगी, क्योंकि यह कक्षाओं पर काम करता है। isinstanceयदि दी गई वस्तु किसी वर्ग या उस वर्ग के उपवर्गों में से एक है , तो यह पूरी तरह से सामान्य है। मुझे मालूम होता है कि isinstance(obj, cls)के बराबर हैissubclass(obj.__class__, cls)

7
यह अन्य पूर्णांक प्रकारों के लिए काम नहीं करता है, उदाहरण के लिए यदि x = 12L। मुझे पता है कि केवल intइसके लिए कहा गया था, लेकिन ऐसा होने से पहले अन्य समस्याओं को ठीक करना अच्छा है। सबसे सामान्य शायद है isinstance(x, numbers.Integral)
स्कॉट ग्रिफिथ्स

9
पायथन 2 के लिए, प्रत्यक्ष डबल चेक भी है isinstance(x, (int, long)):।
एरिक ओ लेबिगॉट

1
चेतावनी: बूल भी पूर्णांकों के उदाहरण हैं। देखेंisinstance(True, int)
२२:२oon बजे जत्सुन्होवेन

93

मुझे @ Ninjagecko का जवाब सबसे ज्यादा पसंद है।

यह भी काम करेगा:

पायथन 2.x के लिए

isinstance(n, (int, long, float)) 

अजगर 3.x लंबे समय तक नहीं है

isinstance(n, (int, float))

वहाँ भी टाइप कर रहा है जटिल जटिल संख्या के लिए


एक सिडेनोट, क्योंकि बूलियंस ट्रू (जैसे isinstance(False, (int, float)) = True) को हल करेगा , मुझे not isinstance(n, bool) and isinstance(n, (int, float))इसके बजाय की आवश्यकता थी
YTZ

54

एक लाइन:

isinstance(yourNumber, numbers.Real)

यह कुछ समस्याओं से बचा जाता है:

>>> isinstance(99**10,int)
False

डेमो:

>>> import numbers

>>> someInt = 10
>>> someLongInt = 100000L
>>> someFloat = 0.5

>>> isinstance(someInt, numbers.Real)
True
>>> isinstance(someLongInt, numbers.Real)
True
>>> isinstance(someFloat, numbers.Real)
True

6
पायथन 3 में isinstance(99**10,int)है True
कार्लोस ए। गोमेज़

12

अनुमति माँगने की अपेक्षा क्षमा माँगना अधिक आसान है। बस ऑपरेशन करते हैं। यदि यह काम करता है, तो वस्तु एक स्वीकार्य, उपयुक्त, उचित प्रकार की थी। यदि ऑपरेशन काम नहीं करता है, तो वस्तु एक उपयुक्त प्रकार की नहीं थी। प्रकार जानने से शायद ही कभी मदद मिलती है।

बस ऑपरेशन का प्रयास करें और देखें कि क्या यह काम करता है।

inNumber = somenumber
try:
    inNumberint = int(inNumber)
    print "this number is an int"
except ValueError:
    pass
try:
    inNumberfloat = float(inNumber)
    print "this number is a float"
except ValueError:
    pass

5
क्या ऐसा करने का कोई कारण है typeऔर जब यह isinstanceकाम कर सकता है?
user225312

9
int (1.5) ValueError नहीं बढ़ाता है, और आप स्पष्ट रूप से जानते हैं कि - उद्देश्य पर गलत उत्तर देना? गंभीरता से?
ग्लेन मेनार्ड

4
@ ग्लेन: मेरा मानना ​​है कि एस.लॉट ने इस सवाल को "जांचना समझा कि क्या एक स्ट्रिंग एक इंट या फ्लोट है" (जिस स्थिति में यह वास्तव में एक अच्छा समाधान होगा)।

@AA: class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int। (खराब सिंटैक्स के लिए क्षमा करें, लेकिन मैं एक पंक्ति में अधिक नहीं कर सकता।)
मिलीग्राम।

2
@ एए: हाँ। कारण यह है कि यह सरल और अधिक विश्वसनीय है। के बीच अंतर intऔर floatकई एल्गोरिदम के लिए भी प्रासंगिक नहीं हो सकता है। स्पष्ट रूप से प्रकार का अनुरोध करना आमतौर पर खराब बहुरूपता या इससे भी अधिक गंभीर डिजाइन समस्या का संकेत है। संक्षेप में। प्रकारों के लिए जाँच न करें। अनुमति माँगने की तुलना में क्षमा माँगना आसान है।
S.Lott

10

तुम भी क्या कर सकते हैं type() उदाहरण का उपयोग कर रहा है :

if type(inNumber) == int : print "This number is an int"
elif type(inNumber) == float : print "This number is a float"

1
यह [स्वाभाविक रूप से दुर्लभ] मामले में विफल होगा कि प्रश्न में संख्या इंट या फ्लोट का एक प्रकार है। (इसलिए "आइंस्टीन" को "बेहतर", IMO क्यों माना जाएगा।)
दान एच।

7

यहां कोड का एक टुकड़ा है जो यह जांचता है कि नंबर पूर्णांक है या नहीं, यह पायथन 2 और पायथन 3 दोनों के लिए काम करता है।

import sys

if sys.version < '3':
    integer_types = (int, long,)
else:
    integer_types = (int,)

isinstance(yourNumber, integer_types)  # returns True if it's an integer
isinstance(yourNumber, float)  # returns True if it's a float

ध्यान दें कि पायथन 2 में दोनों प्रकार हैं intऔर long, जबकि पायथन 3 में केवल टाइप हैं intस्रोत

यदि आप यह जांचना चाहते हैं कि क्या आपका नंबर एक है floatजो ए का प्रतिनिधित्व करता है int, तो ऐसा करें

(isinstance(yourNumber, float) and (yourNumber).is_integer())  # True for 3.0

यदि आपको इंट और फ्लोट के बीच अंतर करने की आवश्यकता नहीं है, और दोनों में से किसी एक के साथ ठीक है, तो निन्जाकेंको का उत्तर जाने का तरीका है

import numbers

isinstance(yourNumber, numbers.Real)

6

इस समाधान के बारे में कैसे?

if type(x) in (float, int):
    # do whatever
else:
    # do whatever

6

मुझे पता है कि यह एक पुराना धागा है, लेकिन यह एक ऐसी चीज है जिसका मैं उपयोग कर रहा हूं और मुझे लगा कि इससे मदद मिल सकती है।

यह अजगर 2.7 और अजगर 3 <में काम करता है।

def is_float(num):
    """
    Checks whether a number is float or integer

    Args:
        num(float or int): The number to check

    Returns:
        True if the number is float
    """
    return not (float(num)).is_integer()


class TestIsFloat(unittest.TestCase):
    def test_float(self):
        self.assertTrue(is_float(2.2))

    def test_int(self):
        self.assertFalse(is_float(2))

5

आप यह निर्धारित करने के लिए modulo का उपयोग कर सकते हैं कि क्या x संख्यात्मक रूप से पूर्णांक है। isinstance(x, int)विधि केवल निर्धारित करता है कि एक्स प्रकार से एक पूर्णांक है:

def isInt(x):
    if x%1 == 0:
        print "X is an integer"
    else:
        print "X is not an integer"

3.2 % 2पैदावार 1.4। व्हाट्सु टॉकिन '' बाउट, विली (एस | एम)? इसके अलावा, TypeErrorयदि आप x को शुरू करने के लिए कोई संख्या नहीं है , तो आपको मिल जाएगा , इसलिए यदि आप इस सलाह का पालन करते हैं, तो आपका कार्यक्रम समय से पहले समाप्त हो जाएगा ...
dylnmc

@dylnmc तब आप यह निर्धारित करने के लिए isinstance () पद्धति का उपयोग कर सकते हैं कि क्या x एक संख्या है। इसके अलावा, 3.2% 1 पैदावार 0.2। यदि संख्या 1 से समान रूप से विभाज्य है, तो यह संख्यात्मक रूप से पूर्णांक है। यह विधि मेरे लिए उपयोगी थी, भले ही यह आपके लिए न हो।
विलियम गेरेके

यह सच है; x%1 == 0केवल ints के लिए सही होना चाहिए (लेकिन यह केवल दशमलव के बाद शून्य के साथ तैरने के लिए भी सही होगा)। यदि आप जानते हैं कि यह एक इंट (उदाहरण के लिए, यदि यह एक फ़ंक्शन के लिए एक परम) है, तो आप बस modulo के साथ देख सकते हैं। मैं शर्त लगाता हूं कि इससे तेज है Math.floor(x) == x। नहीं-उज्ज्वल पक्ष पर, यह तब होगा Trueजब आप एक फ़्लोट को पास करते हैं 1.0या 5.0, और आप उसी समस्या का सामना करेंगे जिसका उपयोग मूल पोस्टर उसके प्रश्न में उल्लेखित है।
dylnmc

5

पायथन संस्करण 3.6.3 शेल में कोशिश की गई

>>> x = 12
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x,int)
True

के लिए काम करने के लिए कुछ भी समझ नहीं सका।


4

pls इसे जांचें: आयात संख्या

import math

a = 1.1 - 0.1
print a 

print isinstance(a, numbers.Integral)
print math.floor( a )
if (math.floor( a ) == a):
    print "It is an integer number"
else:
    print False

हालाँकि X फ्लोट है, लेकिन मान पूर्णांक है, इसलिए यदि आप मान की जाँच करना चाहते हैं कि पूर्णांक है तो आप आइंस्टीन का उपयोग नहीं कर सकते हैं और आपको मूल्यों की तुलना करने की आवश्यकता नहीं है।



0

अद्यतन: यह कोशिश करो


inNumber = [32, 12.5, 'e', 82, 52, 92, '1224.5', '12,53',
            10000.000, '10,000459', 
           'This is a sentance, with comma number 1 and dot.', '121.124']

try:

    def find_float(num):
        num = num.split('.')
        if num[-1] is not None and num[-1].isdigit():
            return True
        else:
            return False

    for i in inNumber:
        i = str(i).replace(',', '.')
        if '.' in i and find_float(i):
            print('This is float', i)
        elif i.isnumeric():
            print('This is an integer', i)
        else:
            print('This is not a number ?', i)

except Exception as err:
    print(err)

हां मैंने किया और यह काम नहीं किया। और मुझे पूरा यकीन है कि आपने वास्तव में इसकी कोशिश नहीं की है। क्योंकि यह काम नहीं करता है।
जेजे

निश्चित रूप से, प्रतिक्रिया करने का कम आक्रामक तरीका है। यद्यपि आप सही हैं कि मैं अभी और परीक्षण चला रहा हूं लेकिन यह हर मामले में काम नहीं करता है।
मैगोट

@JJJ इस समाधान के बारे में कैसे?
मैगोट

0

आप इसे साधारण से बयान कर सकते हैं

फ्लोट के लिए जाँच करने के लिए

अगर टाइप करें (a) == टाइप करें (1.1)

पूर्णांक प्रकार की जांच करने के लिए

यदि टाइप (a) == टाइप (1)


-1
def is_int(x):
  absolute = abs(x)
  rounded = round(absolute)
  if absolute - rounded == 0:
    print str(x) + " is an integer"
  else:
    print str(x) +" is not an integer"


is_int(7.0) # will print 7.0 is an integer


कृपया बताएं कि ओपी प्रश्न में आपका योगदान क्यों / कैसे हल करता है।
हर्वी

@ हेरी वह देख रहा है कि क्या कोई संख्या एक इंट या फ्लोट है, जो फ़ंक्शन मैं परिभाषित करता हूं वह यह कर सकता है कि एब्स एक इनबिल्ट पायथन फंक है जो संख्या का पूर्ण मान लौटाता है, राउंड भी एक इनबिल्ट फन है जो राउंड ऑफ करता है संख्या, यदि मैं पूर्णांक से गोल संख्या को घटाता हूं, और मुझे एक शून्य मिलता है, तो संख्या एक int है, या इसके दशमलव स्थानों के बाद एक शून्य है
गिदोन लिटेस


-5

variable.isnumeric जाँचता है कि क्या मान पूर्णांक है:

 if myVariable.isnumeric:
    print('this varibale is numeric')
 else:
    print('not numeric')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.