A vida de um programador é cheia de tarefas repetitivas, uma delas é verificar se uma string (ou o input do usuário) é um número ou não. Este post mostrará algumas formas de fazer isso em Python, ou seja, vai ser rápido e fácil. 🙂
Os exemplos foram escritos utilizando a o prompt, mas se você quiser o fonte deles, está disponível no meu github.
A primeira forma de descobrir é utilizando a função isdigit da propria string, conforme exemplo abaixo:
>>> string_var = "raccoon ninja" >>> string_var.isdigit() False >>> string_var = "123" >>> string_var.isdigit() True >>> string_var = '-321' >>> string_var.isdigit() False >>> string_var = "1.23" >>> string_var.isdigit() False
Como pode ser percebido, esta função retornou true apenas quando a string era inteiramente composta por números. Qualquer coisa diferente de 0,1,2,3,4,5,6,7,8 e 9 retorna falso. Isso pode ser útil se você precisar fazer uma validação simples de um campo, que só pode receber números inteiros e positivos.
Todavia, é um pouco limitado se precisarmos validar números com casas decimais ou mesmo números negativos. Para resolver estes casos, existe uma abordagem um pouco diferente, conforme demonstrado abaixo:
>>> def is_number(num): ... ... """Tests to see if arg is number. """ ... ... try: ... #Try to convert the input. ... float(num) ... ... #If successful, returns true. ... return True ... ... except: ... #Silently ignores any exception. ... pass ... ... #If this point was reached, the input is not a number and the function ... #will return False. ... return False ... >>> string_var = "raccoon ninja" >>> is_number(string_var) False >>> string_var = "123" >>> is_number(string_var) True >>> string_var = "-123" >>> is_number(string_var) True >>> string_var = "-1.23" >>> is_number(string_var) True >>> string_var = "1.23" >>> is_number(string_var) True
Se declararmos uma função que tenta converter a variável string para float, conseguimos cobrir os casos de teste que não foram incluídos na utilização do isdigit. Realizei diversas pesquisas, mas parece que esta forma é a mais comum de ser feita e não gera impacto negativo na performance da aplicação (pendente de testes. estou acreditando no que li.)
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