Convertir cadenas en números y números en cadenas en Python

    Introducción

    Python le permite convertir cadenas, enteros y flotantes indistintamente de diferentes formas. La forma más sencilla de hacer esto es usar el básico str(), int()y float() funciones. Además de esto, también hay un par de otras formas.

    Antes de comenzar a convertir cadenas en números y convertir números en cadenas, primero veamos un poco cómo se representan las cadenas y los números en Python.

    Nota: Para simplificar la ejecución y mostrar estos ejemplos, usaremos el intérprete de Python.

    Instrumentos de String

    Los literales de cadena en Python se declaran rodeando un carácter con comillas dobles («) o comillas simples (‘). Las cadenas en Python son en realidad solo arreglos con un Unicode para cada carácter como un elemento en el arreglo, lo que le permite usar índices para acceder un solo carácter de la cadena.

    Por ejemplo, podemos acceder a caracteres individuales de estas cadenas especificando un índice:

    >>> stringFirst = "Hello World!"
    >>> stringSecond = 'Again!'
    >>> stringFirst[3]
    'l'
    >>> stringSecond[3]
    'i'
    

    Numéricos

    Un numérico en Python puede ser un integer, un floato un complex.

    Los enteros pueden ser números enteros positivos o negativos. Desde Python 3, los números enteros son ilimitados y prácticamente pueden contener cualquier número. Antes de Python 3, el límite superior era 231-1 para tiempos de ejecución de 32 bits y 263-1 para tiempos de ejecución de 64 bits.

    Los flotantes también tienen una longitud ilimitada, pero un número de punto flotante debe contener un punto decimal.

    Los números complejos deben tener una parte imaginaria, que se denota mediante j:

    >>> integerFirst = 23
    >>> floatFirst = 23.23
    >>> complextFirst = 1 + 23j
    

    Conversión de cadenas en números

    Usando la función int ()

    Si desea convertir una cadena en un número entero, la forma más sencilla sería usar int() función. Simplemente pase la cadena como argumento:

    >>> x = "23"
    >>> y = "20"
    >>> z = int(x) - int(y)
    >>> z
    3
    

    Esto funciona como se esperaba cuando pasa una representación de cadena de un entero a int(), pero tendrá problemas si la cadena que pasa no contiene un valor entero. Si hay caracteres no numéricos en su cadena, entonces int() generará una excepción:

    >>> x = "23a"
    >>> z = int(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '23a'
    

    Esta misma excepción se generará incluso si se pasa una cadena flotante válida:

    >>> x = "23.4"
    >>> z = int(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '23.4'
    

    los int() La función tiene otra característica útil además de convertir cadenas a enteros, también le permite convertir números de cualquier base a un entero de base 10. Por ejemplo, podemos convertir la siguiente cadena binaria en un entero de base 10 usando el base parámetro:

    >>> int('1101100', base=2)
    108
    

    Lo mismo se puede hacer para cualquier otra base, como hexadecimal (base 16):

    >>> int('6C', base=16)
    108
    

    Usando la función float ()

    La conversión de literales de cadena a flotantes se realiza mediante el float() función:

    >>> x = "23.23"
    >>> y = "23.00"
    >>> z = float(x) - float(y)
    >>> z
    0.23000000000000043
    

    Tenga en cuenta que el valor resultante no es del todo exacto, ya que debería ser 0.23. Esto tiene que ver con matemáticas de punto flotante problemas en lugar de la conversión de una cadena a un número.

    los float() La función ofrece un poco más de flexibilidad que la int() función ya que puede analizar y convertir tanto flotantes como enteros:

    >>> x = "23"
    >>> y = "20"
    >>> z = float(x) - float(y)
    >>> z
    3.0
    

    diferente a int(), float() no genera una excepción cuando recibe un valor numérico no flotante.

    Sin embargo, generará una excepción si se le pasa un valor no numérico:

    >>> x = "23a"
    >>> z = float(x)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: could not convert string to float: '23a'
    

    Mientras float() no tiene la capacidad de convertir números que no sean de base 10 como int() sí, tiene la capacidad de convertir números representados en notación científica (también conocida como notación electrónica):

    >>> float('23e-5')
    0.00023
    >>> float('23e2')
    2300.0
    

    Usando la función complex ()

    La conversión de cadenas literales a números complejos se realiza mediante el complex() función. Para hacerlo, la cadena debe seguir un formato específico. En particular, debe formatearse sin espacios en blanco alrededor del + o - operadores:

    >>> x = "5+3j"
    >>> y = "3+1j"
    >>> z = complex(x) + complex(y)
    >>> z
    (8+4j)
    

    Tener espacios adicionales entre los + o - Los operadores darán lugar a una excepción generada:

    >>> z = complex("5+ 3j")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: complex() arg is a malformed string
    

    Como el float() función, complex() también es más relajado en los tipos de números que permite. Por ejemplo, la parte imaginaria del número se puede omitir por completo y también se pueden analizar tanto los enteros como los flotantes:

    >>> complex("1")
    (1+0j)
    >>> complex("1.2")
    (1.2+0j)
    

    Sin embargo, como puede ver, esto no debe usarse como un reemplazo más flexible para int/float ya que agrega automáticamente la parte imaginaria del número a la versión en cadena.

    Conversión de números numéricos en cadenas

    Usando la función str ()

    los str() La función se puede utilizar para cambiar cualquier tipo numérico a una cadena.

    La función str() está disponible en Python 3.0+ ya que las cadenas en Python 3.0+ son Unicode por defecto. Sin embargo, esto no es cierto para las versiones de Python inferiores a 3.0, en las que para lograr el mismo objetivo, el unicode() se utiliza la función:

    >>> str(23)   # Integer to String
    '23'
    >>> str(23.3) # Float to String
    '23.3'
    >>> str(5+4j) # Complex to String
    '(5+4j)'
    

    Lo bueno de str() es que puede convertir cualquier tipo de número en una cadena, por lo que no necesita preocuparse por elegir el método correcto en función del tipo de número que está convirtiendo.

    Uso de la función format ()

    Otra forma de convertir números en cadenas es usar el format() función, que le permite establecer marcadores de posición dentro de una cadena y luego convertir otro tipo de datos en una cadena y completar los marcadores de posición.

    Para usar la función, simplemente escriba una cadena seguida de .format() y pasar los argumentos para los marcadores de posición.

    He aquí un ejemplo:

    >>> "My age is {}".format(21)
    'My age is 21'
    

    Los argumentos en el .format() También se puede hacer referencia a la función individualmente, utilizando sus posiciones o nombres de variable:

    >>> "You get {product} when you multiply {1} with {0}".format(5.5, 3, product=16.5)
    'You get 16.5 when you multiply 3 with 5.5'
    

    Tenga en cuenta que debajo del capó, el .format() la función simplemente usa str() para convertir los argumentos en cadenas. Básicamente, esta es una forma similar de convertir números en cadenas como en la sección anterior, pero .format() actúa como una función de conveniencia para formatear una cadena.

    Conclusión

    Python le permite convertir cadenas, números enteros y flotantes indistintamente de diferentes formas. La forma más sencilla de hacer esto es usando el básico str(), int()y float() funciones. Además de esto, hay un par de otras formas, como la format() función. Solo tenga en cuenta que el int(), float()y complex() Las funciones tienen sus limitaciones y pueden generar excepciones si la cadena de entrada no tiene el formato exacto que esperan.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *