HOWTO · Python
Cómo leer la entrada del usuario como números enteros en Python
Lea la entrada del usuario como números enteros en Python 3: convierta un único valor con int(input()), lea varios enteros de una sola línea con split() y map(), y gestione las entradas no válidas con try-except.
En esta página
En Python 3, la función input() siempre devuelve una cadena. Para trabajar con el valor introducido como un número, convierta esa cadena con int(). Este artículo muestra cómo leer un único número entero, cómo gestionar una entrada que no es un entero válido y cómo leer varios enteros de una sola línea.
Este artículo trata sobre Python 3. Python 2 utilizaba raw_input() para la misma tarea y llegó a su fin de vida en 2020, por lo que los ejemplos siguientes utilizan input() en todo momento.
Leer un único entero con int(input())
Lea primero la entrada como una cadena y luego conviértala:
user_input = input("Please enter an integer: ")
integer_value = int(user_input)
print("You entered:", integer_value)
print(type(integer_value))
Salida:
Please enter an integer: 42
You entered: 42
<class 'int'>
La conversión y la lectura suelen combinarse en una sola línea, que se comporta exactamente igual:
integer_value = int(input("Please enter an integer: "))
Si el usuario introduce algo que no es un número entero, como hello o 3.5, int() genera un ValueError y el programa se detiene. La siguiente sección muestra cómo gestionar ese caso.
Gestionar entradas no válidas con try-except
Envuelva la conversión en un bloque try-except para capturar el ValueError y volver a preguntar en lugar de que el programa falle:
while True:
user_input = input("Please enter an integer: ")
try:
integer_value = int(user_input)
print("You entered:", integer_value)
break
except ValueError:
print("That's not a valid integer. Please try again.")
El bucle sigue preguntando hasta que la conversión tiene éxito. Solo entonces break pone fin al bucle.
Salida:
Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10
Validar la entrada de esta manera es una buena práctica para los programas interactivos: un error tipográfico debería costarle al usuario una pregunta más, no toda la ejecución.
Leer varios enteros de una sola línea
Cuando un programa necesita varios números a la vez, permita que el usuario los escriba en una sola línea separados por espacios. split() divide la línea en fragmentos de cadena y map() convierte cada fragmento con int():
numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))
print(numbers)
print("Sum:", sum(numbers))
Salida:
Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108
Una comprensión de listas hace el mismo trabajo y es igual de habitual:
numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]
Si necesita un número fijo de valores, desempaquete el resultado directamente. Aquí el usuario debe introducir exactamente dos enteros:
a, b = map(int, input("Enter two numbers: ").split())
print("a =", a)
print("b =", b)
Salida:
Enter two numbers: 3 17
a = 3
b = 17
Introducir más o menos valores de los esperados genera un ValueError, así que combine este patrón con el bucle try-except de la sección anterior cuando el número de valores importe.
Qué acepta int() y qué rechaza
int() es más tolerante de lo que mucha gente espera. Ignora los espacios en blanco al principio y al final, acepta un signo + o - opcional y permite guiones bajos entre los dígitos:
print(int(" 42 "))
print(int("+7"))
print(int("1_000"))
Salida:
42
7
1000
Rechaza cualquier cosa que no sea un literal de número entero en forma de cadena, incluidos "3.5", "12a" y la cadena vacía "": todos ellos generan un ValueError. Si su entrada puede contener valores decimales, convierta con float() en su lugar, o use int(float(text)) cuando descartar la parte fraccionaria sea aceptable.
Conclusión
Leer enteros en Python 3 se reduce a un patrón: input() le da una cadena e int() la convierte en un número entero. Utilice un bucle try-except para que las entradas no válidas vuelvan a solicitarse en lugar de hacer fallar el programa, y recurra a split() con map() o a una comprensión de listas cuando necesite varios enteros de una sola línea.
FAQ
-
¿Cómo leo la entrada del usuario como un número entero en Python 3?
Utiliceint(input()):input()lee una línea como una cadena eint()la convierte en un número entero. -
¿Cómo leo varios enteros de una sola línea?
Divida la línea y convierta cada fragmento, por ejemplolist(map(int, input().split()))o[int(x) for x in input().split()]. -
¿Qué ocurre si el usuario introduce un valor que no es un entero?
int()genera unValueError. Captúrelo con un bloquetry-excepty vuelva a preguntar. -
¿Por qué no puedo hacer operaciones aritméticas directamente con el resultado de input()?
Porqueinput()devuelve una cadena, no un número. Sumar una cadena y un entero genera unTypeErrorhasta que convierte la cadena conint(). -
¿Cuál es la diferencia entre Python 2 y Python 3 para leer la entrada?
Python 2 leía la entrada de texto conraw_input(), mientras que Python 3 utilizainput(). La conversión conint()funciona igual en ambos, pero Python 2 ya no se mantiene, por lo que el código nuevo debería utilizar Python 3.