Python fornece vários métodos de cordas para determinar e verificar se um tipo de cordas é numérico ou alfabético.
Cada método é explicado com o código da amostra.
- Determina se um fio é um dígito decimal:
str.isdecimal()
- Determinar se um fio é um número:
str.isdigit()
- Determina se uma corda é um personagem que representa um número:
str.isnumeric()
- Determina se a corda é alfabética:
str.isalpha()
- Determinar se a corda é alfanumérica:
str.isalnum()
- Determina se as cordas são caracteres ASCII:
str.isascii()
- Julgamento de cadeia vazia
- Determinar se as cordas podem ser convertidas em números
Para outros métodos que não o isascii(), uma cadeia contendo uma cadeia vazia, os seguintes símbolos, etc., é falsa.
,
.
-
-1,23, etc., uma vez que um valor numérico é explicado no final desta secção.
As expressões regulares podem ser utilizadas para determinar os tipos de caracteres de forma mais flexível e para extrair os tipos de caracteres relevantes.
Ver o artigo seguinte para mais informações sobre como determinar o seguinte
- Como converter uma corda numérica (str) para um número (int, float)
- Como determinar as maiúsculas e minúsculas
- RELACIONADO:Conversão de uma cadeia de números em valores numéricos em Python
- RELACIONADO:Lista de métodos de cordas para manipulação de casos em Python
- Determina se um fio é um dígito decimal: str.isdecimal()
- Determinar se um fio é um número: str.isdigit()
- Determina se uma corda é um personagem que representa um número: str.isnumeric()
- Determina se a corda é alfabética: str.isalpha()
- Determinar se a corda é alfanumérica: str.isalnum()
- Determina se as cordas são caracteres ASCII: str.isascii()
- Julgamento de cadeia vazia
- Determinar se as cordas podem ser convertidas em números
Determina se um fio é um dígito decimal: str.isdecimal()
Em isdecimal(), é verdade se todos os caracteres forem decimais, ou seja, caracteres da categoria geral Nd de Unicode. Também é verdade para algarismos árabes de largura total, 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 contiver um símbolo tal como um sinal de menos ou um ponto final, é falso. Por exemplo, se quiser determinar que uma string como '-1,23' é um valor numérico, pode usar o tratamento de excepções. Isto é explicado no final desta secção.
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 um fio é um número: str.isdigit()
Em isdigit(), para além dos números que são verdadeiros em isdecimal(), números cuja propriedade Unicode valor numérico_Type é Digito ou Decimal também são verdadeiros.
Por exemplo, um número superescrito representando um quadrado é falso em isdecimal() mas verdadeiro em isdigit().
- número sobrescrito que representa o quadrado
- ²
- '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 uma corda é um personagem que representa um número: str.isnumeric()
Em isumeric(), para além dos números que são verdadeiros em isdigit(), os números cuja propriedade Unicode valor Numeric_Type é Numeric também são verdadeiros.
Fracções, números romanos e números chineses também são verdadeiros.
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 corda é alfabética: str.isalpha()
Em isalpha(), uma propriedade de categoria geral Unicode com uma das seguintes características é verdadeira.
Lm
Lt
Lu
Ll
Lo
O alfabeto, caracteres chineses, etc., serão verdadeiros.
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 árabes são falsos, mas os números chineses são verdadeiros porque também são caracteres chineses; contudo, os zeros nos números chineses são 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 numerais romanos são falsos.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Determinar se a corda é alfanumérica: str.isalnum()
Em isalnum(), é verdade se cada personagem for verdadeiro em qualquer um dos seguintes métodos listados até agora.
isdecimal()
isdigit()
isnumeric()
isalpha()
Cada carácter é avaliado individualmente, pelo que um fio contendo letras e números será verdadeiro em isalnum() mesmo que falso em todos os outros 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 cordas são caracteres ASCII: str.isascii()
Python 3.7 adicionado isascii(). Retorna verdadeiro se todos os caracteres da cadeia forem caracteres ASCII.
Para além dos números e letras, símbolos como + e – também são verdadeiros.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
As hiraganas não-ASCII e outros caracteres são falsos.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Como veremos a seguir, ao contrário dos outros métodos, isascii() retorna verdadeiro mesmo para uma corda vazia.
Julgamento de cadeia vazia
Uma cadeia vazia é 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
Usar bool() para determinar se se trata de uma cadeia vazia. O valor de retorno é falso para uma cadeia de caracteres vazia e verdadeiro caso contrário.
print(bool(''))
# False
print(bool('abc123'))
# True
Determinar se as cordas podem ser convertidas em números
As cadeias de valores negativos ou fracionários contêm períodos ou sinais de menos. Portanto, o resultado é falso para todos os métodos excepto isascii().
Embora verdadeiro para isascii(), não é adequado para determinar se uma cadeia pode ser convertida para um valor numérico, uma vez que é verdade mesmo que contenha 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 cordas podem ser convertidas em números de ponto flutuante com float(). Erro para cordas que não podem ser convertidas.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Com excepção do manuseamento, pode ser definida uma função que retorna verdadeiro quando uma cadeia pode ser convertida com 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 quiser determinar que um número separado por vírgula também é verdadeiro, use substituir() para remover a vírgula (substitua-a por uma cadeia vazia).
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 quiser apoiar a delimitação do espaço em branco, pode utilizar mais a substituição().
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