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 *