Python determina i verifica si una cadena és numèrica o alfabètica

Negocis

Python proporciona diversos mètodes de cadena per determinar i comprovar si un tipus de cadena és numèric o alfabètic.

Cada mètode s’explica amb codi d’exemple.

  • Determina si una cadena és un dígit decimal:str.isdecimal()
  • Determinar si una cadena és un nombre:str.isdigit()
  • Determina si una cadena és un caràcter que representa un nombre:str.isnumeric()
  • Determina si la cadena és alfabètica:str.isalpha()
  • Determineu si la cadena és alfanumèrica:str.isalnum()
  • Determina si les cadenes són caràcters ASCII:str.isascii()
  • Judici de corda buida
  • Determineu si les cadenes es poden convertir en números

Per a mètodes diferents de isascii(), una cadena que conté una cadena buida, els símbols següents, etc., és falsa.

  • ,
  • .
  • -

-1,23, etc., com a valor numèric s’explica al final d’aquest apartat.

Les expressions regulars es poden utilitzar per determinar els tipus de caràcters de manera més flexible i per extreure els tipus de caràcters rellevants.

Consulteu l’article següent per obtenir més informació sobre com determinar el següent

  • Com convertir una cadena numèrica (str) en un nombre (int, float)
  • Com determinar majúscules i minúscules

Determina si una cadena és un dígit decimal:str.isdecimal()

A isdecimal(), és cert si tots els caràcters són dígits decimals, és a dir, caràcters de la categoria general Nd d’Unicode. També és cert per als números àrabs d’amplada completa, 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

Si conté un símbol com un signe menys o un punt, és fals. Per exemple, si voleu determinar que una cadena com ara ‘-1,23’ és un valor numèric, podeu utilitzar el maneig d’excepcions. Això s’explica al final d’aquesta secció.

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

Determinar si una cadena és un nombre:str.isdigit()

A isdigit(), a més dels números que són certs en isdecimal(), també ho són els nombres el valor de propietat Unicode dels quals Numeric_Type és Digit o Decimal.

Per exemple, un nombre superíndex que representa un quadrat és fals a isdecimal() però cert a isdigit().

  • nombre superíndex que representa el quadrat
    • ²
    • \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

Determina si una cadena és un caràcter que representa un nombre:str.isnumeric()

A isnumeric(), a més dels números que són certs a isdigit(), també ho són els nombres el valor de propietat Unicode dels quals Numeric_Type és Numeric.

Les fraccions, els números romans i els xinesos també són certs.

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

Determina si la cadena és alfabètica:str.isalpha()

A isalpha(), una propietat de categoria general Unicode amb una de les següents és certa.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

L’alfabet, els caràcters xinesos, etc. seran certs.

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

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

Els números àrabs són falsos, però els xinesos són certs perquè també són caràcters xinesos; tanmateix, els zeros en xinesos són falsos.

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

Els números romans són falsos.

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

Determineu si la cadena és alfanumèrica:str.isalnum()

A isalnum(), és cert si cada caràcter és cert en qualsevol dels mètodes següents enumerats fins ara.

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

Cada caràcter s’avalua individualment, de manera que una cadena que contingui lletres i números serà certa a isalnum() encara que sigui falsa en tots els altres mètodes.

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

Determina si les cadenes són caràcters ASCII:str.isascii()

Python 3.7 va afegir isascii(). Retorna true si tots els caràcters de la cadena són caràcters ASCII.

A més dels números i lletres, símbols com + i – també són certs.

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

Hiragana no ASCII i altres caràcters són falsos.

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

Com veurem a continuació, a diferència dels altres mètodes, isascii() retorna true fins i tot per a una cadena buida.

Judici de corda buida

Una cadena buida és true per a isascii() i fals per als altres mètodes.

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

Utilitzeu bool() per determinar si és una cadena buida. El valor de retorn és fals per a una cadena buida i cert en cas contrari.

print(bool(''))
# False

print(bool('abc123'))
# True

Determineu si les cadenes es poden convertir en números

Les cadenes de valors negatius o fraccionaris contenen punts o signes menys. Per tant, el resultat és fals per a tots els mètodes excepte isascii().

Encara que és cert per a isascii(), no és adequat per determinar si una cadena es pot convertir en un valor numèric, ja que és cert encara que conté altres símbols o caràcters alfabètics.

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

Les cadenes es poden convertir en números de coma flotant amb float(). Error per a les cadenes que no es poden convertir.

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

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

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

Amb el maneig d’excepcions, es pot definir una funció que retorni true quan es pot convertir una cadena amb 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

Si voleu determinar que un nombre separat per comes també és cert, feu servir replace() per eliminar la coma (substituïu-la per una cadena buida).

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

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

Si voleu suportar la delimitació d’espais en blanc, podeu utilitzar substituir() més.

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