Estructuras condicionales

Anuncio
Estructuras condicionales
Programación
http://progra.usm.cl
Objetivos de la clase
Presentar las sentencias if, if-elif e if-elif-else.
Enseñar el uso de estructuras condicionales.
Resolver ejercicios con estructuras condicionales.
Diapositivas
Los tipos de sentencias condicionales son presentados usando problemas sencillos relacionados con el
cálculo del promedio de notas de un alumno. Al mostrar cada programa, explique con detención cómo es
usada la sentencia condicional respectiva.
Problema 1
Escriba un programa que pida al usuario ingresar sus tres
notas, y lo felicite si su promedio es mayor a 80.
Nota 1: 45
Nota 2: 78
Nota 3: 68
Su promedio es 64
Nota 1: 79
Nota 2: 91
Nota 3: 74
Felicitaciones!
Su promedio es 81
A esta altura, los estudiantes deberı́an ser capaces de escribir por su cuenta la parte del programa que
lee la entrada y que calcula el promedio. Es una buena oportunidad para ponerlos a prueba.
Hay que tener cuidado en cómo calcular el promeedio para evitar errores al dividir y al redondear. La
solución en la diapo siguiente aproxima el promedio al entero más cercano.
Sentencia if
n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))
suma = n1 + n2 + n3
promedio = int(round(suma / 3.0))
if promedio > 80:
print 'Felicitaciones!'
print 'Su promedio es', promedio
Aquı́ se introduce la sentencia if.
Mencionar que if en inglés significa ((si)).
1
El if tiene una condición, que es una expresión lógica. Al llegar al if, la expresión es evaluada, y su
resultado decide si las sentencias son ejecutadas o no.
Éste es el primer ejemplo en que es necesario indentar. Explique que el primer print sı́ está dentro del
if mientras que el segundo no lo está.
Un error común es olvidar poner los dos puntos después de la condición.
No es legal que la lı́nea que sigue al if no esté indentada.
El estándar es usar cuatro espacios para indentar.
Problema 2
Escriba un programa que pida al usuario ingresar sus tres
notas, e indique si reprobó o aprobó.
Nota 1: 70
Nota 2: 25
Nota 3: 39
Usted reprobo con 45
Nota 1: 59
Nota 2: 44
Nota 3: 61
Usted aprobo con 55
Nuevamente los estudiantes deberı́an ser capaces de desarrollar la primera parte por sı́ solos.
También podrı́a ocurrı́rseles resolver el problema usando dos ifs, con condiciones promedio < 55 y
promedio >= 55.
Sentencia if-else
n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))
suma = n1 + n2 + n3
promedio = int(round(suma / 3.0))
if promedio < 55:
print 'Usted reprobo con', promedio
else:
print 'Usted aprobo con', promedio
Aquı́ se introduce la sentencia if-else.
Mencionar que else en inglés significa ((o si no)).
Todo else siempre está asociado a un if. Ambos deben partir siempre en la misma columna.
Problema 3
Escriba un programa que pida al usuario ingresar sus tres
notas, e indique si su promedio es pésimo (< 30),
mediocre (30 a 54), aceptable (55 a 79) o excelente (≥ 80).
Casos de prueba:
Nota 1: 32
Nota 2: 89
Nota 3: 91
Su promedio 71 es aceptable
Nota 1: 77
Nota 2: 100
Nota 3: 91
Su promedio 89 es excelente!
Este problema también puede ser resuelto usando varios ifs.
2
Sentencia if-elif-else
n1 = int(raw_input('Nota 1: '))
n2 = int(raw_input('Nota 2: '))
n3 = int(raw_input('Nota 3: '))
suma = n1 + n2 + n3
promedio = int(round(suma / 3.0))
print 'Su promedio', promedio, 'es',
if promedio < 30:
print 'pesimo'
elif promedio < 55:
print 'mediocre'
elif promedio < 80:
print 'aceptable'
else:
print 'excelente!'
Aquı́ se introduce la sentencia if-elif-else.
No es legal en Python usar else if ...:, y por eso la sentencia elif es necesaria. Como es una
contracción de else if, en español vendrı́a a ser algo como ((o si no, si)).
El uso de varios elifs encadenados hace que el programa sea mucho más claro. Si se usara varios ifs
desacoplados, no serı́a evidente a primera vista que el programa seguirá sólo una de las alternativas.
Ejercicio
Un año es bisiesto si es divisible por 4, excepto si es
divisible por 100 y no por 400.
Escriba un programa que indique si un año es bisiesto.
Ingrese un anno: 1988
1988 es bisiesto
Ingrese un anno: 2011
2011 no es bisiesto
Ingrese un anno: 1700
1700 no es bisiesto
Ingrese un anno: 2400
2400 es bisiesto
Este ejercicio está pensado para que lo resuelvan los estudiantes.
Tras leer el enunciado, analizar cuál es la condición de la regla del año bisiesto que hace que cada caso
de prueba entregue el resultado mostrado.
Solución 1
anno = int(raw_input('Ingrese un anno: '))
if anno %
print
elif anno
print
elif anno
print
else:
print
400 == 0:
anno, 'es bisiesto'
% 100 == 0:
anno, 'no es bisiesto'
% 4 == 0:
anno, 'es bisiesto'
anno, 'no es bisiesto'
Primera manera de resolver el problema. Se cubre el caso más especı́fico primero, y luego se va refinando
hacia el caso más general.
Explicar cuál es el flujo de ejecución para los casos de prueba presentados.
Solución 2
anno = int(raw_input('Ingrese un anno: '))
if anno % 4 == 0:
if anno % 100 == 0 and anno % 400 != 0:
print anno, 'no es bisiesto'
else:
print anno, 'es bisiesto'
else:
print anno, 'no es bisiesto'
Segunda manera de resolver el problema. Sirve para introducir sentencias de control anidadas.
3
En este caso, se cubre el caso más general primero, y luego es refinado con otro if.
Nuevamente, explicar cuál es el flujo de ejecución para los casos de prueba presentados.
Solución 3
anno = int(raw_input('Ingrese un anno: '))
if ((anno % 4 == 0 and anno % 100 != 0) or
anno % 400 == 0):
print anno, 'es bisiesto'
else:
print anno, 'no es bisiesto'
Tercera manera de resolver el problema. En este caso, una sola expresión lógica indica el camino a seguir.
El año es bisiesto si es divisible por 400, o si es divisible por 4 y no por 100.
La expresión puede abarcar dos lı́neas de código ya que hay un paréntesis abierto sin cerrar. Ésta es la
manera de continuar lı́neas en Python.
Además, se usa paréntesis para forzar la precedencia entre los operadores and y or.
Para el resto de la clase, puede encontrar ejercicios para resolver en http://progra.usm.cl/apunte/
ejercicios/1/index.html#estructuras-condicionales.
4
Descargar