Práctica 2.1: Sentencias condicionales
P2.1 - Sentencias condicionales¶
En esta práctica vas a transformar reglas sencillas en decisiones programables.
Resolverás ejercicios con if, if-else, if-elif-else, condiciones
compuestas y condicionales anidados. El resultado esperado es una colección de
programas pequeños, ejecutables y documentados, no solo una respuesta escrita.
La práctica sigue la progresión de la teoría de sentencias condicionales y reserva la depuración para comprobar que cada caso frontera elige la rama correcta.
1. Objetivos¶
- Construir expresiones booleanas con operadores de comparación y lógicos.
- Elegir la estructura de selección más clara para cada problema.
- Ordenar correctamente los rangos y proteger operaciones que puedan fallar.
- Probar casos normales, casos frontera y entradas que requieran una decisión especial.
- Comentar y documentar el código para que otra persona pueda revisar la lógica.
2. Relación con RA y criterios de evaluación¶
| Código | Descripción literal de la normativa |
|---|---|
| RA 3 | Escribe y depura código, analizando y utilizando las estructuras de control del lenguaje. |
| CE 3.a | Se ha escrito y probado código que haga uso de estructuras de selección. |
| CE 3.e | Se han creado programas ejecutables utilizando diferentes estructuras de control. |
Las evidencias se concretan así:
- CE 3.a: los ejercicios 2.1.1 a 2.1.10 deben incluir decisiones con
if,elifoelsey pruebas de sus casos normales y frontera. - CE 3.e: se entregan los diez archivos Python ejecutables y el
README.mdcon las salidas y comprobaciones realizadas.
3. Requisitos y recursos¶
- Python 3, un editor o IDE y una terminal para ejecutar los programas.
- Conocimientos de variables, tipos básicos, entrada por teclado, conversión
con
intofloaty operadores aritméticos. - Lectura previa de la teoría de sentencias condicionales.
- La presentación de condicionales como repaso visual.
- La teoría de depuración para preparar las evidencias de comprobación.
La práctica se centra en la selección. Salvo que un enunciado indique otra cosa, puedes suponer que los datos tienen el tipo solicitado. Aun así, debes rechazar explícitamente los valores que el propio enunciado declare inválidos, como una edad negativa o un divisor igual a cero.
4. Pasos a seguir¶
4.1. Preparar el trabajo¶
- Crea una carpeta de trabajo llamada
practica_u2_1_condicionalesy guarda cada ejercicio en un archivo independiente:ejercicio2.1.1.py,ejercicio2.1.2.py, hastaejercicio2.1.10.py. - Añade al principio de cada archivo un comentario breve con el enunciado y utiliza nombres de variables descriptivos.
- Ejecuta cada archivo desde la terminal con
python nombre_del_archivo.pyy conserva una ejecución válida para poder revisarla.
4.2. Traducir una regla a una decisión¶
- Separa la entrada, la decisión y la salida antes de escribir código.
- Escribe qué debe ocurrir en cada caso: por ejemplo, «divisor cero» y «divisor distinto de cero» son dos ramas diferentes.
- Elige
if,if-else,if-elif-elseo un anidamiento según el número y la dependencia de los casos. - Ordena los rangos desde el caso más específico o desde el límite inferior, pero de forma que la primera condición verdadera sea siempre la correcta.
- Prueba cada frontera con un valor inferior, el valor exacto y un valor superior. Anota el resultado esperado antes de ejecutar el programa.
4.3. Implementar y revisar los ejercicios¶
- Resuelve primero los ejercicios 2.1.1 a 2.1.4 para practicar decisiones binarias, comparación de texto, protección de divisiones y paridad.
- Continúa con los ejercicios 2.1.5 a 2.1.8 para combinar condiciones y clasificar valores por rangos.
- Termina con los ejercicios 2.1.9 y 2.1.10, que requieren varios casos y una selección dependiente de una decisión anterior.
- Después de cada ejercicio, revisa que no haya ramas inalcanzables, que todos los caminos produzcan una salida y que los mensajes sean comprensibles.
4.4. Probar y depurar¶
- Ejecuta cada programa con los valores normales y los límites indicados en el apartado de ejercicios.
- Si el resultado no coincide con lo previsto, inspecciona la condición, el orden de las ramas y los valores intermedios antes de cambiar el código.
- En al menos dos ejercicios, coloca un punto de ruptura y observa una variable durante la ejecución; guarda una captura o una breve descripción de la comprobación.
- Corrige los errores, vuelve a ejecutar los casos que fallaron y registra en
el
README.mdqué se comprobó.
5. Comprobaciones de finalización¶
- Los diez archivos se ejecutan sin errores con entradas válidas y muestran un resultado identificable.
- Se han probado los límites: 17, 18 y 19 años; el divisor 0 y un divisor no nulo; 0 y un número negativo o positivo en la comprobación de paridad.
- La clasificación de renta distingue correctamente los límites 10 000, 20 000, 35 000 y 60 000 euros.
- La condición del ejercicio 2.1.5 exige simultáneamente una edad superior a 16 años y unos ingresos de al menos 1 000 euros.
- La contraseña del ejercicio 2.1.2 se compara sin distinguir mayúsculas de minúsculas y no se muestra la contraseña almacenada como si fuera un dato real de producción.
- El ejercicio 2.1.10 solo permite un ingrediente adicional de la categoría elegida y muestra la base común de mozzarella y tomate.
- El código contiene comentarios o docstrings útiles, no comentarios que solo repitan literalmente cada instrucción.
6. Ejercicios y entregables¶
- Ejercicio 2.1.1 — Mayoría de edad. Pide una edad y muestra si la persona es mayor de edad. Comprueba al menos 17, 18 y 19.
- Ejercicio 2.1.2 — Contraseña. Guarda una contraseña de ejemplo, pide otra y muestra si coincide sin distinguir mayúsculas y minúsculas. Prueba una coincidencia con distinto uso de mayúsculas y una contraseña diferente.
- Ejercicio 2.1.3 — División segura. Pide dividendo y divisor. Solo calcula la división si el divisor no es cero; en caso contrario, muestra un mensaje de error y no intenta dividir.
- Ejercicio 2.1.4 — Paridad. Pide un entero y muestra si es par o impar.
Incluye el caso
0y al menos un número negativo en las pruebas. - Ejercicio 2.1.5 — Regla de tributación. Pide edad e ingresos mensuales. Indica que se tributa únicamente cuando la edad es mayor que 16 y los ingresos son iguales o superiores a 1 000 euros.
- Ejercicio 2.1.6 — Asignación de grupo. Pide nombre y sexo, normaliza la entrada y aplica esta regla: el grupo A reúne a las mujeres cuyo nombre empieza antes de la letra M y a los hombres cuyo nombre empieza después de la N; el resto pertenece al grupo B. Decide y documenta qué haces con una entrada vacía.
- Ejercicio 2.1.7 — Tipo impositivo. Pide la renta anual y muestra el porcentaje del tramo correspondiente: menos de 10 000 (5 %), de 10 000 a menos de 20 000 (15 %), de 20 000 a menos de 35 000 (20 %), de 35 000 a menos de 60 000 (30 %) y 60 000 o más (45 %).
- Ejercicio 2.1.8 — Evaluación de rendimiento. Lee una puntuación.
0.0es «Inaceptable»,0.4es «Aceptable» y0.6o más es «Meritorio». Para cualquier otra puntuación inferior a0.6, informa de que no es válida. Si la puntuación es válida, calcula el beneficio como2400 * puntuación. - Ejercicio 2.1.9 — Entrada a una sala de juegos. Pide la edad y calcula el precio: gratis para menores de 4 años, 5 euros desde los 4 hasta los 18 años incluidos y 10 euros para mayores de 18.
- Ejercicio 2.1.10 — Pizza. Pregunta si la pizza es vegetariana. Muestra el menú correspondiente —pimiento y tofu, o peperoni, jamón y salmón—, permite elegir un ingrediente y muestra el tipo de pizza y sus ingredientes finales, junto con mozzarella y tomate.
- Entregables. Entrega los diez archivos
ejercicio2.1.1.pyaejercicio2.1.10.py, unREADME.mdcon tu nombre o identificador, los casos de prueba utilizados y las decisiones tomadas para entradas límite, además de las evidencias de depuración solicitadas en el paso 4.4.
7. Solución orientativa¶
Una solución correcta puede organizarse en tres fases: leer los datos, evaluar
la condición y mostrar el resultado. En una decisión de dos caminos, la forma
general es «si se cumple la condición, muestra el caso A; en caso contrario,
muestra el caso B». Para más caminos, usa una cadena if/elif/else y
comprueba que los intervalos no se solapen de manera accidental.
| Ejercicio | Orientación para contrastar la solución |
|---|---|
| 2.1.1 | La condición de mayoría debe ser edad >= 18; prueba justo a ambos lados del límite. |
| 2.1.2 | Normaliza las dos cadenas antes de compararlas y no confundas = con ==. |
| 2.1.3 | Comprueba divisor == 0 antes de calcular dividendo / divisor; el caso de error no debe ejecutar la división. |
| 2.1.4 | Un número es par cuando el resto de dividirlo entre 2 es 0; el criterio también funciona con negativos. |
| 2.1.5 | La decisión necesita and, no or; la edad límite 16 no satisface «mayor de 16». |
| 2.1.6 | Normaliza el sexo y compara la primera letra del nombre solo después de comprobar que no está vacío. |
| 2.1.7 | Ordena los tramos de menor a mayor y usa límites coherentes; prueba los cinco valores frontera. |
| 2.1.8 | Acepta exactamente 0.0, 0.4 o valores desde 0.6; no conviertas una puntuación inválida en un nivel. |
| 2.1.9 | La cadena de condiciones debe distinguir menores de 4, edades hasta 18 y mayores de 18. |
| 2.1.10 | Primero decide el tipo de pizza y después valida el ingrediente dentro del menú elegido; la base común aparece siempre. |
Como comprobación adicional, compara tus resultados con la teoría, ejecuta de nuevo los casos frontera y revisa las evidencias. No se proporciona una única implementación obligatoria: en esta práctica se evalúan la lógica, la claridad, las pruebas y la documentación, no la copia de una solución literal.