En esta clase se repasó la parte de condiciones, sentencias de selección y se empezó a trabajar con sentencias de repetición.
A continuación se muestran los códigos trabajados en clase o aquellos que se dejaron para que los intentase el alumnado.
Especialmente importante para la parte de bucles son los ejercicios cortos finales.
Realice un programa que lea el nombre de un mes (entero en minúsculas) y nos día la cantidad de días que tiene ese mes.
Aunque podríamos hacer un if con 12 casos, realmente hay 3 posibles valores resultantes válidos y podemos agrupar las condiciones. También es recomendable usar primero las condiciones más cortas y dejar para el else
la más larga ya que no hay que ponerla.
Realice un programa que actúe como una calculadora simple. Para ello debemos leer dos valores reales, que serán los operadores y una letra, operador. Las posibles operaciones permitidas son +, -, * o /.
Como resultado debe dar el valor de evaluar la operación o ERROR si no fue posible realizarla.
Es un ejemplo típico de sentencia de selección múltiple.
Modifique el ejemplo del principio del tema, para que como respuesta el programa indique cuántas soluciones reales tiene (0, 1, 2 o infinitas) y en caso de tener un número contable que indíquelas.
Antes de empezar a programar piense los posibles casos:
- Hay una situación en la que hay infinitas soluciones
- Hay dos situaciones en las que no hay solución (al menos real)
- Hay dos situaciones en las que solo hay una solución
- Hay una situación en las que hay dos soluciones diferentes
Lea los coeficientes y calcule el discriminante (bb-4ac). Posteriormente use una sentencia de selección múltiple para identificar los casos (únalos cuando sea posible) y calcule las soluciones.*
En este caso no se desarrolló el código pero si se identificaron los casos correspondientes:
- Hay una situación en la que hay infinitas soluciones
- Si a, b y c son 0
- Hay dos situaciones en las que no hay solución (al menos real)
- Si el discriminante es negativo
- Si a y b son 0 y c no lo es
- Hay dos situaciones en las que solo hay una solución
- a es 0 y b no lo es
- El discriminante es 0
- Hay una situación en las que hay dos soluciones diferentes
- El discriminante es positivo y mayor que 0 y a no es 0
Realice un programa que escriba N (siendo N leído de teclado) veces la frase "Hola Mundo!"
Ejemplo usado para introducir el bucle while
.
Realice un programa que escriba la tabla de multiplicar del 7.
Otro ejemplo usado para introducir el bucle while
.
Lee 20 números y nos diga cuántos 0s hay
Un elemento importante a destacar en este ejercicio, es que realmente no nos interesan los números concretos que hemos leído hasta el momento si no hay variable que nos almacene un resumen (de la parte que nos interese) de todos esos valores. Es decir, no nos interesa saber si el usuario ha metido 0 1 3 5 0 2 sino que hemos leído 2 ceros. Por ello, tendremos una variable contador_de_0s
que nos almacene ese valor mientras que los números leídos los podemos ir machacando. Este tipo de variable que resumen los datos contando los valores que cumplen cierta propiedad se denominan contadores.
Lee 10 números y nos diga su suma
Similar al ejercicio anterior pero en este caso no nos interesa contar, sino sumar (acumular) todos los valores. Estas variables se denominan acumuladores.
Modifique el anterior para calcular la media de los números leídos
Sabiendo la suma de los valores, calcular la media es bastante sencillo, ya que solo hay que dividir esa suma entre el número de valores (10).
Lee 30 números y nos muestre cuántos números pares y cuántos impares hay
Similar al primero de los cortos, pero ahora con dos contadores (uno para pares y otro para impares). Realmente el de impares podría deducirse del de pares.
Modifique el anterior ejercicio para que en vez de leer 30 números, lea hasta que el número sea negativo.
Este ejemplo es importante ya que añade el concepto de lectura adelantada. Esto ocurre cuando la condición del bucle depende de lo que leemos y entonces hay que leer un valor previo al bucle y nos obliga a un esquema similar al siguiente:
x = input(...) # Leemos
while condicion_que_depende_de_x: # Evaluar la condición
Código # Cálculos
x = input(...) # Leemos de nuevo
Modifique el 3 (media) para que acabe cuando leamos un 0
En este caso como en el ejercicio anterior hay que emplear lectura adelantada. Además, como dividimos entre la cantidad de veces que leemos, hay que controlar si no se ha leído ningún valor correcto:
Lee un texto de 20 letras (una a una) e indique si aparece una vocal o no.
En este ejercicio necesitamos una variable de las llamada centinelas (o flags
) que solo tiene dos valores, True
si ha ocurrido un evento o False
si no. Inicialmente la ponemos a falso ya que no se ha leído nada y cuando se detecte el evento (lectura de una vocal) la ponemos a cierto.
Modifique el 7 para que lea a lo sumo 20 letras (cuanto sepa si hay debe parar).
Una forma sencilla de resolver este ejercicio es añadiendo la condición de que no se haya leído ninguna vocal al bucle (ese valor está almacenado en la variable centinela hay_vocales
).
Hacer un programa que lea dos números pero deben ser diferentes. Si se leen dos números iguales se debe repetir la petición de valores tantas veces como sea necesaria hasta que consigamos que sean diferentes.
Este ejemplo es peculiar ya que la condición del bucle depende de los valores leídos y habría que hacer lectura adelantada, pero lo que ponemos como lectura adelantada y el contenido del bucle completo es igual. Para estos casos nos podemos ahorrar la lectura adelantada e inicializar las variables de forma que al inicio entre la primera vez.
Lea número hasta encontrar uno positivo y muestre el mayor.
Este ejercicio quizás es uno de los más complejos de estos cortos:
- Necesitamos lectura adelantada (hay que leer mientras el valor sea negativo).
- Necesitamos una variable para almacenar el mayor leído hasta el momento (variable
mayor
). - Esta variable se actualiza si leemos una mayor (
if mayor < n: mayor = n
). - El valor inicial de la variable debe ser el primer valor leido (la lectura adelantada).