Verificando se uma string possui números. (Python)

Overview
Bem-vindo ao mundo da programação em Python! Hoje, vou compartilhar uma dica super útil: como verificar se uma string contém números de maneira simples e eficaz. Vamos explorar juntos duas técnicas poderosas, utilizando funções nativas e expressões regulares. Prepare-se para adicionar mais uma ferramenta ao seu kit de habilidades em Python!
Neste post mostro como uma forma simples de verificar se uma string contém algum número. Obviamente, não é a única forma, mas é esta é bem simples.
Para realizar esta verificação, vamos utilizar duas funções nativas do Python: Any e isdigit (str).
A sintaxe para a verificação é esta:
1any(char.isdigit() for char in <string que será verificada>)
Testando esta sintaxe em um console Python:
1any(char.isdigit() for char in "String sem números!")
2False
3any(char.isdigit() for char in "String com 1 número!")
4True
Explicando a sintaxe:
- Neste caso, a função any vai funcionar como se você estivesse fazendo um for, onde cada loop é um caractere da string;
- Cada caractere será testado para ver se ele é um número (str.isdigit). Se for, a função any retorna True. Sendo assim, qualquer tipo de número (positivo, negativo, inteiro, decimal, etc) vai ser reconhecido.
Imagino que você também não goste de ficar repetindo código por aí. Então podemos encapsular esta sintaxe em uma função:
1def tem_numeros(string):
2 """Verifica se a string informada possui um número.""""
3 return any(char.isdigit() for char in string)
Extra: Alternativa com Regex
Uma alternativa para a abordagem que utilizamos acima é uma expressão regular. O código fica um pouquinho mais complicado (em comparação), mas não o suficiente para inviabilizar.
A sintaxe para verificar com regex é:
1bool(re.search(r'\d', <string>))
Testando esta sintaxe em um console Python:
1import re
2bool(re.search(r'\d', "String sem números!"))
3False
4bool(re.search(r'\d', "String com 1 número!"))
5True
Explicando a sintaxe:
- re.search vai buscar a expressao (r"\d") na string e retorna um objeto com o resultado se encontrar algo ou None se a expressão não corresponder a qualquer parte da string analisada;
- bool(<>) vai interpretar o resultado e retornar True se existir alguma coisa ou False se o resultado for None.
- A expressão \d indica que estamos buscando apenas dígitos, ou seja, qualquer coisa entre 0 e 9, não importando a posição dele na string.
Como você pode perceber, a abordagem é bem parecida, o resultado é o mesmo, mas o regex deixa o processo levemente mais complicado.
Espero ter ajudado.