目次
1. Introducción
Al programar en Python, la conversión de tipos de datos es una técnica sumamente importante. En particular, la habilidad de convertir entre cadenas y números en ambos sentidos es indispensable para la entrada/salida de datos y el procesamiento de cálculos. Por ejemplo, con frecuencia se presentan situaciones en las que se calculan como números las cadenas que el usuario introdujo en un formulario, o se formatean como cadenas los números resultantes de los cálculos para mostrarlos. Sin embargo, mezclar datos de tipos distintos puede provocar errores, por lo que quienes se inician en Python deben tener cuidado. En este artículo presentamos los métodos de conversión en Python «de cadena a número» y «de número a cadena» y, junto con ejemplos prácticos, explicamos en detalle el manejo de errores y cómo abordar casos especiales. Esperamos que sirva de ayuda para adquirir habilidades desde la programación básica hasta aplicaciones más avanzadas en Python. En la siguiente sección explicaremos en detalle los métodos básicos de conversión de tipos en Python.2. Conversión básica de tipos en Python
En Python, cuando los tipos de datos difieren, a menudo se limitan las operaciones directas, por lo que es necesario convertir los datos entre tipos distintos. Al comprender cómo convertir cadenas a números y viceversa, podrás escribir código más flexible y con menos errores. En esta sección, explicamos las conversiones de tipos básicas en Python usando int() y float().Conversión a enteros
Cuando un número se recibe como cadena, para realizar cálculos numéricos en Python primero es necesario convertir esa cadena a un entero o a un número de coma flotante. Por ejemplo, para convertir la cadena «42» en el entero42
, usa la función int()
como sigue.str_number = "42"
int_number = int(str_number)
print(int_number) # Salida: 42
De este modo, con la función int()
puedes convertir cadenas a enteros. Si la conversión se realiza con éxito, el valor ya puede usarse como número. Ten en cuenta que intentar convertir a entero una cadena que contiene un punto decimal, como "42.0"
, provocará un error. Para una conversión a entero, solo son válidos valores enteros; si contiene un punto decimal, debes usar float()
.Conversión a números de coma flotante
Un número de coma flotante es un tipo que puede conservar la parte decimal de un valor. En Python, con la funciónfloat()
puedes convertir una cadena en un número de coma flotante. Por ejemplo, para convertir la cadena «3.14» a un número de coma flotante, usa el siguiente código.str_float = "3.14"
float_number = float(str_float)
print(float_number) # Salida: 3.14
De este modo, al usar float()
puedes convertir cadenas a números de coma flotante. Además, también puedes convertir cadenas en notación exponencial con float()
; se admiten formatos como "1.23e-4"
.str_exp = "1.23e-4"
float_exp = float(str_exp)
print(float_exp) # Salida: 0.000123
Conversión de números a cadenas
Por el contrario, hay muchas situaciones en las que necesitas convertir un número a cadena. Por ejemplo, cuando quieres concatenar un número con otras cadenas para mostrarlo. En estos casos, utiliza la funciónstr()
.num = 42
str_num = str(num)
print("Resultado de convertir el número a cadena: " + str_num) # Salida: Resultado de convertir el número a cadena: 42
Así, la función str()
realiza la conversión de números a cadenas y permite manipular cadenas que incluyen números. Una vez comprendidas las conversiones básicas de tipos, como ampliación, veamos también cómo convertir otras bases numéricas y cadenas de ancho completo.
3. Casos avanzados: conversión entre múltiples bases y dígitos de ancho completo
Una vez comprendidas las conversiones básicas de tipos en Python, pasemos a casos más avanzados. En esta sección se explica en detalle cómo convertir a distintos sistemas (como binario y hexadecimal), así como el tratamiento de números que contienen caracteres de ancho completo.Conversión de binario, octal y hexadecimal
La funciónint()
de Python puede convertir no solo cadenas en base 10, sino también en base 2, 8 y 16. Para ello, se especifica la base (sistema) como segundo argumento de la función int()
. Por ejemplo, para convertir cadenas binarias o hexadecimales a enteros, se escribe así:binary_str = "1010" # Cadena binaria
octal_str = "12" # Cadena octal
hex_str = "a" # Cadena hexadecimal
int_binary = int(binary_str, 2)
int_octal = int(octal_str, 8)
int_hex = int(hex_str, 16)
print(int_binary) # Salida: 10
print(int_octal) # Salida: 10
print(int_hex) # Salida: 10
Así, las cadenas en base 2, 8 y 16 pueden convertirse a enteros con int()
indicando la base correspondiente. Esta funcionalidad es especialmente útil al trabajar con datos que usan distintos sistemas de numeración.Manejo de dígitos de ancho completo y caracteres especiales
Si una entrada del usuario contiene dígitos de ancho completo o caracteres especiales, al intentar convertirla directamente en Python pueden producirse errores. En particular, cuando en la entrada numérica en japonés se mezclan caracteres de ancho completo, a menudo Python no puede procesarlos correctamente, por lo que se recomienda usar el métodoreplace()
para convertir de ancho completo a ancho medio. A continuación, un ejemplo que convierte una cadena de ancho completo a ancho medio y luego a número.str_num_fullwidth = "12345"
str_num_halfwidth = str_num_fullwidth.translate(str.maketrans('0123456789', '0123456789'))
print(int(str_num_halfwidth)) # Salida: 12345
Con este método, también puedes convertir cadenas numéricas de ancho completo a números. Si también necesitas convertir el punto decimal de ancho completo, añade lo siguiente:str_float_fullwidth = "123.456"
str_float_halfwidth = str_float_fullwidth.translate(str.maketrans('0123456789.', '0123456789.'))
print(float(str_float_halfwidth)) # Salida: 123.456
Conversión de números en kanji
En Python, usando el módulo Unicode, es posible convertir algunos números en kanji a valores numéricos. Conunicodedata.numeric()
puedes convertir caracteres como 「一」 o 「百」 a números de coma flotante.import unicodedata
kanji_num = '五'
converted_num = unicodedata.numeric(kanji_num)
print(converted_num) # Salida: 5.0
Sin embargo, no admite números en kanji de varios caracteres (p. ej., 「十五」), por lo que si necesitas un procesamiento más complejo se recomienda usar bibliotecas adicionales o personalizar con expresiones regulares. Como ves, Python ofrece diversas formas de convertir cadenas numéricas. En la siguiente sección se explican en detalle cómo determinar si un valor de entrada es convertible y cómo manejar errores.4. Manejo de errores y validación de la entrada
En el procesamiento de datos, pueden darse casos en los que los datos introducidos por el usuario o los recibidos externamente no puedan convertirse correctamente a valores numéricos. Por ello, es importante determinar de antemano si los datos pueden convertirse a número y, en caso de que se produzca un error durante la conversión, aplicar un manejo adecuado. En esta sección explicamos los métodos de validación de la entrada y manejo de errores.isdigit()
y expresiones regulares para determinar si es un número
Como método para determinar por adelantado si una cadena puede convertirse a un valor numérico, se pueden usar el método isdigit()
de Python o expresiones regulares. isdigit()
devuelve True cuando la cadena está compuesta únicamente por dígitos, pero devuelve False si contiene un punto decimal o un signo negativo. Por ello, es útil cuando solo se quiere verificar enteros.def is_integer(input_str):
return input_str.isdigit()
# Ejemplo de uso
print(is_integer("123")) # Salida: True
print(is_integer("3.14")) # Salida: False
print(is_integer("-123")) # Salida: False
Por otro lado, para determinar números que incluyan números de coma flotante y negativos, resulta útil usar expresiones regulares. En el siguiente ejemplo, se configura para que también devuelva True cuando hay un “+” o “-” delante del número, así como para valores que incluyen un punto decimal.import re
def is_numeric(input_str):
return bool(re.match(r'^[+-]?d+(.d+)?$', input_str))
# Ejemplo de uso
print(is_numeric("123")) # Salida: True
print(is_numeric("-123.45")) # Salida: True
print(is_numeric("3.14.15")) # Salida: False
print(is_numeric("abc")) # Salida: False
De este modo, al usar expresiones regulares se puede determinar con mayor flexibilidad si algo es numérico, lo que resulta útil al procesar datos de entrada complejos.Manejo de errores: tratamiento mediante excepciones
En Python, si los datos no son adecuados al convertir una cadena a un número, se produce un error (ValueError
). Para capturar este error y continuar con la ejecución, lo habitual es manejar la excepción usando un bloque try-except
.
En el siguiente ejemplo, si se produce un error al intentar convertir una cadena a entero, se muestra un mensaje de error adecuado.def convert_to_int(input_str):
try:
return int(input_str)
except ValueError:
print(f"Error: '{input_str}' no se puede convertir a un entero.")
return None
# Ejemplo de uso
print(convert_to_int("123")) # Salida: 123
print(convert_to_int("abc")) # Salida: Error: 'abc' no se puede convertir a un entero.
De este modo, al incorporar el manejo de excepciones, el programa puede continuar funcionando sin detenerse incluso cuando se producen errores. Además, la retroalimentación al usuario es más clara y es más fácil tratar errores de entrada, como equivocaciones al escribir.
Si la validación de los datos de entrada y el manejo de errores se realizan correctamente, aumenta la fiabilidad del código. En la siguiente sección veremos cómo convertir de forma masiva los elementos de una lista.5. Cómo convertir en lote los elementos de una lista
Al procesar datos, puede haber casos en los que sea necesario convertir en lote a números los elementos de una lista compuesta por cadenas. Por ejemplo, los datos obtenidos de archivos CSV o de fuentes externas suelen guardarse como cadenas. En esta sección, presentaremos cómo realizar conversiones en lote usando comprensiones de listas de Python.Conversión en lote con comprensiones de listas
En Python, además de procesar repetidamente cada elemento de una lista mediante bucles, puedes usar comprensiones de listas para realizar la conversión de datos de forma concisa y eficiente. Una comprensión de lista es una forma de aplicar una operación específica a cada elemento de una lista y generar una lista nueva. Por ejemplo, para convertir una lista que contiene números en formato de cadena en una lista de enteros, puedes usar el siguiente código.str_list = ["10", "20", "30", "40", "50"]
int_list = [int(i) for i in str_list]
print(int_list) # Salida: [10, 20, 30, 40, 50]
En este ejemplo, gracias a la comprensión de lista [int(i) for i in str_list]
, cada elemento de str_list
se convierte a entero con la función int()
y se crea una nueva lista int_list
. Este método permite procesar grandes volúmenes de datos con poco código, mejorando la legibilidad y el rendimiento.Conversión en lote con manejo de errores
Si la lista contiene datos que no pueden convertirse (por ejemplo, cadenas no numéricas o caracteres especiales), se producirá un error. En ese caso, puedes incorporar condiciones o manejo de excepciones en una comprensión de lista para evitar errores de conversión. A continuación se muestra un ejemplo que convierte a enteros solo los elementos convertibles.str_list = ["10", "20", "abc", "30", "40"]
int_list = []
for i in str_list:
try:
int_list.append(int(i))
except ValueError:
print(f"Warning: '{i}' no se pudo convertir a un entero.")
print(int_list) # Salida: [10, 20, 30, 40]
En este código, se utiliza un bloque try-except
para convertir cadenas a enteros y, si no se pueden convertir, mostrar un mensaje de error. Al añadir a int_list
solo los elementos convertibles mediante el método append()
, el proceso continúa incluso si se producen errores y se obtiene el resultado de la conversión. La conversión en lote de listas es una técnica muy útil para procesar grandes volúmenes de datos. En la siguiente sección, resumiremos el artículo y organizaremos lo aprendido en esta ocasión.6. Resumen
En este artículo explicamos, desde lo básico hasta lo avanzado, los métodos de conversión en Python de «cadena a número» y de «número a cadena». Al comprender la importancia de la conversión de tipos en el procesamiento de datos y cómo realizarla de forma eficiente, se amplía el abanico de operaciones en la programación con Python. A continuación, resumimos brevemente el contenido de cada sección。Repaso del artículo
- Introducción
- Explicamos en qué situaciones se necesita la conversión entre cadenas y números. Mostramos por qué la conversión de tipos es importante en el cálculo numérico y en la visualización de datos.
- Conversión de tipos básica en Python
- Como métodos básicos de conversión de tipos, aprendimos a cambiar el tipo de datos entre cadenas y números utilizando las funciones
int()
,float()
ystr()
.
- Ejemplos avanzados: conversión de varias bases y de dígitos de ancho completo
- Presentamos cómo convertir números en base 2, 8 y 16 a enteros y cómo convertir caracteres de ancho completo a ancho medio para tratarlos como números. Además, explicamos cómo convertir numerales en kanji a valores numéricos utilizando
unicodedata.numeric()
.
- Manejo de errores y validación de la entrada
- Teniendo en cuenta que pueden producirse errores durante la conversión numérica, presentamos métodos para comprobar de antemano si un valor es numérico usando
isdigit()
y expresiones regulares, y cómo manejar los errores mediante el control de excepciones contry-except
.
- Cómo convertir de forma masiva los elementos de una lista
- Aprendimos cómo realizar conversiones en lote con comprensiones de listas y cómo actuar cuando se producen errores, adquiriendo habilidades para procesar de forma eficiente incluso cuando hay grandes volúmenes de datos。