En este tema continuaremos estudiando los condicionales, profundizando en ellos y haciendo nuestro código más realista.
Hasta ahora, todos los datos que necesitábamos para hacer los ejercicios los introducíamos en el programa antes de ejecutarlo. Por ejemplo, copiamos el precio y el tamaño de las pizzas desde una tabla. Realmente es muy práctico tener ciertos datos en el código del programa.
Vamos a suponer que ejecutamos el programa al llegar por la mañana y abrir la pizzería. Es de suponer que habrá variables como el precio de las pizzas, los ingredientes, el número de mesas.. que no van a variar durante el día. Sin embargo... ¿Qué piensas sobre el número de clientes que hay sentados en cada mesa? ¿O el número de pizzas en cada pedido?
¿Crees que tiene sentido parar el programa y volver a ejecutarlo con los nuevos datos cada vez?
Vamos a ir mejorando nuestros programas permitiendo introducir datos. Para ello vamos a utilizar la instrucción 'input'
. Esta función pide al usuario que introduzca en la consola un número o un texto. Después, ese número o texto podemos almacenarlo en una variable convenientemente. Piensa si realmente es necesario definir previamente la variable.
Vamos con un ejemplo sencillo permitiendo al programa que salude al cliente. Importante: Cuando utilizamos input el notebook está bloqueado hasta que introducido el valor y pulsamos Enter.
## Ejemplo de programa con introducción de datos durante la ejecución
## En este ejemplo vamos suponer que el cliente va a hacer un pedido. Le vamos a preguntar por su nombre y a saludarlo.
print("Bienvenido a Pizzería Nazarí ¿Cómo te llamas?") ## Recuerda, print mostraba un texto o variable por pantalla
nombre_cliente = input() ## Con la instrucción input() pedimos la entrada de texto por consola
print("Me alegro de conocerte,",nombre_cliente, "¿Qué pizza quieres?")
Fíjate en el siguiente ejemplo como podemos unir la instrucción 'print'
que pregunta por el nombre y la instrucción 'input'
:
## Ejemplo de programa con introducción de datos durante la ejecución
## En este ejemplo vamos suponer que el cliente va a hacer un pedido. Le vamos a preguntar por su nombre y a saludarlo.
nombre_cliente = input("Bienvenido a Pizzería Nazarí ¿Cómo te llamas?")
print("Me alegro de conocerte,", nombre_cliente, "¿Qué pizza quieres?")
Vamos con otro ejemplo. Es bastante común cuando sales a comer quw tengas que dividir la cuenta entre el número de comensales. Para facilitar la tarea al cliente, podemos hacerno nosotros y mostrarle al cliente cuanto tiene que pagar cada uno bien por pantalla, en un ticket, etc.
Ahora que ya sabemos pedir información por pantalla podemos hacerlo de forma sencilla. Prueba el siguiente ejemplo:
## Sencillo ejemplo para dividir el importe total de la cuenta entre el número de comensales
## Vamos a suponer que el total de la cuenta es conocido y está almacenado en la variable "total_cuenta"
## Preguntamos el número de comensales mediante input
## Obtenemos el resultado
importe_total=100 ## Importe total a pagar por la mesa
numero_comensales = input("Introduce el número de comensales de la mesa")
importe_por_comensal=importe_total/numero_comensales
print ("Cada comensal tiene que pagar: ",importe_por_comensal)
Como ya te habrás dado cuenta, el ejemplo anterior no funciona. Visualiza el error y piensa...¿Qué puede estar fallando?. Recuerda en el tema 1 cuando hablábamos de los tipos de variables. Por defecto, cuando usamos 'input'
el valor que almacenamos es del tipo texto. Esto significa que aunque escribamos un "4" como número de comensales, el programa sólo entiende que has escrito texto. De forma sencilla, es como si intentases dividir 100€ entre "Plátano" o "Pera". ¿No hay solución posible, verdad?
Como comentamos en el primer tema Python no obliga a declarar una variable antes de usarla. Esto nos obliga a tener especial cuidado con el tipo de las variables para evitar errores.
Para solucionar el problema, le vamos a decir a Python que lo que introduzcamos por consola se espera que sea un número entero (recuerda, el número de comensales como vimos en el tema 1 es un número entero. No puede haber fracciones de personas comiendo en la Pizzería. Sería un poco raro.)
Para ello vamos a utilizar el comando int. La instrucción sería:
## De esta forma le decimos a Python que al crear numero_comensales la cree como entero (int)
numero_comensales = int (input("Introduce el número de comensales de la mesa"))
Es tu turno, reescribe el programa que calcula el importe a pagar por comensal del ejemplo anterior para que funcione.
## Sencillo ejemplo para dividir el importe total de la cuenta entre el número de comensales
## Vamos a suponer que el total de la cuenta es conocido y está almacenado en la variable "total_cuenta"
## Preguntamos el número de comensales mediante input
## Obtenemos el resultado
importe_total=100 ## Importe total a pagar por la mesa
## PON TU CÓDIGO AQUÍ ##
Vamos a calcular ahora el importe total de un pedido de un cliente con todo lo aprendido anteriormente. Utilizaremos 'input'
, 'print'
y algunos condicionales. En el siguiente tema mejoraremos este ejercicio utilizando bucles, pero de momento empezaremos poco a poco.
En la siguiente imagen tienes 3 pizzas del menú de nuestra pizzería. Simplemente vamos a preguntar por la pizza que quiere un cliente y cuantas unidades quiere. Ya habrá tiempo para mejorar este ejemplo y hacerlo más realista.
## Programa para calcular el importe total del pedido de un cliente
tipo_pizza=int(input("¿Qué número de pizza desea?"))
cantidad_pizzas=int(input("¿Cuantas quieres?")) ## Recuerda forzar la entrada a enteros (int)
## Condicionales
if (tipo_pizza==1):precio_pizza=6
elif (tipo_pizza==2):precio_pizza=7
elif (tipo_pizza==3):precio_pizza=8
else :print('Número de pizza incorrecto');precio_pizza=0
importe_total=precio_pizza*cantidad_pizzas
print ("Importe total a pagar:",importe_total, "€")
Ahora, reescribe el programa de modo que los condicionales sean con cadenas de texto y el cliente introduzca en lugar del número de pizza introduzca el nombre.
## Programa para calcular el importe total del pedido de un cliente
tipo_pizza=input("¿Qué pizza desea?"))
cantidad_pizzas=int(input("¿Cuantas quieres?")) ## Recuerda forzar la entrada a enteros (int)
## Condicionales
if XXXXXXXXXX
elif XXXXXXXXXXXXXX
else XXXXXXXXXXXXXXX
importe_total=precio_pizza*cantidad_pizzas
print ("Importe total a pagar:",importe_total, "€")
En este ejercicio, intenta implementar de la mejor manera que se te ocurra el siguiente árbol de decición Recuerda los condicionales booleanos (TRUE, FALSE). Puedes poner los datos que quieras en el código o utilizar la entrada por consola.
## Programa para calcular cómo atender la demanda de pizzas
#### ESCRIBE AQUí TU CODIGO ####
En este tema hemos practicado con la entrada de datos por consola. Hemos visto lo importante que es saber qué tipo de dato estamos introduciendo y los problemas que pueden surgir. Luego hemos ejecutado algunos ejemplos y modificado otros para resolver problemas. Al final, hemos conseguido pedirle a un cliente que nos diga qué pizza quiere y cuántas para generar el ticket con el importe total.
Por último, proponemos un ejercicio a resolver a partir de un árbol de decisión.