Compruebe si una cadena es un número en Python

Isaac Tony 10 octubre 2023
  1. Utilice la función float() para comprobar si una cadena es un número en Python
  2. Utilice las funciones isdigit() y partition() para comprobar si una cadena es un número en Python
Compruebe si una cadena es un número en Python

Una cadena es una secuencia de caracteres entre comillas simples o dobles. Las cadenas que abarcan varias líneas, también conocidas como cadenas de varias líneas, se incluyen entre comillas triples.

Por otro lado, los números de punto flotante son uno de los tipos de datos numéricos integrados más comunes de Python. Un número float o de coma flotante puede describirse como un número con puntos decimales.

print(type(3.445))

Producción :

<class 'float'>

Utilice la función float() para comprobar si una cadena es un número en Python

Python proporciona funciones de conversión de tipos predefinidas que convierten un tipo de datos en otro. Estas funciones incluyen las funciones int(), str() y float() para convertir tipos de datos en tipos de datos enteros, de cadena y flotantes, respectivamente.

Además de crear un número de punto flotante insertando un punto decimal, los números de punto flotante también se pueden crear mediante la conversión implícita o explícita de una cadena a un número de punto flotante.

Python realiza automáticamente la conversión implícita sin la participación del usuario solo si los valores son compatibles. La conversión explícita del tipo de datos de cadena a un número de punto flotante es posible utilizando la función float() como se muestra en el código siguiente.

count = "22.23"
print(type(count))
r = float(count)
print(type(r))

Producción :

<class 'str'>
<class 'float'>

La conversión de tipos es un concepto importante en Python y en la programación en general. Esto es particularmente evidente cuando surge la necesidad de utilizar un tipo de datos en particular en un programa; en tal caso, la conversión de tipos puede convertir cualquier dato en el tipo de datos deseado.

Estos casos a menudo se pueden experimentar al realizar operaciones con archivos, como leer y escribir archivos en varios programas.

Mientras que en el fragmento de código anterior, hemos utilizado sin esfuerzo la función de un parámetro float() para convertir el tipo de datos de cadena en un tipo de datos numéricos flotantes, este método no está exento de limitaciones. Estas limitaciones incluyen el ValueError, que a menudo surge para convertir una cadena con una secuencia de caracteres a un tipo de datos flotantes.

El uso de la función flotante puede resultar en un error de OverFlow si se pasa un número fuera del rango de la función. El fragmento de código a continuación ilustra cómo surge el ValueError cuando la función flotante convierte una cadena no válida.

name = "developer"
rslt = float(name)
print(rslt)

Producción :

Traceback (most recent call last):
  File "<string>", line 2, in <module>
ValueError: could not convert string to float: 'developer'

El ValueError se puede evitar asegurándose de que la cadena que se está considerando para la conversión se vea como un número de punto flotante.

Otras instancias también pueden llevar al ValueError, que incluye espacios, comas o cualquier otro carácter no especial. Por lo tanto, siempre que se trabaje con archivos, es necesario comprobar de antemano si los valores de cadena son válidos y se pueden convertir en números de punto flotante.

Sin embargo, si los valores son demasiados, es ineficaz intentar comprobar todos los valores. Alternativamente, podemos crear una función que verifique si una cadena es un flotante válido que se puede convertir en un número de punto flotante.

Si la cadena no es válida, el programa debería generar una excepción en lugar de generar un error.

def is_valid_float(element: str) -> bool:
    try:
        float(element)
        return True
    except ValueError:
        return False

La función anterior acepta una cadena como argumento y comprueba si es una cadena válida que se puede convertir a un número de punto flotante. La función devuelve falso si la cadena no es una cadena válida que se pueda convertir en un número de punto flotante y verdadero en caso contrario.

Utilice las funciones isdigit() y partition() para comprobar si una cadena es un número en Python

Alternativamente, podemos usar la función isdigit() en lugar de la función float(). La función isdigit() devuelve verdadero si una cadena contiene sólo dígitos y falso si al menos un carácter no es un dígito.

Sin embargo, esta función devuelve falso si una cadena contiene un número flotante aunque un número de coma flotante sea una cadena válida.

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("4546.4646")

Producción :

String is not valid

Usaremos la función partition para asegurarnos de que la función isdigit() no devolverá una declaración falsa incluso cuando una cadena contenga un número de coma flotante.

Esta función nos permite separar la cadena que contiene un número de punto flotante en partes para verificar si son dígitos. Si ambas partes son dígitos, la función nos hará saber que esta es una cadena válida.

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234.34")

Producción :

234.34
String is also valid !

Tenga en cuenta que si la cadena contiene un dígito que no es un punto flotante, la función no necesitará particionar la cadena.

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234")

Producción :

string is valid

Por otro lado, si la cadena contiene un número de punto flotante que contiene un carácter o caracteres que no pueden considerarse dígitos, entonces el punto flotante no será una cadena válida. Una cadena válida, en este caso, se refiere a una cadena que se puede convertir a un número de punto flotante usando la función float().

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234.rt9")

Producción :

string is not valid !

La función isdigit() también devuelve verdadero para enteros y dígitos representados en forma exponencial y caracteres Unicode de cualquier dígito.

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("4546")

Producción :

String is valid

Hemos utilizado el método isdigit() junto con una función que devuelve un mensaje positivo si la cadena solo contiene números en el bloque de código de muestra anterior. Sin embargo, cuando la función se invoca con un argumento que no contiene ningún número, la función imprime un mensaje negativo, como se muestra en el código siguiente.

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("Pal Alto")

Producción :

String is not valid

Por lo tanto, usando la función isdigit(), podemos determinar fácilmente si una cadena es válida y se puede convertir a números de coma flotante. Una cadena que contiene espacios en blanco y símbolos no se puede convertir en un número de punto flotante.

Usando el método isdigit(), también podemos determinar si una cadena que contiene espacios en blanco es válida, como se muestra en el siguiente código.

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("$4546.343")

Producción :

String is not valid

Una cadena que contiene cualquier espacio en blanco tampoco es una cadena válida y no se puede convertir en un número de punto flotante.

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("45 8")

Producción :

String is not valid

Los números complejos se encuentran igualmente entre los tres tipos de datos numéricos integrados en Python. También podemos usar la función float() junto con la función complex() para determinar si una cadena que contiene un número complejo también se puede convertir a un tipo de datos de punto flotante.

La función complex() convierte enteros y cadenas en números complejos. Por lo tanto, utilizando ambas funciones, podemos confirmar que una cadena que contiene una secuencia de caracteres no se puede convertir a un número de punto flotante, ni se puede convertir a un número complejo.

Las funciones también pueden verificar si una cadena que contiene un número complejo se puede convertir a un número de punto flotante, como se muestra en el código a continuación.

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("hello"))

Producción :

False

Por el contrario, una cadena que consta de un número entero o de punto flotante se puede convertir en un número de punto flotante y un número complejo. Por lo tanto, si pasamos un argumento con la descripción anterior, la función probablemente devolverá True en su lugar.

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("456.45"))

Producción :

True

Una cadena que consta de un número entero es igualmente válida y se puede convertir en números complejos y de punto flotante. Por lo tanto, también obtendremos una declaración Verdadera.

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("456"))

Producción :

True
Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

Artículo relacionado - Python String

Artículo relacionado - Python Float