Python xác định và kiểm tra xem một chuỗi là số hay chữ cái

Kinh doanh

Python cung cấp một số phương thức chuỗi để xác định và kiểm tra xem kiểu chuỗi là số hay chữ cái.

Mỗi phương pháp được giải thích bằng mã mẫu.

  • Xác định xem một chuỗi có phải là một chữ số thập phân hay không:str.isdecimal()
  • Xác định xem một chuỗi có phải là một số hay không:str.isdigit()
  • Xác định xem một chuỗi có phải là một ký tự đại diện cho một số hay không:str.isnumeric()
  • Xác định xem chuỗi có phải là chữ cái hay không:str.isalpha()
  • Xác định xem chuỗi có phải là chữ và số không:str.isalnum()
  • Xác định xem các chuỗi có phải là ký tự ASCII hay không:str.isascii()
  • Phán đoán chuỗi trống
  • Xác định xem chuỗi có thể được chuyển đổi thành số hay không

Đối với các phương thức không phải isascii (), một chuỗi chứa một chuỗi rỗng, các ký hiệu sau, v.v., là sai.

  • ,
  • .
  • -

-1,23, v.v., như một giá trị số được giải thích ở cuối phần này.

Biểu thức chính quy có thể được sử dụng để xác định loại ký tự linh hoạt hơn và trích xuất các loại ký tự có liên quan.

Xem bài viết sau để biết thêm thông tin về cách xác định sau

  • Làm thế nào để chuyển đổi một chuỗi số (str) thành một số (int, float)
  • Cách xác định chữ hoa và chữ thường

Xác định xem một chuỗi có phải là một chữ số thập phân hay không:str.isdecimal()

Trong isdecimal (), đúng nếu tất cả các ký tự đều là chữ số thập phân, nghĩa là các ký tự trong danh mục chung Nd của Unicode. Nó cũng đúng với các chữ số Ả Rập có chiều rộng đầy đủ, v.v.

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True

Nếu nó chứa một ký hiệu như dấu trừ hoặc dấu chấm, thì nó là sai. Ví dụ: nếu bạn muốn xác định rằng một chuỗi chẳng hạn như ‘-1,23’ là một giá trị số, bạn có thể sử dụng xử lý ngoại lệ. Điều này được giải thích ở cuối phần này.

s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False

Xác định xem một chuỗi có phải là một số hay không:str.isdigit()

Trong isdigit (), ngoài các số đúng trong isdecimal (), các số có giá trị thuộc tính Unicode Numeric_Type là Số hoặc Thập phân cũng đúng.

Ví dụ, một số chỉ số trên đại diện cho một hình vuông là sai trong isdecimal () nhưng đúng trong isdigit ().

  • chỉ số trên đại diện cho hình vuông
    • ²
    • \ u00B2} ‘
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True

Xác định xem một chuỗi có phải là một ký tự đại diện cho một số hay không:str.isnumeric()

Trong isnumeric (), ngoài các số đúng trong isdigit (), các số có giá trị thuộc tính Unicode Numeric_Type là Numeric cũng đúng.

Phân số, chữ số La Mã và chữ số Trung Quốc cũng đúng.

s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True

s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True

Xác định xem chuỗi có phải là chữ cái hay không:str.isalpha()

Trong isalpha (), thuộc tính danh mục chung Unicode với một trong các điều sau là đúng.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Bảng chữ cái, ký tự Trung Quốc, v.v. sẽ đúng.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

Chữ số Ả Rập là sai, nhưng chữ số Trung Quốc là đúng vì chúng cũng là ký tự Trung Quốc; tuy nhiên, các số không trong chữ số Trung Quốc là sai.

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False

s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True

s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True

s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False

Chữ số La mã là sai.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

Xác định xem chuỗi có phải là chữ và số không:str.isalnum()

Trong isalnum (), nó là true nếu mỗi ký tự là true trong bất kỳ phương thức nào sau đây được liệt kê cho đến nay.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

Mỗi ký tự được đánh giá riêng lẻ, vì vậy một chuỗi chứa các chữ cái và số sẽ đúng trong isalnum () ngay cả khi sai trong tất cả các phương thức khác.

s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False

Xác định xem các chuỗi có phải là ký tự ASCII hay không:str.isascii()

Python 3.7 đã thêm isascii (). Nó trả về true nếu tất cả các ký tự trong chuỗi là ký tự ASCII.

Ngoài số và chữ cái, các ký hiệu như + và – cũng đúng.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

Chữ hiragana không phải ASCII và các ký tự khác là sai.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

Như chúng ta sẽ thấy tiếp theo, không giống như các phương thức khác, isascii () trả về true ngay cả đối với một chuỗi rỗng.

Phán đoán chuỗi trống

Một chuỗi rỗng là true cho isascii () và false cho các phương thức khác.

s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = 
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Sử dụng bool () để xác định xem nó có phải là một chuỗi rỗng hay không. Giá trị trả về là false đối với một chuỗi rỗng và true nếu không.

print(bool(''))
# False

print(bool('abc123'))
# True

Xác định xem chuỗi có thể được chuyển đổi thành số hay không

Chuỗi giá trị âm hoặc phân số chứa dấu chấm hoặc dấu trừ. Do đó, kết quả là false cho tất cả các phương thức ngoại trừ isascii ().

Mặc dù đúng với isascii (), nó không phù hợp để xác định xem một chuỗi có thể được chuyển đổi thành giá trị số hay không, vì nó đúng ngay cả khi nó chứa các ký hiệu hoặc ký tự chữ cái khác.

s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True

Các chuỗi có thể được chuyển đổi thành số dấu phẩy động với float (). Lỗi đối với các chuỗi không thể chuyển đổi.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Với việc xử lý ngoại lệ, một hàm có thể được định nghĩa trả về true khi một chuỗi có thể được chuyển đổi bằng float ().

def is_num(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

print(is_num('123'))
# True

print(is_num('-1.23'))
# True

print(is_num('+1.23e10'))
# True

print(is_num('abc'))
# False

print(is_num('10,000,000'))
# False

Nếu bạn muốn xác định rằng một số được phân tách bằng dấu phẩy cũng đúng, hãy sử dụng Replace () để loại bỏ dấu phẩy (thay thế nó bằng một chuỗi trống).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Nếu bạn muốn hỗ trợ phân định khoảng trắng, bạn có thể sử dụng thêm Replace ().

def is_num_delimiter2(s):
    try:
        float(s.replace(',', '').replace(' ', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter2('10,000,000'))
# True

print(is_num_delimiter2('10 000 000'))
# True
Copied title and URL