jueves, 15 de septiembre de 2016

T1. INPUT (INTRODUCCIÓN DE DATOS): PREGUNTAS CON RESPUESTA.

VISTA PARCIAL DEL TEIDE DESDE LA ZONA DE GENOVÉS, EN LAS LADERAS DEL ACANTILADO DE LA CULATA, ICOD-GARACHICO, NORTE DE TENERIFE.

      Por fin llegamos a la función de Python que permite al programador incluir intros de datos en su programa por parte de los usuarios, dando un paso más en la dirección hacia una programación interactiva, polivalente y eficaz. Y lo hacemos antes de empezar a trabajar con las funciones construidas o definidas por el programador. Recordemos que en Python, como en la práctica totalidad de los lenguajes de programación modernos, existen básicamente tres tipos de funciones: las propias del lenguaje, las builtins, las nativas o preconstruidas, que agrupan acciones básicas y de acceso directo; los módulos de las librerías o bibliotecas, que aglutinan funciones más estandarizadas y/o específicas según las librerías a las que recurramos en nuestros programas (math, tkinter, string, calendar, datetime, etc.), y que ya tocaremos con mayor profundidad en un blog aparte; y, finalmente, aquéllas funciones que construye el programador de acuerdo a las necesidades y requerimientos del programa en que se encuentre trabajando, mucho más plásticas y singulares.
A partir de ahora podremos introducir la función input() en nuestros nuevos programas aumentando significativamente su nivel de operatividad. Es ahora cuando tiene mayor sentido recurrir a las intros: podremos construir nuestros propios módulos y scripts, guardarlos en memoria bien calentitos en su carpeta/directorio correspondiente, y poder reutilizarlos siempre que queramos gracias, precisamente, a su capacidad de recibir datos distintos cada vez por parte del usuario.
Por cierto, ya que hemos recordado que son, así, muy por encima, las funciones preconstruidas en Python, builtins o nativas, ¿qué tal si le echamos un vistazo a todas las que nos proporciona el programa en su ecuánime generosidad? Pues al toro: tecleemos en el shell del IDLE la siguiente instrucción: dir(__builtins__).
Tras lo cual se nos mostrará un listado de todas ellas. Y si queremos conocer un poco mejor alguna (o todas) función preconstruida en concreta, tecleamos: help("nombre de la función").
Para los más remolones de nosotros, aquí va una captura. Observemos que primero nos muestra todas las excepciones (errores) con las que cuenta Python y, a continuación, las funciones builtin tal cual estamos acostumbrados a verlas y emplearlas. Veremos también un ejemplo de llamada a la función help() para que nos vierta información sobre una función escogida al azar. Prácticamente es la misma que nos muestran las cajas de información que emergen cada vez que acudimos a ellas.


Vayamos entrando al trapo.
Como decimos, la función preconstruida input() nos va a permitir recabar, obtener información del usuario para poderla utilizar en nuestros programas.
Cuando empezamos a escribir la función, tal y como ocurre con el resto de las funciones nativas, se nos muestra un cuadro informativo como se muestra abajo:


En ella aparece el término prompt, que hace referencia a la pregunta que deseamos formular y que el usuario, obligatoriamente, debe responder en caso de que queramos que el programa continúe ejecutándose, puesto que la respuesta del usuario se tratará como un dato que el programa utilizará para realizar la función para el que ha sido diseñado. Es posible, aunque esto es una cuestión a parte, que el programador establezca una bifurcación mediante la implementación de una herramienta de control de flujo, el condicional if/elif/else, por ejemplo, para introducir una ruta de ejecución alternativa en el supuesto de que no se proporcione un dato correcto o esperado (reintentar = recursividad), o no se proporcione dato alguno (detención de la ejecución, "salto" a otro programa alternativo, introducción de un dato propuesto por el propio programa desde su base de datos de acuerdo a unos criterios preestablecidos por el programador como la usabilidad, preponderancia, interés, frecuencia, etc.).
A continuación, aparece una flecha que apunta a un objeto string, y es que la función input() nos devolverá como una cadena literal la respuesta del usuario, que mediante el recurso de una variable, podremos guardar en memoria para utilizarla posteriormente.
Veamos el siguiente esquema para aclarar mejor la idea:


Ahora nos vamos a ir al IDLE de Python y escribimos una notación input() básica para dilucidar conceptos:



Tengamos en cuenta que como parámetro de la función hemos pasado una string que representa la pregunta que queremos efectuar al usuario. Al pulsar ENTER, se nos reproduce debajo la pregunta y contigua a ella parpadea el prompt esperando, paciente, nuestra respuesta.



Escribimos, pues, una respuesta y al pulsar de nuevo ENTER, se nos veremos cómo se replica a continuación, tal y como nos pronosticaba la caja de información, devuelta como una string, una cadena de caracteres literales.

FINCAS DE PLATANERAS EN LAS VAGUADAS SUAVES DE LAS MEDIANÍAS DE LA GUANCHA, NOROESTE DE TENERIFE.
Mas, lamentablemente, una vez ejecutado el script, el dato aportado se pierde irremisiblemente. ¿Por qué? Pues por la razón más básica del funcionamiento de la programación. Seguro que ya sabemos cuál: como ya anticipábamos en el esquema anterior, NO hemos declarado previamente variable alguna que nos sirviera como "contenedor" o "almacén" que guarde el dato. ¡Ah!
Para hacerlo, debemos apoyarnos en la sintaxis siguiente: variable = input(prompt)
Así conseguimos que la respuesta proporcionada por el usuario quede almacenada en la variable gracias al operador = de asignación, como sabemos bien, permitiéndonos reutilizar el dato cuantas veces y ocasiones consideremos oportuno.



Veamos ahora la siguiente comparación:



Como vemos, en A se nos muestra el nombre que hemos escogido como respuesta, 'SONIA', aunque como NO la hemos guardado en memoria asignándola a variable alguna nada podemos hacer con el dato. En B, sin embargo, no se nos replica el nombre que, ésta vez, escogimos como respuesta, 'CARLOS', sino un prompt parpadeante señoreando una nueva línea de código vacía en espera de ser rellenada con código. Y esto es así porque tenemos almacenado el dato en la variable con el nombre de identificador 'nombre'.
Una vez almacenadas las respuestas, podremos implementar en nuestro bloque de código la función nativa print() a modo de código de retorno  que utilice las variables en las que las hemos guardado para mostrar a continuación un mensaje de vuelta o de receptación. Así, quedaría constancia que el dato recién introducido es el correcto y que se ha guardado en memoria como correspo0nde para su uso posterior.



Podemos determinar qué tipo de dato queremos obtener, es decir, sabiendo que la función input() nos va a devolver por defecto una cadena literal, hacer que en su lugar nos devuelva, por ejemplo, un dato de tipo int o float para, pongamos por caso, realizar operaciones aritméticas. Para hacerlo contamos con la sintaxis siguiente:



Con esta sintaxis podemos proceder como en el ejemplo siguiente:



COSTA ACCIDENTADA, CON ENTRADAS DE AGUA ENTRE FARALLONES Y ESCOLLERAS, DEL ACANTILADO DE LA CULATA, NOROESTE DE TENERIFE.


T1. INPUT (INTRODUCCIÓN DE DATOS): PREGUNTAS CON RESPUESTA.

VISTA PARCIAL DEL TEIDE DESDE LA ZONA DE GENOVÉS, EN LAS LADERAS DEL ACANTILADO DE LA CULATA, ICOD-GARACHICO, NORTE DE TENERIFE.

      Por fin llegamos a la función de Python que permite al programador incluir intros de datos en su programa por parte de los usuarios, dando un paso más en la dirección hacia una programación interactiva, polivalente y eficaz. Y lo hacemos antes de empezar a trabajar con las funciones construidas o definidas por el programador. Recordemos que en Python, como en la práctica totalidad de los lenguajes de programación modernos, existen básicamente tres tipos de funciones: las propias del lenguaje, las builtins, las nativas o preconstruidas, que agrupan acciones básicas y de acceso directo; los módulos de las librerías o bibliotecas, que aglutinan funciones más estandarizadas y/o específicas según las librerías a las que recurramos en nuestros programas (math, tkinter, string, calendar, datetime, etc.), y que ya tocaremos con mayor profundidad en un blog aparte; y, finalmente, aquéllas funciones que construye el programador de acuerdo a las necesidades y requerimientos del programa en que se encuentre trabajando, mucho más plásticas y singulares.
A partir de ahora podremos introducir la función input() en nuestros nuevos programas aumentando significativamente su nivel de operatividad. Es ahora cuando tiene mayor sentido recurrir a las intros: podremos construir nuestros propios módulos y scripts, guardarlos en memoria bien calentitos en su carpeta/directorio correspondiente, y poder reutilizarlos siempre que queramos gracias, precisamente, a su capacidad de recibir datos distintos cada vez por parte del usuario.
Por cierto, ya que hemos recordado que son, así, muy por encima, las funciones preconstruidas en Python, builtins o nativas, ¿qué tal si le echamos un vistazo a todas las que nos proporciona el programa en su ecuánime generosidad? Pues al toro: tecleemos en el shell del IDLE la siguiente instrucción: dir(__builtins__).
Tras lo cual se nos mostrará un listado de todas ellas. Y si queremos conocer un poco mejor alguna (o todas) función preconstruida en concreta, tecleamos: help("nombre de la función").
Para los más remolones de nosotros, aquí va una captura. Observemos que primero nos muestra todas las excepciones (errores) con las que cuenta Python y, a continuación, las funciones builtin tal cual estamos acostumbrados a verlas y emplearlas. Veremos también un ejemplo de llamada a la función help() para que nos vierta información sobre una función escogida al azar. Prácticamente es la misma que nos muestran las cajas de información que emergen cada vez que acudimos a ellas.


Vayamos entrando al trapo.
Como decimos, la función preconstruida input() nos va a permitir recabar, obtener información del usuario para poderla utilizar en nuestros programas.
Cuando empezamos a escribir la función, tal y como ocurre con el resto de las funciones nativas, se nos muestra un cuadro informativo como se muestra abajo:


En ella aparece el término prompt, que hace referencia a la pregunta que deseamos formular y que el usuario, obligatoriamente, debe responder en caso de que queramos que el programa continúe ejecutándose, puesto que la respuesta del usuario se tratará como un dato que el programa utilizará para realizar la función para el que ha sido diseñado. Es posible, aunque esto es una cuestión a parte, que el programador establezca una bifurcación mediante la implementación de una herramienta de control de flujo, el condicional if/elif/else, por ejemplo, para introducir una ruta de ejecución alternativa en el supuesto de que no se proporcione un dato correcto o esperado (reintentar = recursividad), o no se proporcione dato alguno (detención de la ejecución, "salto" a otro programa alternativo, introducción de un dato propuesto por el propio programa desde su base de datos de acuerdo a unos criterios preestablecidos por el programador como la usabilidad, preponderancia, interés, frecuencia, etc.).
A continuación, aparece una flecha que apunta a un objeto string, y es que la función input() nos devolverá como una cadena literal la respuesta del usuario, que mediante el recurso de una variable, podremos guardar en memoria para utilizarla posteriormente.
Veamos el siguiente esquema para aclarar mejor la idea:


Ahora nos vamos a ir al IDLE de Python y escribimos una notación input() básica para dilucidar conceptos:



Tengamos en cuenta que como parámetro de la función hemos pasado una string que representa la pregunta que queremos efectuar al usuario. Al pulsar ENTER, se nos reproduce debajo la pregunta y contigua a ella parpadea el prompt esperando, paciente, nuestra respuesta.



Escribimos, pues, una respuesta y al pulsar de nuevo ENTER, se nos veremos cómo se replica a continuación, tal y como nos pronosticaba la caja de información, devuelta como una string, una cadena de caracteres literales.

FINCAS DE PLATANERAS EN LAS VAGUADAS SUAVES DE LAS MEDIANÍAS DE LA GUANCHA, NOROESTE DE TENERIFE.
Mas, lamentablemente, una vez ejecutado el script, el dato aportado se pierde irremisiblemente. ¿Por qué? Pues por la razón más básica del funcionamiento de la programación. Seguro que ya sabemos cuál: como ya anticipábamos en el esquema anterior, NO hemos declarado previamente variable alguna que nos sirviera como "contenedor" o "almacén" que guarde el dato. ¡Ah!
Para hacerlo, debemos apoyarnos en la sintaxis siguiente: variable = input(prompt)
Así conseguimos que la respuesta proporcionada por el usuario quede almacenada en la variable gracias al operador = de asignación, como sabemos bien, permitiéndonos reutilizar el dato cuantas veces y ocasiones consideremos oportuno.



Veamos ahora la siguiente comparación:



Como vemos, en A se nos muestra el nombre que hemos escogido como respuesta, 'SONIA', aunque como NO la hemos guardado en memoria asignándola a variable alguna nada podemos hacer con el dato. En B, sin embargo, no se nos replica el nombre que, ésta vez, escogimos como respuesta, 'CARLOS', sino un prompt parpadeante señoreando una nueva línea de código vacía en espera de ser rellenada con código. Y esto es así porque tenemos almacenado el dato en la variable con el nombre de identificador 'nombre'.
Una vez almacenadas las respuestas, podremos implementar en nuestro bloque de código la función nativa print() a modo de código de retorno  que utilice las variables en las que las hemos guardado para mostrar a continuación un mensaje de vuelta o de receptación. Así, quedaría constancia que el dato recién introducido es el correcto y que se ha guardado en memoria como correspo0nde para su uso posterior.



Podemos determinar qué tipo de dato queremos obtener, es decir, sabiendo que la función input() nos va a devolver por defecto una cadena literal, hacer que en su lugar nos devuelva, por ejemplo, un dato de tipo int o float para, pongamos por caso, realizar operaciones aritméticas. Para hacerlo contamos con la sintaxis siguiente:



Con esta sintaxis podemos proceder como en el ejemplo siguiente:



COSTA ACCIDENTADA, CON ENTRADAS DE AGUA ENTRE FARALLONES Y ESCOLLERAS, DEL ACANTILADO DE LA CULATA, NOROESTE DE TENERIFE.


lunes, 5 de septiembre de 2016