La función input()

Hasta este punto del curso, todos tus programas han sido “sordos”: ejecutaban operaciones con datos fijos (literales) que tú escribías directamente en el código, pero no tenían la capacidad de reaccionar a lo que un usuario real quisiera decirles. En el desarrollo real, prácticamente cualquier software necesita leer y procesar datos del exterior.

Para solucionar esto, Python nos presenta una función completamente nueva que actúa como el reflejo exacto en un espejo de nuestra vieja conocida print():

  • print() toma datos desde el interior del programa y los envía hacia la consola. No genera ningún resultado matemático almacenable (devuelve None).
  • input() hace el viaje inverso: detiene el programa y extrae datos desde la consola para introducirlos al código en ejecución, devolviendo un resultado sumamente útil.

La función input() es capaz de capturar lo que el usuario teclee y entregárselo directamente a tu programa, logrando que el código sea verdaderamente interactivo. Analicemos detenidamente el flujo de este programa básico:

print("Dime lo que sea...")
anything = input()
print("Hmm...", anything, "... ¿En serio?")

Al ejecutar este bloque en tu entorno de desarrollo, el intérprete realizará las siguientes acciones secuenciales:

  1. print("Dime lo que sea..."): Lanza un mensaje en la pantalla para indicarle al usuario que el sistema está esperando una interacción (esto se conoce técnicamente como un prompt).
  2. anything = input(): Python invoca a la función input(). En este momento, el programa se congela por completo. La consola cambia a “modo entrada”, verás un cursor parpadeando y el sistema se quedará esperando a que el usuario presione teclas y finalice la instrucción pulsando la tecla Enter.
  3. El almacenamiento obligatorio: Cuando el usuario presiona Enter, todo el texto digitado viaja hacia el programa como resultado de la función. Es absolutamente crucial asignar este resultado a una variable (como hicimos con anything =). Si olvidas este paso, los datos introducidos por el usuario caerán al vacío y se perderán para siempre en la memoria.
  4. print("Hmm...", anything, ...): El script se reanuda, toma el contenido guardado en la variable y lo proyecta combinado con otros textos.

La función input() con argumentos y su tipo de dato nativo

La función input() es más versátil de lo que parece a simple vista. Tiene la capacidad de interactuar con el usuario de forma directa, eliminando la necesidad de usar una función print() previa para lanzar el mensaje de aviso (prompt).

anything = input("Dime lo que sea...")
print("Hmm...", anything, "... ¿En serio?")

¿Cómo funciona esta variante?

  1. Invocamos a la función input() pasándole un único argumento: una cadena de texto con nuestro mensaje.
  2. Python muestra ese mensaje en la consola de inmediato, antes de abrir el modo de espera.
  3. El cursor se queda parpadeando justo al lado del texto, esperando las pulsaciones del teclado y el Enter del usuario.

Esta técnica simplifica notablemente la estructura de tu script, reduciendo líneas de código y haciéndolo mucho más limpio y legible.

El Experimento del Colapso

Debido a esto, tienes estrictamente prohibido usar el resultado directo de un input() para realizar operaciones aritméticas. Mira lo que sucede en este fragmento propuesto por el curso:

anything = input("Introduce un número: ")
something = anything ** 2.0
print(anything, "elevado a la potencia de 2 es", something)

Si ejecutas este código e introduces el número 4, el programa no calculará. En la segunda línea, el script se interrumpirá bruscamente y arrojará un error fatal de tipo en la consola:

  • TypeError: unsupported operand type(s) for **: 'str' and 'float'

Python te está diciendo con toda claridad: “No puedo elevar una palabra (un str) a una potencia matemática”. Para el intérprete, estás intentando multiplicar letras por números.

El Resultado de input():

Debemos establecer una regla absoluta y sin excepciones que el Python Institute evalúa bajo máxima presión en sus exámenes:

  • Regla de Oro (PCEP): El resultado de la función input() es SIEMPRE una cadena de texto (str).

No importa si el usuario teclea un entero como 5, un flotante como 3.14, o letras; Python empaquetará absolutamente todos esos caracteres dentro de un tipo str (es decir, el sistema leerá "5" o "3.14" con comillas invisibles).

Operaciones Prohibidas con input() y la Anatomía del Error

Si ejecutamos el código anterior e introducimos, por ejemplo, el número 5, la consola no nos da un resultado; nos arroja un reporte de colapso técnico llamado Traceback:

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    something = anything ** 2.0
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'float'

¿Cómo se lee este reporte de error? (Enfoque PCEP)

Cuando tu programa falle en los laboratorios o en los exámenes de simulación, no te asustes. Léelo de abajo hacia arriba:

  1. La última línea (TypeError): Te da el diagnóstico de la enfermedad. Te dice que estás usando tipos de datos incompatibles (str y float) para el operador de potencia ().
  2. La línea del medio (something = ...): Te muestra el fragmento exacto de código que causó el colapso.
  3. La primera línea (File "main.py", line 4): Te indica en qué archivo y en qué número de línea exacta ocurrió el accidente.

La Lógica de Python

Este comportamiento es completamente lógico. Piensa en esto: ¿cuál sería el resultado matemático de elevar la frase “Ser o no ser” a la potencia de 2? No tiene ningún sentido. No podemos calcularlo nosotros, y Python tampoco puede.

Moldeo de Tipos (Type Casting): La Solución Definitiva

Python ofrece dos funciones extremadamente simples y directas para tomar un dato de un tipo y forzarlo a convertirse en otro. Estas funciones son int() y float().

Sus nombres, al igual que los de las variables bien estructuradas, son autodocumentados:

  • La función int(): Toma un único argumento (por ejemplo, una cadena de texto: int(cadena)) e intenta transformar esos caracteres en un número entero. Si lo que está dentro de la cadena no parece un número entero (por ejemplo, int("hola") o int("3.14")), el programa fallará con un error.
  • La función float(): Hace exactamente lo mismo, pero intenta convertir el argumento en un número flotante (con punto decimal).

Esto es tan simple como efectivo. Al proceso de transformar un tipo de dato en otro de forma explícita se le conoce en programación como moldeo de tipos o type casting.

El Flujo de Datos Sincronizado

La ventaja de estas funciones es que no necesitas crear variables intermedias para hacer la conversión. Puedes anidar las funciones, pasando el resultado de un input() directamente como argumento de tu función de moldeo.

anything = float(input("Introduce un número: "))
something = anything ** 2.0
print(anything, "elevado a la potencia de 2 es", something)

¿Cómo viaja la información en la primera línea?

Para entender cómo fluyen los datos desde el teclado hasta la pantalla, imagina que Python resuelve esta línea desde el núcleo hacia afuera, como las capas de una cebolla:

  1. input(...) entra en acción: Muestra el prompt en la pantalla y congela el script. El usuario teclea, por ejemplo, el número 5 y presiona Enter.
  2. Nace el texto: La función input() extrae ese dato de la consola y lo convierte en el literal de cadena "5" (con comillas).
  3. El relevo de float(): De inmediato, esa cadena "5" es succionada por la función exterior float(). Esta función toma las letras, borra las comillas invisibles, le añade el formato decimal y lo transforma en el número real 5.0.
  4. La caja de almacenamiento: El número flotante 5.0 se deposita finalmente dentro de la variable anything.
  5. La matemática despierta: En la segunda línea, anything 2.0 se ejecuta sin problemas porque ahora Python está multiplicando un float por otro float ($5.0^2$).

Si corres este código en tu entorno e introduces un 0, un número negativo como -3 o un número gigante, el programa calculará la potencia perfectamente y la consola proyectará el resultado sin colapsar.

El Trío Dinámico en Acción: Pitágoras Interactivo

Tener en tu equipo de desarrollo la combinación de input()int()float() te abre un abono infinito de nuevas posibilidades. A partir de ahora, puedes escribir programas completos que acepten datos numéricos del exterior, los procesen matemáticamente y proyecten el resultado final en la pantalla.

Es cierto que, por ahora, estos programas son lineales y algo primitivos; no pueden tomar decisiones de forma autónoma ni reaccionar de manera diferente ante situaciones imprevistas (como cuando un usuario introduce datos incoherentes). Sin embargo, eso lo solucionaremos muy pronto en los siguientes módulos.

Evolución del Programa: Leyendo Catetos desde la Consola

Vamos a reescribir el script que calcula la hipotenusa, pero esta vez, en lugar de usar valores fijos en el código (3.0 y 4.0), permitiremos que el usuario introduzca las longitudes de los catetos directamente por el teclado.

leg_a = float(input("Ingresa la longitud del primer cateto: "))
leg_b = float(input("Ingresa la longitud del segundo cateto: "))
hypo = (leg_a**2 + leg_b**2) ** .5
print("La longitud de la hipotenusa es", hypo)

🔍 Análisis de Ejecución:

  1. El programa solicita dos veces consecutivas las medidas en la consola.
  2. Convierte de inmediato las entradas de texto en números flotantes (float) mediante el moldeo de tipos.
  3. Evalúa la fórmula matemática y almacena el resultado en la variable intermedia hypo.

⚠️ La debilidad del programa: Si ejecutas este código e introduces valores negativos (como -3 o -4), notarás que el programa calcula el resultado igualmente sin quejarse (5.0). Esto pasa porque cualquier número negativo elevado al cuadrado se vuelve positivo. Python no entiende de geometría del mundo real, solo obedece la aritmética. Ignoraremos esta flaqueza por ahora; aprenderemos a controlarla cuando veamos condicionales.

Optimización de Código: Eliminando Variables Redundantes

En el bloque de código del Sandbox, la variable hypo se utiliza con un único propósito: guardar el valor calculado para poder pasárselo a la función print() en la línea inmediatamente posterior.

Dado que la función print() tiene la capacidad de aceptar expresiones matemáticas complejas directamente como argumentos, podemos deshacernos de esa variable intermedia. Esto limpia el script y reduce el uso innecesario de etiquetas en la memoria de la computadora. El código optimizado y ultra-compacto queda de esta manera:

leg_a = float(input("Ingresa la longitud del primer cateto: "))
leg_b = float(input("Ingresa la longitud del segundo cateto: "))

# Pasamos la fórmula matemática directamente como argumento dentro de print()
print("La longitud de la hipotenusa es", (leg_a**2 + leg_b**2) ** .5)

¿Qué ganamos con esto?

  • El código es más corto y directo.
  • Evitamos crear un espacio en memoria (hypo) que solo íbamos a usar una vez.