Python menentukan dan menyemak sama ada rentetan adalah angka atau abjad

Perniagaan

Python menyediakan beberapa kaedah rentetan untuk menentukan dan menyemak sama ada jenis rentetan adalah angka atau abjad.

Setiap kaedah diterangkan dengan kod sampel.

  • Menentukan sama ada rentetan ialah digit perpuluhan:str.isdecimal()
  • Menentukan sama ada rentetan ialah nombor:str.isdigit()
  • Menentukan sama ada rentetan ialah aksara yang mewakili nombor:str.isnumeric()
  • Menentukan sama ada rentetan adalah abjad:str.isalpha()
  • Tentukan sama ada rentetan ialah abjad angka:str.isalnum()
  • Tentukan sama ada rentetan ialah aksara ASCII:str.isascii()
  • Penghakiman rentetan kosong
  • Tentukan sama ada rentetan boleh ditukar kepada nombor

Untuk kaedah selain isascii(), rentetan yang mengandungi rentetan kosong, simbol berikut, dsb., adalah palsu.

  • ,
  • .
  • -

-1.23, dsb., sebagai nilai berangka diterangkan pada penghujung bahagian ini.

Ungkapan biasa boleh digunakan untuk menentukan jenis aksara dengan lebih fleksibel dan untuk mengekstrak jenis aksara yang berkaitan.

Lihat artikel berikut untuk mendapatkan maklumat lanjut tentang cara menentukan perkara berikut

  • Bagaimana untuk menukar rentetan angka (str) kepada nombor (int, float)
  • Bagaimana untuk menentukan huruf besar dan kecil

Menentukan sama ada rentetan ialah digit perpuluhan:str.isdecimal()

Dalam isdecimal(), adalah benar jika semua aksara ialah digit perpuluhan, iaitu aksara dalam kategori umum Nd Unicode. Ia juga benar untuk angka Arab lebar penuh, dsb.

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

Jika ia mengandungi simbol seperti tanda tolak atau noktah, ia adalah palsu. Sebagai contoh, jika anda ingin menentukan bahawa rentetan seperti ‘-1.23’ ialah nilai berangka, anda boleh menggunakan pengendalian pengecualian. Ini dijelaskan di penghujung bahagian ini.

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

Menentukan sama ada rentetan ialah nombor:str.isdigit()

Dalam isdigit(), sebagai tambahan kepada nombor yang benar dalam isdecimal(), nombor yang nilai sifat Unicodenya Numeric_Type ialah Digit atau Decimal juga benar.

Sebagai contoh, nombor superskrip yang mewakili segi empat sama adalah palsu dalam isdecimal() tetapi benar dalam isdigit().

  • nombor superskrip yang mewakili segi empat sama
    • ²
    • \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

Menentukan sama ada rentetan ialah aksara yang mewakili nombor:str.isnumeric()

Dalam isnumeric(), sebagai tambahan kepada nombor yang benar dalam isdigit(), nombor yang nilai sifat Unicodenya Numeric_Type ialah Numeric juga benar.

Pecahan, angka Rom, dan angka Cina juga benar.

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

Menentukan sama ada rentetan adalah abjad:str.isalpha()

Dalam isalpha(), sifat kategori umum Unicode dengan salah satu daripada yang berikut adalah benar.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Abjad, aksara Cina, dsb. adalah benar.

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

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

Angka Arab adalah palsu, tetapi angka Cina adalah benar kerana ia juga adalah aksara Cina; bagaimanapun, sifar dalam angka Cina adalah palsu.

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

Angka Rom adalah palsu.

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

Tentukan sama ada rentetan ialah abjad angka:str.isalnum()

Dalam isalnum(), adalah benar jika setiap aksara adalah benar dalam mana-mana kaedah berikut yang disenaraikan setakat ini.

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

Setiap aksara dinilai secara individu, jadi rentetan yang mengandungi huruf dan nombor akan menjadi benar dalam isalnum() walaupun palsu dalam semua kaedah lain.

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

Tentukan sama ada rentetan ialah aksara ASCII:str.isascii()

Python 3.7 menambah isascii(). Ia kembali benar jika semua aksara dalam rentetan adalah aksara ASCII.

Selain nombor dan huruf, simbol seperti + dan – juga benar.

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

Hiragana bukan ASCII dan aksara lain adalah palsu.

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

Seperti yang akan kita lihat seterusnya, tidak seperti kaedah lain, isascii() mengembalikan benar walaupun untuk rentetan kosong.

Penghakiman rentetan kosong

Rentetan kosong adalah benar untuk isascii() dan palsu untuk kaedah lain.

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

Gunakan bool() untuk menentukan sama ada ia adalah rentetan kosong. Nilai pulangan adalah palsu untuk rentetan kosong dan benar sebaliknya.

print(bool(''))
# False

print(bool('abc123'))
# True

Tentukan sama ada rentetan boleh ditukar kepada nombor

Rentetan nilai negatif atau pecahan mengandungi noktah atau tanda tolak. Oleh itu, hasilnya adalah palsu untuk semua kaedah kecuali isascii().

Walaupun benar untuk isascii(), ia tidak sesuai untuk menentukan sama ada rentetan boleh ditukar kepada nilai berangka, kerana ia benar walaupun ia mengandungi simbol atau aksara abjad lain.

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

Rentetan boleh ditukar kepada nombor titik terapung dengan float(). Ralat untuk rentetan yang tidak boleh ditukar.

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

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

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

Dengan pengendalian pengecualian, fungsi boleh ditakrifkan yang mengembalikan benar apabila rentetan boleh ditukar dengan 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

Jika anda ingin menentukan bahawa nombor yang dipisahkan koma juga benar, gunakan replace() untuk mengalih keluar koma (gantikan dengan rentetan kosong).

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

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

Jika anda ingin menyokong persempadanan ruang putih, anda boleh menggunakan replace() selanjutnya.

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