¡Explicación completa de input() en Python! Guía de entrada de usuario desde lo básico hasta lo avanzado

目次

1. Introducción

Python es un lenguaje de programación que combina una sintaxis simple con funciones potentes, y es utilizado por una amplia gama de desarrolladores, desde principiantes hasta avanzados. En particular, la función de recibir entrada del usuario es indispensable para crear programas interactivos.

Este artículo explica en detalle cómo recibir entrada del usuario en Python. Desde el uso básico de la función input(), hasta la conversión numérica, el procesamiento de múltiples entradas, el manejo de errores y el procesamiento avanzado de entradas, cubriendo todo de manera que sea fácil de entender para lectores desde principiantes hasta intermedios.

Al leer este artículo, adquirirás los siguientes conocimientos:

  • El uso básico de la función input() de Python
  • Métodos para entrada de cadenas y conversión numérica
  • Métodos para recibir múltiples valores
  • Procesamiento de errores en la entrada (try-except)
  • Procesamiento avanzado de entradas (entrada de archivo, argumentos de línea de comandos, entrada de contraseña)

¡Comprende bien el mecanismo de entrada de usuario en Python y aprende a crear programas prácticos!

2. Uso básico de la función input() en Python [Para principiantes]

Como método para recibir entrada del usuario en Python, la función más básica es input(). Al usar esta función, se puede obtener los datos ingresados por el usuario durante la ejecución del programa y almacenarlos en una variable.

En esta sección, se explica el funcionamiento básico de la función input(), así como cómo manejar cadenas y números.

2.1 Uso básico de la función input()

Al usar la función input(), se puede mostrar un mensaje al usuario en la consola (terminal) y recibir su entrada. A continuación, se muestra el ejemplo más simple de uso de input().

name = input("Por favor, ingrese su nombre: ")
print(f"¡Hola, {name}!")

Ejemplo de resultado de ejecución

Por favor, ingrese su nombre: Tarō
¡Hola, Tarō!

Mecanismo de funcionamiento

  1. Cuando se ejecuta input("Por favor, ingrese su nombre: "), el programa se pausa hasta que el usuario ingrese algo.
  2. Cuando el usuario ingresa y presiona la tecla Enter, ese valor se almacena en la variable name como una cadena (tipo str).
  3. Se puede mostrar el contenido ingresado en la pantalla usando la función print().

2.2 Cómo recibir números con input() (conversión de tipo)

Los datos obtenidos con la función input() siempre son una cadena (tipo str). Por ejemplo, aunque se ingrese un número, se trata como una cadena tal cual.

Ejemplo: Ingresar un número tal cual

age = input("Por favor, ingrese su edad: ")
print(type(age))  # str (tipo cadena)

Resultado de ejecución

Por favor, ingrese su edad: 25
<class 'str'="">

En el ejemplo anterior, input() obtiene age como “25” (cadena de tipo str), no como un número.

Si se desea tratarlo como un número, es necesario realizar una conversión de tipo.

Conversión a entero (tipo int)

Para recibir una entrada como entero, se usa la función int().

age = int(input("Por favor, ingrese su edad: "))
print(f"Tienes {age} años.")

Resultado de ejecución

Por favor, ingrese su edad: 25
Tienes 25 años.

Al usar int(), el valor ingresado por el usuario se trata como un entero (tipo int).

Conversión a decimal (tipo float)

Para ingresar decimales, se usa la función float().

height = float(input("Por favor, ingrese su altura (cm): "))
print(f"Tu altura es {height} cm.")

Resultado de ejecución

Por favor, ingrese su altura (cm): 170.5
Tu altura es 170.5 cm.

Al usar float(), se puede procesar correctamente números con punto decimal.

2.3 Puntos de atención y errores con input()

Al realizar la conversión de tipo con int() o float(), si el usuario ingresa datos que no son números, se produce un error.

Ejemplo en el que ocurre un error

age = int(input("Por favor, ingrese su edad: "))
Por favor, ingrese su edad: abc
Traceback (most recent call last):
  File "", line 1, in 
ValueError: invalid literal for int() with base 10: 'abc'

Se produce un error ValueError y el programa se cierra.
Para evitar este problema, es necesario implementar manejo de errores (procesamiento de excepciones). El manejo de errores se explica en detalle en secciones posteriores.

2.4 Resumen

  • La función input() es la función básica para obtener entrada del usuario.
  • Los datos obtenidos con input() siempre se tratan como una cadena (tipo str).
  • Para ingresar números, realizar la conversión de tipo con int() o float().
  • Al usar int() o float(), prestar atención a los errores de entrada y es deseable implementar manejo de errores.
年収訴求

3. Cómo recibir múltiples entradas en Python [Usando split/bucle]

En Python, es posible recibir múltiples valores en una sola entrada. En particular, hay métodos convenientes para obtener datos en forma de lista o para recibir entradas repetidas. En esta sección, explicamos el método usando split() y el método de entrada de múltiples líneas utilizando bucles.

3.1 Usando split() para ingresar múltiples valores en una línea

Normalmente, al recibir la entrada del usuario con input(), se trata como una sola cadena. Sin embargo, utilizando split(), es posible obtener múltiples valores separados por espacios y procesarlos como una lista.

Ejemplo de uso básico

values = input("Ingrese múltiples valores separados por espacios: ").split()
print("Valores ingresados:", values)

Ejemplo de ejecución

Ingrese múltiples valores separados por espacios: 10 20 30 40
Valores ingresados: ['10', '20', '30', '40']

Mecanismo de funcionamiento

  1. Se obtiene la cadena ingresada por el usuario mediante input().
  2. Utilizando .split(), se convierte en una lista separada por espacios (predeterminado).
  3. Como resultado, los valores se almacenan como una lista.

Con este método, es posible recibir datos de longitud variable del usuario.

3.2 Combinando split() con conversión de tipos

En el método anterior, todos los valores ingresados son cadenas (tipo str). Si se desea procesarlos como números, es necesario convertir cada elemento de la lista al tipo adecuado.

Ejemplo: Procesar como números

numbers = list(map(int, input("Ingrese enteros separados por espacios: ").split()))
print("Suma de los enteros:", sum(numbers))

Ejemplo de ejecución

Ingrese enteros separados por espacios: 5 10 15 20
Suma de los enteros: 50

Explicación

  • Después de convertir en lista con input().split(), se utiliza map(int, ...) para convertir cada elemento a entero (tipo int).
  • Se convierte el resultado de map en lista con list().
  • Se calcula la suma utilizando la función sum().

Este método es muy conveniente para procesar múltiples números de una vez.

3.3 Recibiendo entradas de múltiples líneas usando un bucle while

El método con split() solo procesa una línea de entrada. Sin embargo, si se desea que el usuario ingrese datos de múltiples líneas, se puede manejar de manera flexible utilizando un bucle while.

Método para recibir entradas de múltiples líneas

lines = []
print("Ingrese los datos (para finalizar, ingrese una línea vacía):")

while True:
    line = input()
    if line == "":  # Si se ingresa una línea vacía, finalizar
        break
    lines.append(line)

print("Datos ingresados:", lines)

Ejemplo de ejecución

Ingrese los datos (para finalizar, ingrese una línea vacía):
manzana
banana
naranjaDatos ingresados: ['manzana', 'banana', 'naranja']

Explicación

  1. Se crea un bucle infinito utilizando while True.
  2. El usuario ingresa valores con input().
  3. Cuando se ingresa una línea vacía (""), se sale del bucle con break.
  4. Todas las entradas se almacenan en la lista lines.

Con este método, el usuario puede ingresar un número libre de datos.

3.4 Recibiendo entradas un número fijo de veces usando un bucle for

Si se desea recibir entradas un número específico de veces, es conveniente usar un bucle for.

Ejemplo: Recibir 3 entradas

data = []
for i in range(3):
    value = input(f"Entrada {i+1}: ")
    data.append(value)

print("Datos ingresados:", data)

Ejemplo de ejecución

Entrada 1: Python
Entrada 2: Java
Entrada 3: C++
Datos ingresados: ['Python', 'Java', 'C++']

Puntos clave

  • Al usar un bucle for, se puede especificar claramente el número de entradas.
  • Mostrar el número de entrada como en f"{i+1} entrada" facilita la comprensión para el usuario.

3.5 Resumen

MétodoDescripciónVentajas
split() UsoConvertir entrada de una línea en listaFácil recepción de múltiples valores
split() + conversión de tiposConvertir entrada numérica en listaFacilita el procesamiento numérico
while bucleRecibir entradas de múltiples líneasPosible configurar libremente el número de entradas
for bucleRecibir entradas un número fijo de vecesControl claro del número de repeticiones

4. Manejo de errores en la entrada [Uso de try-except]

En Python, al recibir entrada del usuario, puede haber valores inesperados. Por ejemplo, si se pide un número pero se ingresa una cadena, el programa genera un error y se detiene. Para evitar esto, es importante implementar el manejo de errores usando try-except.

En esta sección, se explica el uso básico de try-except y métodos prácticos de manejo de errores.

4.1 Uso básico de try-except

En Python, usando try-except, se puede procesar adecuadamente el programa cuando ocurre un error (excepción).

Ejemplo básico

try:
    num = int(input("Ingrese un entero: "))
    print(f"Entero ingresado: {num}")
except ValueError:
    print("Error: ¡Ingrese un entero!")

Ejemplo de ejecución

Ingrese un entero: 10
Entero ingresado: 10
Ingrese un entero: abc
Error: ¡Ingrese un entero!

Mecanismo de funcionamiento

  1. En el bloque try:, se recibe la entrada con input() y se convierte con int().
  2. Si se ingresa un número, se continúa el procesamiento normalmente.
  3. Si se ingresa un valor no convertible como una cadena, ocurre ValueError y se ejecuta el procesamiento de except ValueError:.

De esta manera, incluso si ocurre un error, el programa no se bloquea y se puede mostrar un mensaje adecuado.

4.2 Usar un bucle while para seguir solicitando una entrada correcta

En el método anterior, al ocurrir un error solo se muestra un mensaje de error, pero también se usa comúnmente el método de repetir la solicitud hasta que se ingrese un valor correcto.

Ejemplo: Repetir hasta que el usuario ingrese un entero

while True:
    try:
        num = int(input("Ingrese un entero: "))
        break  # Salir del bucle si se ingresa correctamente
    except ValueError:
        print("Error: ¡Ingrese un entero!")

print(f"Entero ingresado: {num}")

Ejemplo de ejecución

Ingrese un entero: abc
Error: ¡Ingrese un entero!
Ingrese un entero: 12
Entero ingresado: 12

Puntos clave

  • Usar while True: para crear un bucle infinito.
  • Usar try-except para solicitar nuevamente la entrada si ocurre un error.
  • Si se ingresa correctamente, salir del bucle con break.

Con este método, el programa sigue funcionando hasta que el usuario ingrese en el formato correcto.

4.3 Procesamiento de múltiples entradas usando try-except

También al recibir múltiples valores, se puede procesar de manera segura usando try-except.

Ejemplo: Ingresar múltiples enteros separados por espacios

while True:
    try:
        numbers = list(map(int, input("Ingrese enteros separados por espacios: ").split()))
        break  # Salir del bucle si se ingresa correctamente
    except ValueError:
        print("Error: ¡Ingrese solo enteros!")

print(f"Lista de enteros ingresados: {numbers}")

Ejemplo de ejecución

Ingrese enteros separados por espacios: 10 20 30
Lista de enteros ingresados: [10, 20, 30]
Ingrese enteros separados por espacios: 10 abc 30
Error: ¡Ingrese solo enteros!

Explicación

  • Usar map(int, input().split()) para obtener múltiples enteros.
  • Usar try-except para solicitar nuevamente la entrada si no son números.

4.4 Usar finally para realizar procesamiento posterior

En try-except, hay un bloque finally que se ejecuta al final independientemente de si hubo un error o no.

Ejemplo: Procesamiento de liberación de recursos

try:
    num = int(input("Ingrese un entero: "))
    print(f"Entero ingresado: {num}")
except ValueError:
    print("Error: ¡Ingrese un entero!")
finally:
    print("Finalizando el procesamiento.")

Resultado de ejecución

Ingrese un entero: abc
Error: ¡Ingrese un entero!
Finalizando el procesamiento.

Usar el bloque finally: permite ejecutar procesamiento al final independientemente de la excepción, por lo que se utiliza para el procesamiento posterior de recursos.

4.5 Resumen

MétodoExplicaciónCasos de uso
try-exceptCapturar excepciones y realizar procesamiento de erroresVerificación simple de entrada
while + try-exceptRepetir la solicitud de entrada hasta obtener una correctaProcesamiento que continúa hasta que el usuario ingrese correctamente
try-except-finallyEjecutar procesamiento de errores + procesamiento posteriorGestión de recursos de archivos o bases de datos
侍エンジニア塾

5. Edición avanzada: Procesamiento de entrada avanzado

En Python, además de la función estándar input(), es posible recibir entrada del usuario de diversas maneras. En particular, la entrada desde un archivo, la obtención de argumentos de línea de comandos y la ocultación de entrada de contraseña son útiles al crear programas prácticos.

En esta sección, se explica el procesamiento de entrada avanzado utilizando sys.stdin.read(), argparse y getpass.

5.1 Entrada desde un archivo【sys.stdin.read()

En Python, en lugar de input(), es posible leer el contenido de un archivo como entrada estándar (stdin). De esta manera, se puede pasar el contenido del archivo al programa para procesarlo.

Método para obtener entrada desde un archivo

import sys

data = sys.stdin.read()  # Leer toda la entrada estándar
print("Datos ingresados:")
print(data)

Método de ejecución (terminal de Linux/macOS)

$ python script.py < sample.txt

De esta manera, al especificar < nombre_del_archivo, el contenido de sample.txt se lee con sys.stdin.read().

Usos

  • Programas para procesar grandes cantidades de datos (análisis de logs, conversión de datos)
  • Scripts que reciben archivos a través de tuberías

5.2 Recibir argumentos de línea de comandos【argparse

Al usar argumentos de línea de comandos, es posible pasar valores desde el exterior al ejecutar el script. Esto es conveniente cuando se desea cambiar flexiblemente el comportamiento del script.

Ejemplo básico usando argparse

import argparse

parser = argparse.ArgumentParser(description="Script para obtener el nombre del usuario")
parser.add_argument("name", help="Ingrese su nombre")
args = parser.parse_args()

print(f"¡Hola, {args.name}!")

Método de ejecución

$ python script.py Taro
¡Hola, Taro!

Recibir múltiples argumentos

parser.add_argument("age", type=int, help="Ingrese la edad")
args = parser.parse_args()

print(f"{args.name} tiene {args.age} años.")

Método de ejecución

$ python script.py Taro 25
Taro tiene 25 años.

Usos

  • Creación de herramientas de línea de comandos
  • Especificación de valores de configuración del script desde el exterior

5.3 Ocultar entrada de contraseña【getpass

Normalmente, al ingresar una contraseña con input(), se muestra directamente en la terminal. Para evitar esto, se utiliza el módulo getpass.

Entrada segura de contraseña usando getpass

import getpass

password = getpass.getpass("Ingrese la contraseña: ")
print("Se ingresó la contraseña")

Resultado de ejecución (la contraseña no se ve al ingresar)

Ingrese la contraseña: 
Se ingresó la contraseña

Usos

  • Scripts que priorizan la seguridad
  • Programas que requieren autenticación

5.4 Resumen

MétodoDescripciónUsos principales
sys.stdin.read()Leer el contenido del archivo como entrada estándarProcesamiento de datos, análisis de logs
argparseRecibir argumentos de línea de comandosHerramientas de línea de comandos
getpassOcultar entrada de contraseñaEntrada que prioriza la seguridad

6. Compatibilidad con Python 2 (Información complementaria)

En Python 3 se utiliza la función input() para obtener la entrada del usuario, pero en Python 2 existían dos funciones: input() y raw_input(). En entornos que utilizan Python 2, el método de procesamiento de entrada es diferente, por lo que es necesario tener precaución al manejar código antiguo.

En esta sección se explica la diferencia entre input() en Python 2 y Python 3.

6.1 input() y raw_input() en Python 2

En Python 2 había dos funciones de entrada diferentes: input() y raw_input().

FunciónComportamiento en Python 2Equivalente en Python 3
raw_input()Recibe la entrada como cadenaIntegrado en input()
input()Evalúa el contenido ingresado como expresiónEquivale a eval(input())

En Python 2, raw_input() equivale a input(), y en Python 3, el comportamiento de input() se integró en raw_input().

6.2 El peligro de input() en Python 2

La función input() en Python 2 tiene una especificación peligrosa que evalúa la entrada del usuario como código de Python.
Por ejemplo, consideremos el siguiente código.

# En el caso de Python 2
value = input("Ingrese algo: ")
print(value)

Si se ejecuta este código y el usuario ingresa 5 + 5, se calculará automáticamente y se mostrará 10.

Ingrese algo: 5 + 5
10

Esto implica un riesgo de seguridad porque permite ejecutar código arbitrario.
Por ejemplo, si el usuario ingresa algo como __import__('os').system('rm -rf /'), podría causar daños al sistema.

Alternativa segura

Al utilizar Python 2, se puede tratar la entrada del usuario como una cadena utilizando raw_input().

# Método seguro en Python 2
value = raw_input("Ingrese algo: ")
print(value)

En Python 3, input() tiene una especificación segura, por lo que este problema no ocurre.

6.3 Cómo ejecutar código de Python 2 en Python 3

Para hacer que un código escrito en Python 2 funcione en Python 3, es necesario cambiar raw_input() por input().
Sin embargo, si es difícil corregirlo manualmente, se puede usar la herramienta 2to3 para una conversión automática.

Conversión de código utilizando 2to3

Python 3 incluye una herramienta llamada 2to3 que puede convertir código de Python 2 a Python 3.

$ 2to3 old_script.py -w

De esta manera, raw_input() se reemplazará automáticamente por input().

6.4 Resumen

VersiónMétodo de entrada seguro
Python 2Utilizar raw_input() (input() es peligroso)
Python 3Utilizar input() (comportamiento seguro)
  • La función input() de Python 2 es peligrosa, por lo que no se debe usar.
  • raw_input() se integró en input() en Python 3.
  • Para convertir código antiguo de Python 2, utilizar la herramienta 2to3.

7. Resumen

En este artículo, hemos explicado en detalle los métodos para recibir entrada del usuario en Python, desde lo básico hasta lo avanzado. Cubrimos una amplia gama de temas, desde el uso de la función input() para principiantes hasta el manejo de errores y el procesamiento de entrada avanzado.

7.1 Resumen de los puntos del artículo

SecciónContenido
1. IntroducciónExplicar la importancia de usar input() para recibir la entrada del usuario
2. Lo básico de input()Métodos para entrada de cadenas, entrada numérica (int() / float())
3. Recibir múltiples entradasMétodos para recibir datos en formato de lista usando split() y entrada de varias líneas con un bucle while
4. Manejo de erroresCómo usar try-except para manejar los errores de forma adecuada
5. Procesamiento de entrada avanzadoEntrada desde archivo con sys.stdin.read(), argumentos de línea de comandos con argparse y entrada de contraseña con getpass
6. Diferencias con Python 2Diferencias entre raw_input() y input(), y métodos seguros de entrada en Python 2

7.2 Mejores prácticas para el procesamiento de entrada de usuario en Python

  1. Usar la básica input()
  • Si usas input(), puedes ingresar cadenas fácilmente.
  • Cuando recibas números, realiza la conversión de tipo con int() o float().
  1. Aplicar manejo de errores
  • Usa try-except para evitar que los errores de entrada del usuario provoquen la terminación inesperada del programa.
  • En la entrada numérica, maneja adecuadamente int() y float().
  1. Procesar múltiples entradas
  • Usa split() para obtener varios valores a la vez como una lista.
  • Usa un bucle while para recibir una cantidad arbitraria de líneas de entrada.
  1. Aprovechar métodos de entrada avanzados
  • Entrada de archivo: sys.stdin.read() para leer un archivo.
  • Argumentos de línea de comandos: argparse para pasar variables desde el exterior.
  • Entrada de contraseña: getpass para garantizar la seguridad.
  1. Considerar la compatibilidad con Python 2
  • En Python 2, usa raw_input() y evita usar input().
  • Al migrar a Python 3, usa 2to3 para convertir el código.

7.3 Pasos siguientes

Al aprovechar input() de Python, puedes crear programas más interactivos. Usa el contenido introducido en este artículo e incorpóralo a tus propios programas.

Si quieres aprender procesamiento de entrada más avanzado, se recomienda estudiar los siguientes temas.

  • Procesamiento de entrada con GUI (tkinter y PyQt, etc.)
  • Procesamiento de entrada de base de datos (sqlite3 y MySQL, integración)
  • Entrada de datos desde formularios web (formularios de Flask y Django)

Si puedes manejar libremente la entrada de usuario en Python, podrás aplicarlo al desarrollo de programas más avanzados como aplicaciones web o herramientas de procesamiento de datos.

¡Usa este artículo como referencia para dominar el procesamiento de entrada en Python de manera fluida! 🚀