Verificando se uma string representa um valor numérico em Python

Ana Maria Gomes
6 minutos de leitura

Conteúdos do tutorial

Ao trabalhar com Python, você pode se deparar com situações em que precisa determinar se uma string representa um valor numérico, como um inteiro ou um ponto flutuante. Esse é um cenário comum ao lidar com entrada de usuário ou análise de dados. Neste artigo, exploraremos vários métodos para verificar se uma string pode ser considerada numérica em Python.

Usando Try-Except para Conversão Numérica

Uma das maneiras mais diretas de verificar se uma string é numérica é tentando convertê-la para um float. Se a conversão for bem-sucedida, a string é numérica. Aqui está uma função simples para fazer isso:

def e_numero(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

Este método é simples e eficaz. Ele pode lidar com a maioria dos formatos numéricos, incluindo notação científica. Embora alguns possam considerá-lo um pouco desajeitado, na verdade é bastante eficiente. O bloco try-except não introduz uma sobrecarga significativa, pois captura rapidamente a exceção mais comum sem uma busca extensiva por quadros de pilha.

Verificando Dígitos com isdigit()

Para strings que representam inteiros não negativos, você pode usar o método isdigit():

a = "03523"
print(a.isdigit())  # Saída: True

b = "963spam"
print(b.isdigit())  # Saída: False
Testar

Este método faz parte da API de strings do Python e é muito rápido. No entanto, ele é limitado a inteiros sem sinal e não funcionará para floats ou números negativos.

Expressões Regulares e Métodos Alternativos

Embora expressões regulares possam ser usadas para verificar se uma string é numérica, elas geralmente são mais lentas e mais complexas do que o método try-except. Aqui está um exemplo de uma abordagem com expressão regular:

import re

def e_numero_regex(s):
    """ Retorna True se a string for um número. """
    if re.match("^\d+?\.\d+?$", s) is None:
        return s.isdigit()
    return True
    
print(e_numero_regex('o')) #saída False
Testar

Esta função usa uma expressão regular para verificar um padrão que corresponde a um float. No entanto, ela não suporta notação científica e pode ser mais lenta do que o método try-except.

Outra alternativa é usar manipulação de strings:

def e_numero_repl_isdigit(s):
    """ Retorna True se a string for um número. """
    return s.replace('.','',1).isdigit()

Esta função remove um ponto decimal e depois verifica se a string restante é toda composta por dígitos. É um truque inteligente para floats, mas, como o método regex, falha em reconhecer a notação científica.

Comparativos e Melhores Práticas

Comparativos mostram que o método try-except é o único que lida corretamente com todos os formatos numéricos, incluindo notação científica. Ele também é competitivo em termos de velocidade, especialmente quando a string é de fato um número.

Em conclusão, embora existam várias maneiras de verificar se uma string representa um valor numérico em Python, o método try-except é o mais robusto e eficiente. Ele lida com vários formatos numéricos, incluindo notação científica, e tem bom desempenho em comparativos.

Lembre-se, ao lidar com entrada de usuário, sempre garanta que a entrada seja válida antes de prosseguir com a lógica do seu programa. Os métodos discutidos aqui podem ajudá-lo a validar a entrada numérica de forma eficaz.

Em resumo, para verificar se uma string representa um valor numérico em Python, o método try-except é a melhor prática. É simples, rápido e lida com uma ampla gama de formatos numéricos. Seja lidando com inteiros, pontos flutuantes ou números em notação científica, este método informará de maneira confiável se uma string é numérica.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial