Hướng dẫn check string is float python - chuỗi kiểm tra là float python

Nếu bạn quan tâm đến hiệu suất (và tôi không đề xuất bạn nên), cách tiếp cận dựa trên thử là người chiến thắng rõ ràng (so với phương pháp dựa trên phân vùng của bạn hoặc phương pháp RegEXP), miễn là bạn không mong đợi nhiều Các chuỗi không hợp lệ, trong trường hợp đó nó có khả năng chậm hơn (có lẽ là do chi phí xử lý ngoại lệ).

Một lần nữa, tôi không đề nghị bạn quan tâm đến hiệu suất, chỉ cung cấp cho bạn dữ liệu trong trường hợp bạn đang thực hiện việc này 10 tỷ lần một giây hoặc một cái gì đó. Ngoài ra, mã dựa trên phân vùng không xử lý ít nhất một chuỗi hợp lệ.

$ ./floatstr.py
F..
partition sad: 3.1102449894
partition happy: 2.09208488464
..
re sad: 7.76906108856
re happy: 7.09421992302
..
try sad: 12.1525540352
try happy: 1.44165301323
.
======================================================================
FAIL: test_partition (__main__.ConvertTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./floatstr.py", line 48, in test_partition
    self.failUnless(is_float_partition("20e2"))
AssertionError

----------------------------------------------------------------------
Ran 8 tests in 33.670s

FAILED (failures=1)

Đây là mã (Python 2.6, RegEXP lấy từ câu trả lời của John Gietzen):

def is_float_try(str):
    try:
        float(str)
        return True
    except ValueError:
        return False

import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
    return re.match(_float_regexp, str)


def is_float_partition(element):
    partition=element.partition('.')
    if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
        return True

if __name__ == '__main__':
    import unittest
    import timeit

    class ConvertTests(unittest.TestCase):
        def test_re(self):
            self.failUnless(is_float_re("20e2"))

        def test_try(self):
            self.failUnless(is_float_try("20e2"))

        def test_re_perf(self):
            print
            print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
            print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()

        def test_try_perf(self):
            print
            print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
            print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()

        def test_partition_perf(self):
            print
            print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
            print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()

        def test_partition(self):
            self.failUnless(is_float_partition("20e2"))

        def test_partition2(self):
            self.failUnless(is_float_partition(".2"))

        def test_partition3(self):
            self.failIf(is_float_partition("1234x.2"))

    unittest.main()

Kiểm tra xem một chuỗi là số nguyên hay phao trong python #

Để kiểm tra xem một chuỗi là số nguyên hay phao:

  1. Sử dụng phương thức str.isdigit() để kiểm tra xem mỗi ký tự trong chuỗi là một chữ số.
  2. Nếu phương thức trả về True, chuỗi là một số nguyên.
  3. Nếu phương thức trả về False, chuỗi là số điểm nổi.

Copied!

my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468

Nếu bạn phải xử lý các số âm, hãy cuộn xuống giải pháp try/except.

Chúng tôi đã sử dụng phương thức str.isdigit() để kiểm tra xem tất cả các ký tự trong chuỗi là chữ số.

Phương thức str.isdigit trả về True Nếu tất cả các ký tự trong chuỗi là các chữ số và có ít nhất 1 ký tự, nếu không False được trả về.

Metho str.isdigit() sẽ trả về False nếu chuỗi có một điểm thập phân hoặc bắt đầu bằng trừ

def is_float_try(str):
    try:
        float(str)
        return True
    except ValueError:
        return False

import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
    return re.match(_float_regexp, str)


def is_float_partition(element):
    partition=element.partition('.')
    if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
        return True

if __name__ == '__main__':
    import unittest
    import timeit

    class ConvertTests(unittest.TestCase):
        def test_re(self):
            self.failUnless(is_float_re("20e2"))

        def test_try(self):
            self.failUnless(is_float_try("20e2"))

        def test_re_perf(self):
            print
            print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
            print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()

        def test_try_perf(self):
            print
            print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
            print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()

        def test_partition_perf(self):
            print
            print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
            print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()

        def test_partition(self):
            self.failUnless(is_float_partition("20e2"))

        def test_partition2(self):
            self.failUnless(is_float_partition(".2"))

        def test_partition3(self):
            self.failIf(is_float_partition("1234x.2"))

    unittest.main()
4 (là số âm).

Copied!

print('-123'.isdigit()) # 👉️ False print('1.23'.isdigit()) # 👉️ False

Nếu bạn không phải xử lý các số âm, sử dụng phương pháp str.isdigit() là đủ.

Nếu bạn phải xử lý các số âm, hãy sử dụng khối try/except.

Để kiểm tra xem một chuỗi là số nguyên hay phao:

  1. Kết thúc cuộc gọi đến lớp
    def is_float_try(str):
        try:
            float(str)
            return True
        except ValueError:
            return False
    
    import re
    _float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
    def is_float_re(str):
        return re.match(_float_regexp, str)
    
    
    def is_float_partition(element):
        partition=element.partition('.')
        if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
    rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
            return True
    
    if __name__ == '__main__':
        import unittest
        import timeit
    
        class ConvertTests(unittest.TestCase):
            def test_re(self):
                self.failUnless(is_float_re("20e2"))
    
            def test_try(self):
                self.failUnless(is_float_try("20e2"))
    
            def test_re_perf(self):
                print
                print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
                print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()
    
            def test_try_perf(self):
                print
                print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
                print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()
    
            def test_partition_perf(self):
                print
                print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
                print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()
    
            def test_partition(self):
                self.failUnless(is_float_partition("20e2"))
    
            def test_partition2(self):
                self.failUnless(is_float_partition(".2"))
    
            def test_partition3(self):
                self.failIf(is_float_partition("1234x.2"))
    
        unittest.main()
    
    7 trong khối
    def is_float_try(str):
        try:
            float(str)
            return True
        except ValueError:
            return False
    
    import re
    _float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
    def is_float_re(str):
        return re.match(_float_regexp, str)
    
    
    def is_float_partition(element):
        partition=element.partition('.')
        if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
    rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
            return True
    
    if __name__ == '__main__':
        import unittest
        import timeit
    
        class ConvertTests(unittest.TestCase):
            def test_re(self):
                self.failUnless(is_float_re("20e2"))
    
            def test_try(self):
                self.failUnless(is_float_try("20e2"))
    
            def test_re_perf(self):
                print
                print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
                print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()
    
            def test_try_perf(self):
                print
                print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
                print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()
    
            def test_partition_perf(self):
                print
                print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
                print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()
    
            def test_partition(self):
                self.failUnless(is_float_partition("20e2"))
    
            def test_partition2(self):
                self.failUnless(is_float_partition(".2"))
    
            def test_partition3(self):
                self.failIf(is_float_partition("1234x.2"))
    
        unittest.main()
    
    8.
  2. Nếu cuộc gọi đến lớp
    def is_float_try(str):
        try:
            float(str)
            return True
        except ValueError:
            return False
    
    import re
    _float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
    def is_float_re(str):
        return re.match(_float_regexp, str)
    
    
    def is_float_partition(element):
        partition=element.partition('.')
        if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
    rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
            return True
    
    if __name__ == '__main__':
        import unittest
        import timeit
    
        class ConvertTests(unittest.TestCase):
            def test_re(self):
                self.failUnless(is_float_re("20e2"))
    
            def test_try(self):
                self.failUnless(is_float_try("20e2"))
    
            def test_re_perf(self):
                print
                print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
                print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()
    
            def test_try_perf(self):
                print
                print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
                print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()
    
            def test_partition_perf(self):
                print
                print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
                print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()
    
            def test_partition(self):
                self.failUnless(is_float_partition("20e2"))
    
            def test_partition2(self):
                self.failUnless(is_float_partition(".2"))
    
            def test_partition3(self):
                self.failIf(is_float_partition("1234x.2"))
    
        unittest.main()
    
    7 thành công, chuỗi là một số nguyên.
  3. Nếu khối

    Copied!

    my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468
    0 chạy, chuỗi là số điểm nổi.

Copied!

my_str = '-2468' try: my_num = int(my_str) # 👇️ this runs print('String is an integer') except ValueError: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ -2468

Chúng tôi đã sử dụng một câu lệnh try/except để kiểm tra xem một chuỗi là số nguyên hay phao.

Nếu khối

def is_float_try(str):
    try:
        float(str)
        return True
    except ValueError:
        return False

import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
    return re.match(_float_regexp, str)


def is_float_partition(element):
    partition=element.partition('.')
    if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
        return True

if __name__ == '__main__':
    import unittest
    import timeit

    class ConvertTests(unittest.TestCase):
        def test_re(self):
            self.failUnless(is_float_re("20e2"))

        def test_try(self):
            self.failUnless(is_float_try("20e2"))

        def test_re_perf(self):
            print
            print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
            print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()

        def test_try_perf(self):
            print
            print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
            print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()

        def test_partition_perf(self):
            print
            print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
            print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()

        def test_partition(self):
            self.failUnless(is_float_partition("20e2"))

        def test_partition2(self):
            self.failUnless(is_float_partition(".2"))

        def test_partition3(self):
            self.failIf(is_float_partition("1234x.2"))

    unittest.main()
8 chạy thành công, chuỗi là một số nguyên.

Nếu gọi lớp

def is_float_try(str):
    try:
        float(str)
        return True
    except ValueError:
        return False

import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
    return re.match(_float_regexp, str)


def is_float_partition(element):
    partition=element.partition('.')
    if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
        return True

if __name__ == '__main__':
    import unittest
    import timeit

    class ConvertTests(unittest.TestCase):
        def test_re(self):
            self.failUnless(is_float_re("20e2"))

        def test_try(self):
            self.failUnless(is_float_try("20e2"))

        def test_re_perf(self):
            print
            print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
            print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()

        def test_try_perf(self):
            print
            print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
            print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()

        def test_partition_perf(self):
            print
            print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
            print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()

        def test_partition(self):
            self.failUnless(is_float_partition("20e2"))

        def test_partition2(self):
            self.failUnless(is_float_partition(".2"))

        def test_partition3(self):
            self.failIf(is_float_partition("1234x.2"))

    unittest.main()
7 với chuỗi sẽ tăng

Copied!

my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468
4, khối

Copied!

my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468
0 được chạy và chuỗi là số điểm nổi.

Không giống như phương pháp str.isdigit(), phương pháp này cũng xử lý các số âm.

Sử dụng một tuyên bố try/except theo cách này thường được gọi là "yêu cầu tha thứ hơn là sự cho phép".

Chúng tôi chuyển chuỗi đến lớp

def is_float_try(str):
    try:
        float(str)
        return True
    except ValueError:
        return False

import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
    return re.match(_float_regexp, str)


def is_float_partition(element):
    partition=element.partition('.')
    if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
        return True

if __name__ == '__main__':
    import unittest
    import timeit

    class ConvertTests(unittest.TestCase):
        def test_re(self):
            self.failUnless(is_float_re("20e2"))

        def test_try(self):
            self.failUnless(is_float_try("20e2"))

        def test_re_perf(self):
            print
            print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
            print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()

        def test_try_perf(self):
            print
            print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
            print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()

        def test_partition_perf(self):
            print
            print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
            print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()

        def test_partition(self):
            self.failUnless(is_float_partition("20e2"))

        def test_partition2(self):
            self.failUnless(is_float_partition(".2"))

        def test_partition3(self):
            self.failIf(is_float_partition("1234x.2"))

    unittest.main()
7 không biết liệu việc chuyển đổi có thành công hay không và nếu lỗi

Copied!

my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468
4 được nêu ra, chúng tôi sẽ xử lý nó trong khối

Copied!

my_str = '2468' if my_str.isdigit(): my_num = int(my_str) print('String is an integer') else: my_num = float(my_str) print('String is a float') print(my_num) # 👉️ 2468
0.

Làm cách nào để kiểm tra xem một chuỗi có nổi không?

Để kiểm tra xem một chuỗi là một số nguyên hay một float: sử dụng phương thức str.isDigit () để kiểm tra xem mỗi ký tự trong chuỗi là một chữ số.Nếu phương thức trả về true, chuỗi là một số nguyên.Nếu phương thức trả về false, chuỗi là một số điểm nổi.Use the str. isdigit() method to check if every character in the string is a digit. If the method returns True , the string is an integer. If the method returns False , the string is a floating-point number.

Isdigit kiểm tra float?

Phương thức số 1: Sử dụng isDigit () + thay thế () Điều này hoạt động theo 2 bước, đầu tiên giá trị điểm được xóa và chuỗi được nối để tạo thành một chữ số và sau đó được kiểm tra.Hạn chế là điều này không kiểm tra các giá trị số mũ tiềm năng cũng có thể tạo thành số float.this doesn't check for potential exponent values that can also form a float number.

Làm thế nào để bạn kiểm tra xem một chuỗi là số thập phân trong Python?

Phương thức isDecImal () trả về true nếu tất cả các ký tự trong một chuỗi là các ký tự thập phân.Nếu không, nó trả về sai.isdecimal() method returns True if all characters in a string are decimal characters. If not, it returns False.

Làm thế nào để bạn kiểm tra xem một biến là một float?

Hàm is_float () kiểm tra xem một biến có phải là float hay không.Hàm này trả về true (1) nếu biến là loại float, nếu không nó sẽ trả về sai.is_float() function checks whether a variable is of type float or not. This function returns true (1) if the variable is of type float, otherwise it returns false.