কোনও সংখ্যা ইনট বা ভাসমান কিনা তা পরীক্ষা করে দেখুন


199

আমি এটি কীভাবে করেছি তা এখানে:

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

এরকম কিছু.
এটি করার কোনও সুন্দর উপায় আছে?


4
কৌশলটি হ'ল এই প্রশ্নটি জিজ্ঞাসা করা অন্য সমস্ত সময়ে এসও-তে অনুসন্ধান করা। এগুলির প্রত্যেকটি একই, মানক উত্তরের পুনরাবৃত্তি সরবরাহ করবে।
এস.লট

1
... এবং কেন আপনার জানা দরকার?
কার্ল নচেটেল


@ উবল: এটি বৃহত সংখ্যার জন্য ব্যর্থ ।
jfs

assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)আমি যখন গুগলের সাথে এই প্রশ্নটি পেলাম তখন আমি কী খুঁজছিলাম।
মার্টিন থোমা

উত্তর:


283

আইসনস্ট্যান্স ব্যবহার করুন ।

>>> 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)
jtschoonhoven

93

আমি @ নিনজাগেকোর উত্তরটি সবচেয়ে পছন্দ করি।

এটিও কাজ করবে:

পাইথন ২.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))পরিবর্তে আমার দরকার ছিল
ওয়াইটিজেড

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) মান মান বাড়ায় না এবং আপনি স্পষ্টতই জানেন যে - উদ্দেশ্য হিসাবে একটি ভুল উত্তর দেওয়া? সিরিয়াসলি?
গ্লেন মেইনার্ড

4
@ গ্লেন: আমি ধরে নিয়েছি এস.লট " স্ট্রিংটি কোনও ইনট বা ভাসমান কিনা তা পরীক্ষা করুন " (যে ক্ষেত্রে এটি আসলে একটি ভাল সমাধান হবে) হিসাবে প্রশ্নটি বুঝতে পেরেছিলেন ।

@AA: class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int। (খারাপ সিনট্যাক্সের জন্য দুঃখিত তবে আমি এক লাইনে বেশি কিছু করতে পারি না))
মিলিগ্রাম।

2
@ এএ: হ্যাঁ কারণটি হ'ল এটি সহজ এবং আরও নির্ভরযোগ্য। মধ্যে পার্থক্য intএবং floatএমনকি অনেক আলগোরিদিম জন্য প্রাসঙ্গিক হতে পারে। স্পষ্টভাবে অনুরোধের জন্য অনুরোধ করা খারাপ পলিমারফিজম বা আরও গুরুতর নকশা সমস্যার লক্ষণ। সংক্ষেপে. প্রকারের জন্য পরীক্ষা করবেন না। অনুমতি চাইতে চেয়ে ক্ষমা চাওয়া সহজ It's
এস.লোট

10

আপনি যা করতে পারেন তা type() উদাহরণ ব্যবহার করে :

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

1
এটি [স্বীকারোচিত বিরল] ক্ষেত্রে ব্যর্থ হবে যে প্রশ্নে নম্বরটি ইন্ট বা ফ্লোটের একটি সাবস্ক্লাস। (সুতরাং "আইসনস্ট্যান্স" কেন "আরও ভাল" হিসাবে বিবেচিত হবে, আইএমও))
ড্যান এইচ

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

আমি জানি এটি একটি পুরানো থ্রেড তবে এটি এমন কিছু যা আমি ব্যবহার করছি এবং আমি ভেবেছিলাম এটি সাহায্য করতে পারে।

এটি অজগর ২.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

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যদি
এক্সটি

@dylnmc তারপরে আপনি x সংখ্যা কিনা তা নির্ধারণ করার জন্য আইসনস্ট্যান্স () পদ্ধতিটি ব্যবহার করতে পারেন। এছাড়াও, 3.2% 1 ফলন দেয় 0.2। যদি কোনও সংখ্যা 1 দ্বারা সমানভাবে বিভাজ্য হয় তবে এটি সংখ্যার দিক থেকে পূর্ণসংখ্যা হয়। এই পদ্ধতিটি আপনার পক্ষে দরকারী ছিল যদিও এটি আপনার পক্ষে নাও থাকতে পারে।
উইলিয়াম গেরেক

এটা সত্য; x%1 == 0শুধুমাত্র ints এর ক্ষেত্রে সত্য হওয়া উচিত (তবে এটি কেবলমাত্র দশমিক পয়েন্টের সাথে একটি শূন্যের সাথে ভাসমানদের ক্ষেত্রেও সত্য হবে)। যদি আপনি জানেন যে এটি কোনও অন্তর্নিহিত হতে চলেছে (উদাহরণস্বরূপ, এটি যদি কোনও ফাংশনের পরম হয়), তবে আপনি কেবল মডিউল দিয়ে পরীক্ষা করতে পারেন। আমি বাজি ধরছি যে তার চেয়ে দ্রুত 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

যদিও এক্স ভাসমান তবে মানটি পূর্ণসংখ্যা, সুতরাং আপনি মানটি পূর্ণসংখ্যার পরীক্ষা করতে চান তবে আপনি আইসনস্ট্যান্স ব্যবহার করতে পারবেন না এবং আপনার মানগুলি প্রকারের চেয়ে তুলনা করতে হবে।



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)

হ্যাঁ আমি করেছি এবং এটি কার্যকর হয়নি। এবং আমি নিশ্চিত যে আপনি সত্যই এটি চেষ্টা করেননি। কারণ এটি কাজ করে না।
জেজেজে

অবশ্যই, প্রতিক্রিয়া জানাতে একটি কম আপত্তিকর উপায় আছে। যদিও আপনি ঠিক বলেছেন আমি আরও পরীক্ষা চালিয়েছি এটি প্রতিটি ক্ষেত্রে কার্যকর হয় না।
ম্যাগোত্তে

@ জেজেজে এই সমাধান সম্পর্কে কীভাবে?
ম্যাগোত্তে

0

আপনি যদি বিবৃতিতে সরল করে এটি করতে পারেন

ভাসা চেক করতে

টাইপ (ক) == প্রকার (1.1)

পূর্ণসংখ্যা টাইপ পরীক্ষা করতে

যদি টাইপ (ক) == প্রকার (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

ফানক ইনটসের জন্য যাচাই করে তবে সেই ফ্লোটের ক্ষেত্রেও সত্য ফিরে আসে
গিডন লাইটস

আপনার অবদান কেন / কীভাবে প্রশ্নটির সমাধান করে দয়া করে তা ব্যাখ্যা করুন।
হেরি

@ হেরি তিনি কোন সংখ্যার কোনও ইন্ট বা ফ্লোট কিনা তা খতিয়ে দেখছেন, আমি যে ফাংশনটি সংজ্ঞায়িত করেছি তা করতে পারে, অ্যাবস হল একটি ইনবিল্ট পাইথন ফানক যা সংখ্যার পরম মান দেয়, রাউন্ডটিও একটি ইনবিল্ট ফানক যা চারদিকে বন্ধ হয় সংখ্যা, যদি আমি নিখুঁত সংখ্যা থেকে বৃত্তাকার সংখ্যাটি বিয়োগ করি এবং আমি একটি শূন্য পাই, তবে সংখ্যাটি একটি অন্তর্নিহিত, বা এর দশমিক স্থানের মতো শূন্য রয়েছে
গিডিওন লাইটস


-5

variable.isnumeric মানটি পূর্ণসংখ্যা কিনা তা পরীক্ষা করে:

 if myVariable.isnumeric:
    print('this varibale is numeric')
 else:
    print('not numeric')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.