Python determină și verifică dacă un șir de caractere este numeric sau alfabetic

Afaceri

Python oferă mai multe metode string pentru a determina și verifica dacă un tip de șir de caractere este numeric sau alfabetic.

Fiecare metodă este explicată cu exemple de cod.

  • Determină dacă un șir de caractere este o cifră zecimală:str.isdecimal()
  • Determinarea dacă un șir de caractere este un număr:str.isdigit()
  • Determină dacă un șir de caractere este un caracter reprezentând un număr:str.isnumeric()
  • Determină dacă șirul este alfabetic:str.isalpha()
  • Determină dacă șirul este alfanumeric:str.isalnum()
  • Determină dacă șirurile de caractere sunt caractere ASCII:str.isascii()
  • Judecata de șir gol
  • Determinați dacă șirurile de caractere pot fi convertite în numere

Pentru alte metode decât isascii(), un șir care conține un șir gol, următoarele simboluri etc., este fals.

  • ,
  • .
  • -

-1,23, etc., ca valoare numerică, este explicată la sfârșitul acestei secțiuni.

Expresiile regulate pot fi utilizate pentru a determina tipurile de caractere într-un mod mai flexibil și pentru a extrage tipurile de caractere relevante.

Consultați următorul articol pentru mai multe informații despre cum să determinați următoarele

  • Cum se convertește un șir de caractere numerice (str) într-un număr (int, float)
  • Cum se determină majusculele și minusculele

Determină dacă un șir de caractere este o cifră zecimală: str.isdecimal()

În isdecimal(), este adevărat dacă toate caracterele sunt cifre zecimale, adică caractere din categoria generală Nd a Unicode. De asemenea, este adevărat pentru cifrele arabe de lățime completă etc.

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 cazul în care conține un simbol, cum ar fi semnul minus sau un punct, este fals. De exemplu, dacă doriți să determinați că un șir de caractere precum „-1,23” este o valoare numerică, puteți utiliza gestionarea excepțiilor. Acest lucru este explicat la sfârșitul acestei secțiuni.

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

Determinarea dacă un șir de caractere este un număr: str.isdigit()

În isdigit(), pe lângă numerele care sunt adevărate în isdecimal(), sunt adevărate și numerele a căror valoare a proprietății Unicode Numeric_Type este Digit sau Decimal.

De exemplu, un număr superscript care reprezintă un pătrat este fals în isdecimal(), dar adevărat în isdigit().

  • număr superscript care reprezintă pătratul
    • ²
    • '\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

Determină dacă un șir de caractere este un caracter reprezentând un număr: str.isnumeric()

În isnumeric(), pe lângă numerele care sunt adevărate în isdigit(), numerele a căror valoare a proprietății Unicode Numeric_Type este Numeric sunt, de asemenea, adevărate.

Fracțiile, cifrele romane și cifrele chinezești sunt, de asemenea, adevărate.

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

Determină dacă șirul este alfabetic: str.isalpha()

În isalpha(), o proprietate de categorie generală Unicode cu una dintre următoarele valori este adevărată.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Alfabetul, caracterele chinezești etc. vor fi adevărate.

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

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

Cifrele arabe sunt false, dar cifrele chinezești sunt adevărate, deoarece sunt, de asemenea, caractere chinezești; cu toate acestea, zerourile din cifrele chinezești sunt false.

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

Numerele romane sunt false.

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

Determină dacă șirul este alfanumeric: str.isalnum()

În isalnum(), este adevărat dacă fiecare caracter este adevărat în oricare dintre următoarele metode enumerate până acum.

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

Fiecare caracter este evaluat individual, astfel încât un șir care conține litere și numere va fi adevărat în isalnum() chiar dacă este fals în toate celelalte metode.

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

Determină dacă șirurile de caractere sunt caractere ASCII: str.isascii()

Python 3.7 a adăugat isascii(). Aceasta returnează true dacă toate caracterele din șir sunt caractere ASCII.

În plus față de numere și litere, sunt valabile și simboluri precum + și -.

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

Hiragana non-ASCII și alte caractere sunt false.

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

După cum vom vedea în continuare, spre deosebire de celelalte metode, isascii() returnează true chiar și pentru un șir gol.

Judecata de șir gol

Un șir gol este adevărat pentru isascii() și fals pentru celelalte metode.

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

Utilizați bool() pentru a determina dacă este un șir gol. Valoarea returnată este false pentru un șir gol și true în caz contrar.

print(bool(''))
# False

print(bool('abc123'))
# True

Determinați dacă șirurile de caractere pot fi convertite în numere

Șirurile de valori negative sau fracționare conțin puncte sau semne minus. Prin urmare, rezultatul este fals pentru toate metodele, cu excepția isascii().

Deși este adevărată pentru isascii(), nu este potrivită pentru a determina dacă un șir de caractere poate fi convertit într-o valoare numerică, deoarece este adevărată chiar dacă acesta conține alte simboluri sau caractere alfabetice.

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

Șirurile de caractere pot fi convertite în numere cu virgulă mobilă cu ajutorul funcției float(). Eroare pentru șirurile de caractere care nu pot fi convertite.

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

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

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

Cu gestionarea excepțiilor, se poate defini o funcție care returnează true atunci când un șir de caractere poate fi convertit cu 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

Dacă doriți să determinați că un număr separat prin virgulă este, de asemenea, adevărat, utilizați replace() pentru a elimina virgula (înlocuiți-o cu un șir gol).

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

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

Dacă doriți să sprijiniți delimitarea spațiilor albe, puteți utiliza replace() în continuare.

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