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:
any(char.isdigit() for char in <string que será verificada>)
Testando esta sintaxe em um console Python:
any(char.isdigit() for char in "String sem números!") False any(char.isdigit() for char in "String com 1 número!") True
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:
def tem_numeros(string): """Verifica se a string informada possui um número."""" 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 é:
bool(re.search(r'\d', <string>))
Testando esta sintaxe em um console Python:
import re bool(re.search(r'\d', "String sem números!")) False bool(re.search(r'\d', "String com 1 número!")) True
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.
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022