En esta clase se repasó la parte de condiciones y vimos las sentencias de selección.
A continuación se muestran los códigos trabajados en clase o aquellos que se dejaron para que los intentase el alumnado.
En esta clase vemos la estructura de control selectiva que nos permitirá decidir si un código se ejecuta o no atendiendo a una condición.
Se muestra como ejemplo un código básico para resolver una ecuación de orden 2. Esta solución se indica que puede tener posibles problemas si se aplica la raíz cuadrada a un número negativo (aunque Python maneja de forma nativa los números complejos con el tipo complex
) o si se intenta dividir entre 0, si a vale 0 (esto si es provoca un error). Esto demuestra que para ejecutar ciertos códigos, primero sus componentes deben cumplir ciertas condiciones
Como ejemplo de uso de la sentencia de selección simple, se muestra el código del valor absoluto que debe cambiar el signo si el número es negativo pero no hacer nada si es positivo.
Como próximo ejemplo se muestra un código que clasifica el número leído en positivo (incluyendo al 0) o negativo. Para esto es necesario utilizar una sentencia de selección binaria donde el mensaje puede ser uno entre dos posibles
En este caso se muestran varias alternativas para calcular el menor de dos números leídos de teclado. Todos son correctos, pero hay algunos mejores que otros:
Uno de los código a evitar es:
if a < b:
b = a
else:
b = b
print("El menor es:", b)
El principal problema de este código es que usa b = b
que realmente es código que no hace nada y no debería utilizarle.
Otro código poco recomendable es:
if a < b:
print("El menor es:", a)
else:
print("El menor es:", b)
En este caso repite el print
en ambas opciones del if
, lo cual no es recomendable. Si hay partes comunes, lo mejor es evitar repeticiones y sacarlo fuera (antes o después del if
atendiendo a la necesidad) y solo ponerlas una vez.
El resto de soluciones son adecuadas y quizás dependiendo del caso podría convenir una más que otra.
Realice un programa que pregunte la hora en formato 24h y nos devuelva esa misma hora en formato am/pm. am (Ante meridiem) representa las 12 primeras horas del día y pm (Post meridiem) las últimas 12 horas.
Aunque se pueden considerar más situaciones, en este caso hay tres posibles casos diferenciados:
- Menor de 12: las horas no cambian y se pone "am"
- Mayor de las 12: a las horas se les resta 12 y se pone "pm"
- Igual a 12: se pone "pm" sin restarle nada
Con lo visto hasta el momento este ejercicio hay que hacerlo con if
:
Aunque también se puede hacer de forma optimizada presuponiendo unos valores:
Según la Wikipedia un año es bisiesto si "es divisible entre 4, a menos que sea divisible entre 100. Sin embargo, si un año es divisible entre 100 y además es divisible entre 400, también resulta bisiesto."
Escriba un programa que dado un año, indique si es bisiesto o no.
Primero debemos recordar cómo se indicaba la divilidad en python. Usaremos la definición de que b divide a si al hacer la división entre a/b no da de resto 0 (es decir la división da un cociente entero). Eso en python se pone como a%b == 0
.
Una vez sabido eso es ver como plantear lo que dice el enunciado. Si observamos bien este código plantea 3 posibilidades
- Si es divisible entre 4 y no entre 100 => Bisiesto
- Si es divisible entre 100 y también entre 400 => En este caso si comprobamos solo entre 400 ya se validan ambas de un tirón => Bisiesto
- Resto de casos => No bisiesto
Las dos primeras se podrían unir en una única condición unidas con el operador or
o ponerlas como casos diferentes en un if
múltiple. En la siguiente solución se ofrece la priemra alternativa:
Realiza un programa que lea 3 números y diga cuál es el menor (use solo condiciones simples, sin and/or)
Este ejercicio se ha propuesto para que lo hagáis por vuestra cuenta y además en la práctica se hará uno similar. En todo caso, a continuación se facilita el código:
Un problema al que se enfrentan los ingenieros para el control remoto de estas sondas es que los mensajes sufren un enorme retraso debido a las distancias. Por ejemplo, las comunicaciones entre la tierra y la sonda Rosetta tenían un retraso de 24 minutos. Se nos solicita que se realice un programa que lea la hora de recepción de un mensaje (hora y minutos) y nos diga la hora en la que fue enviado y si fue en el mismo día o el anterior.
Este se mando en la actividad de la semana 3. Existen múltiples soluciones, voy a plantear una sencilla con if
anidados:
Como alternativa también se muestra otra solución con un if
simple:
Pasar de calificación numérica a texto
Esto aparece en las transparencias como ejemplo, pero ya que de las transparencias se puede copiar peor y por completitud, también lo pongo aquí.
Realice un programa que lea el año de nacimiento y diga a qué generación perteneces de acuerdo a la siguiente tabla:
Años | Generación |
---|---|
< 1946 | No considerados |
1946 - 1961 | Baby Boomer |
1962 - 1980 | Generación X |
1981 - 1996 | Generación Y (millenials) |
1997 - 2010 | Generación Z |
> 2010 | Generación T (táctil) |
Este es muy parecido al ejemplo anterior. Y de nuevo, lo importante es utilizar el conocimiento y en vez de usar cosas como elif 1946 <= año and año <= 1961:
y poner cosas como elif año <= 1961:
aprovechando el conomiento de que las condiciones previas son falsas.