En esta nueva lección aprenderemos a pedir datos al usuario desde nuestro programa y a realizar nuestros primeros bucles. Como veremos, un bucle consiste en repetir un bloque de código varias veces sin tener que volver a escribirlo.
Entrada de datos desde la línea de comandos
A veces necesitaremos introducir datos en nuestro programa de forma interactiva, lo que significa que preguntaremos o pediremos al usuario cierta información (por ej. linux siempre nos pregunta antes de instalar un nuevo programa y debemos responder 'yes' o 'no'). En Python se utiliza la
función 'input', dicha función
devuelve el texto introducido por el usuario antes de pulsar
Enter. El texto tendrá
formato de cadena (string), por lo que no podrá ser utilizado directamente en caso de ser un número, habrá que convertir la cadena en número.
Conversión entre diferentes formatos de datos
Muchas funciones y métodos de Python sólo aceptan un tipo de datos, por ejemplo 'print' requiere cadenas o las operaciones aritméticas requieren números. Los tipos de datos que conocemos son: números, cadenas, listas y diccionarios. Simplificando, en Python existen
2 clases de números, los enteros (int) y los decimales (float). Por ello
es importante conocer cómo convertir una cadena (devuleta por la función 'input' por ejemplo)
en un número antes de realizar operaciones aritméticas,
o convertir un número en una cadena antes de imprimirlo.
Si intentamos elevar al cuadrado un número introducido mediante 'input' nos dará error, porque antes deberemos convertir la cadena devuelta por 'input' en un tipo de número (int o float).
Si el texto devuelto por 'input' contiene decimales, al intentar convertirlo en número entero nos devolverá un error. La solución es convertirlo a decimal primero. Pero cuidado, operar con números enteros es diferente que con números decimales, y los resultados pueden variar mucho.
Validación de datos con 'try' y 'except':
Como hemos visto en los ejemplos anteriores, muchas veces tenemos errores al intentar operar con los diferentes tipos de datos. Una forma de evitar problemas es
detectar los errores con la sentencia 'try:' y evitar que se ejecute el código que origina el error para
ejecutar un código alternativo especificado por 'except:'. Se podría traducir cómo:
"en caso de error... hacer lo siguiente...".
Notar cómo siempre hay diferentes maneras de hacer lo mismo...
Pero 'try' y 'except' no son milagrosos, no permiten por ejemplo corregir errores en la sintaxis de nuestro código, como puede ser olvidarnos un paréntesis o unas comillas.
Bucles 'while':
Por fin vamos a adentrarnos en el fascinante mundo de los bucles.
Un bucle es un bloque de código que es ejecutado varias veces, pero sólo hay que escribirlo una vez :)
La particularidad de
un bucle 'while' es que es ejecutado indefinidamente (bucle infinito) mientras la condición que le sigue es cierta (True). Como en el caso de las sentencias condicionales con 'if',
el código a ejecutar mientras se cumpla la condición debe ser tabulado 4 espacios para ser reconocido por Python. Veamos unos ejemplos.
Empecemos a aplicar los conocimientos adquiridos y veamos
cómo usar sentencias condicionales (if...elif...else...) dentro de un bucle, la tabulación será muy importante...
Ejercicio1. Programa para adivinar un número:
Para terminar la lección haremos dos ejercicios muy interesantes. El primero será
escribir un código que genera un número aleatorio entre 1 y 100, y nos preguntará sucesivante por el número hasta que lo adivinemos. Las primeras líneas (from random import randint y number=randint(1,100)) son necesarias para generar el número aleatorio guardado en la variable 'number' pero serán explicadas en próximas lecciones.
Pero, qué pasa si nos equivocamos y no escribimos un número? El programa devolverá un error a no ser que nos preparemos para ello:
Ejercicio2. Cantar una canción
En el último ejercicio de hoy,
crearemos un código que nos pida escribir una canción línea a línea y después la mostrará en pantalla 2 veces, imprimiendo línea por línea con un bucle 'while'.
Próxima lección: bucles 'for'