Python ofrece varios métodos de cadea para determinar e comprobar se un tipo de cadea é numérico ou alfabético.
Cada método explícase cun código de mostra.
- Determina se unha cadea é un díxito decimal:
str.isdecimal()
- Determinar se unha cadea é un número:
str.isdigit()
- Determina se unha cadea é un carácter que representa un número:
str.isnumeric()
- Determina se a cadea é alfabética:
str.isalpha()
- Determine se a cadea é alfanumérica:
str.isalnum()
- Determina se as cadeas son caracteres ASCII:
str.isascii()
- Xuízo de corda baleira
- Determina se as cadeas poden converterse en números
Para métodos distintos de isascii(), unha cadea que conteña unha cadea baleira, os seguintes símbolos, etc., é falsa.
,
.
-
-1,23, etc., como valor numérico explícase ao final deste apartado.
As expresións regulares pódense usar para determinar os tipos de caracteres de forma máis flexible e para extraer os tipos de caracteres relevantes.
Consulte o seguinte artigo para obter máis información sobre como determinar o seguinte
- Como converter unha cadea numérica (str) nun número (int, float)
- Como determinar maiúsculas e minúsculas
- RELACIONADO:Converter unha cadea de números en valores numéricos en Python
- RELACIONADO:Lista de métodos de cadea para manipular maiúsculas e minúsculas en Python
- Determina se unha cadea é un díxito decimal:str.isdecimal()
- Determinar se unha cadea é un número:str.isdigit()
- Determina se unha cadea é un carácter que representa un número:str.isnumeric()
- Determina se a cadea é alfabética:str.isalpha()
- Determine se a cadea é alfanumérica:str.isalnum()
- Determina se as cadeas son caracteres ASCII:str.isascii()
- Xuízo de corda baleira
- Determina se as cadeas poden converterse en números
Determina se unha cadea é un díxito decimal:str.isdecimal()
En isdecimal(), é certo se todos os caracteres son díxitos decimais, é dicir, caracteres da categoría xeral Nd de Unicode. Tamén é certo para os números arábigos de ancho completo, 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
Se contén un símbolo como un signo menos ou un punto, é falso. Por exemplo, se queres determinar que unha cadea como ‘-1,23’ é un valor numérico, podes utilizar o manexo de excepcións. Isto explícase ao final desta sección.
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 se unha cadea é un número:str.isdigit()
En isdigit(), ademais dos números que son verdadeiros en isdecimal(), tamén son verdadeiros os números cuxo valor de propiedade Unicode Numeric_Type é Digit ou Decimal.
Por exemplo, un número superíndice que representa un cadrado é falso en isdecimal() pero verdadeiro en isdigit().
- número superíndice que representa o cadrado
- ²
- \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 se unha cadea é un carácter que representa un número:str.isnumeric()
En isnumeric(), ademais dos números que son verdadeiros en isdigit(), tamén son verdadeiros os números cuxo valor de propiedade Unicode Numeric_Type é Numeric.
As fraccións, os números romanos e os números chineses tamén son certos.
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 se a cadea é alfabética:str.isalpha()
En isalpha(), unha propiedade de categoría xeral Unicode cunha das seguintes é verdadeira.
Lm
Lt
Lu
Ll
Lo
O alfabeto, os caracteres chineses, etc. serán certos.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Os números arábigos son falsos, pero os números chineses son verdadeiros porque tamén son caracteres chineses; porén, os ceros en números chineses son 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
Os números romanos son falsos.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Determine se a cadea é alfanumérica:str.isalnum()
En isalnum(), é verdadeiro se cada carácter é verdadeiro nalgún dos seguintes métodos listados ata agora.
isdecimal()
isdigit()
isnumeric()
isalpha()
Cada carácter avalíase individualmente, polo que unha cadea que contén letras e números será verdadeira en isalnum() aínda que sexa falsa nos demais métodos.
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 se as cadeas son caracteres ASCII:str.isascii()
Python 3.7 engadiu isascii(). Devolve verdadeiro se todos os caracteres da cadea son caracteres ASCII.
Ademais dos números e das letras, tamén son verdadeiros símbolos como + e -.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana e outros caracteres non ASCII son falsos.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Como veremos a continuación, a diferenza dos outros métodos, isascii() devolve verdadeiro mesmo para unha cadea baleira.
Xuízo de corda baleira
Unha cadea baleira é verdadeira para isascii() e falsa para os outros métodos.
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
Use bool() para determinar se é unha cadea baleira. O valor de retorno é falso para unha cadea baleira e verdadeiro en caso contrario.
print(bool(''))
# False
print(bool('abc123'))
# True
Determina se as cadeas poden converterse en números
As cadeas de valores negativos ou fraccionarios conteñen puntos ou signos menos. Polo tanto, o resultado é falso para todos os métodos excepto isascii().
Aínda que é certo para isascii(), non é axeitado para determinar se unha cadea pode converterse nun valor numérico, xa que é verdadeiro aínda que conteña outros símbolos ou caracteres alfabéticos.
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
As cadeas pódense converter en números de coma flotante con float(). Erro nas cadeas que non se poden converter.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Co manexo de excepcións, pódese definir unha función que devolva verdadeiro cando se pode converter unha cadea con 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
Se queres determinar que un número separado por comas tamén é verdadeiro, utiliza substituír() para eliminar a coma (substitúea por unha cadea baleira).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Se queres admitir a delimitación de espazos en branco, podes usar substituír() máis.
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