Vous êtes sur la page 1sur 25

CC 1002: Introducción a la Programación

Condicionales

Nelson Baloian, José A. Pino


Problema
“Genera S.A. le paga $4.500 por hora a todos sus ingenieros de procesos recién
egresados. Un empleado típicamente trabaja entre 20 y 65 horas por semana. La
gerencia de informática le pide desarrollar un programa que calcule el sueldo de un
empleado a partir del número de horas trabajadas si este valor está dentro del rango
apropiado, de lo contrario debe dar un aviso.”
Condiciones simples y
compuestas (idea)
• Simples
• x = y: “x es igual a y”
• x < y: “x es estrictamente menor que y”
• x > y: “x es estrictamente mayor que y”
• x ≤ y: “x es menor o igual a y”

• Compuestas
• x=yyx<yyx>y
• x=yox<yox>y
• x=yox<y
• y≤xyx≤ z o z≤ xyx≤ y
Condiciones simples en
Python
• Valores booleanos: True y False
• Operadores condicionales
• x == y: “x es igual a y”;
• x < y: “x es estrictamente menor que y”;
• x > y: “x es estrictamente mayor que y”.
• x <= y :“x es menor o igual a y”
• x >= y: “x es mayor o igual a y”
• x != y: “x es distinto de y”

• Ejemplos:
• >>> 4 < 5
• -> True
• >>> 4 == 5
• -> False
Condiciones compuestas en
Python
• Conectores and, or y not

• Ejemplos:
• x == y and y < z
• x == y or y < z
• not x == y
Prioridad de conectores

• Primera prioridad: not

• Segunda prioridad: and

• Tercera prioridad: or

• Ejemplo:
• not x == y and y < z or y < z

es equivalente a:
• (((not x == y )) and (y < z) ) or (y < z)
La instrucción if en Python
• Escribir una función que reciba dos enteros y entregue el
mayor de los dos

# mayor : num, num -> num


# retornar el mayor de dos números
def mayor(x,y):
if x > y :
return x Forma General de la instrucción if :
else:
return y if condicion :
assert mayor(3,6) == 6 instrucción(es)
else :
intruccion(es)
Caso especial 1: cada
instrucción puede ser otro if
# mayor : num, num, num -> num
# retornar el mayor de tres numeros
def mayor(x,y,z):
if x >= y :
if x >= z :
return x
else:
return z
else:
if y >= z :
return y
else:
return z
Caso especial 2: else puede
omitirse
# mayor : num, num, num -> num
# retornar el mayor de tres numeros
def mayor(x,y,z):
m=x;
if y > m:
m=y
if z > m:
m=z
return m

con otra indentación (más compacto, igual resultado):


def mayor(x,y,z):
m=x;
if y > m: m=y
if z > m: m=z
return m
Con condiciones compuestas y
elif
# mayor : num, num, num -> num
# retornar el mayor de tres numeros
def mayor(x,y,z):
if x >= y and x >= z :
return x
elif y >= z :
return y
else:
return z

otra función:

# medio: num, num, num -> num


# retornar el valor intermedio de tres numeros
def medio(x,y,z):
if y<=x and x<=z or z<=x and x<=y:
return x
elif x<=y and y<=z or z<=y and y<=x:
return y
else:
return z
elif ordena el codigo (pero no
hace nada nuevo)
if condicion1 :
instrucción(es)1 if condicion1 :
else: instrucción(es)1
if condicion2 : elif condicion2 :
instrucción(es)2 instrucción(es)2
else : elif condicion3 :
if condicion3 : instrucción(es)3
instrucción(es)3
else :
if condicion4
Función que gana al cachipun
Jugando al cachipun
Funciones condicionales

• Una función puede retornar un valor True o False


# esIgualA5 : num -> bool
# determinar si n es igual a 5
def esIgualA5 (n):
return n == 5

# estaEntre5y6 : num -> bool


# determinar si n esta entre 5 y 6 (sin incluirlos )
def estaEntre5y6 (n):
return 5 < n and n < 6

numero = input(“Numero ? “)
if esIgualA5(numero) : print(“Es igual a 5”)
elif estaEntre5y6(numero) : print(“Esta entre 5 y 6”)
else : print(“Es menor a 5 o mayor o igual que 6”)
Diseño de Funciones
Condicionales
• Implementar un programa que retorne el saludo
correspondiente a la hora del día. Si son más de las 1 de la
mañana y menos de las 12 de la tarde, el programa
responderá ‘Buenos días!’; si menos de las 21 horas, el
mensaje será ‘Buenas tardes!’; y si es más de las 21,
entonces el programa deseará las buenas noches.
# saludo: int -> text
# determinar el saludo adecuado a la hora del día 1 <= h <= 24
def saludo (hora):
...
Función saludo

• Analizar el problema: podemos imaginarnos una recta


separada en regiones con limites en 1, 12, 21 y 24

• Casos de prueba: los límites (1, 12, 21 y 24) y además uno


por región (por ejemplo, 8, 16 y 23)

• Según el “contrato” del problema, llegan solo números


válidos (de 1 a 24)
Cuerpo de la función

• Diseñar condiciones: se requiere una instrucción if que


tiene tantas cláusulas como situaciones diferentes
Formular condiciones

• Las tres condiciones son hora entre [1 ,12), [12 , 21) y [21 ,
24]
Dar respuesta adecuada

• Producir con print la salida adecuada


Simplificar las condiciones

• Producir con print la salida adecuada


No hemos terminado!!!

• Si hubiéramos puesto una prueba con las 12 horas ->


respuesta incorrecta!

• Recordar siempre de poner pruebas en los límites y valores


“extraños”!

• Podemos escribir una nueva versión, con error corregido y


mejores condiciones:
Versión final
# saludo: int -> str
# Determinar saludo adecuado a hora del dia 1 <= h <= 24
# ejemplos:
# saludo(11) debe devolver “Buenos dias!”
# saludo(15) debe devolver “Buenas tardes!”
def saludo_depurado(hora)
if (hora < 12):
return “Buenos dias!”
elif (hora < 21):
return “Buenas tardes!”
else:
return “Buenas noches!”

# tests: proxima pagina


Versión final (cont.)
# tests:
assert saludo_depurado(1) == “Buenos dias!”
assert saludo_depurado(11) == “Buenos dias!”
assert saludo_depurado(12) == “Buenas tardes!”
assert saludo_depurado(15) == “Buenas tardes!”
assert saludo_depurado(21) == “Buenas noches!”
assert saludo_depurado(23) == “Buenas noches!”
assert saludo_depurado(24) == “Buenas noches!”
Mini-ejercicio
Escriba la función bisiesto(a) que, dado un año a retorne True si a es un año
bisiesto y False en caso contrario.

Un año es bisiesto si es divisible por 4. De esta regla, se exceptúan los años que
son múltiplos de 100. Pero de esta última regla se exceptúan los que son múltiplos
de 400.

Por ejemplo, 1900 no fue bisiesto, porque es múltiplo de 100; pero el 2000 fue
bisiesto, porque a pesar de ser múltiplo de 100, también es múltiplo de 400.
Para la próxima clase

(martes)

Leer capítulo 6 del apunte!!

Vous aimerez peut-être aussi