Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Introducción a la Programación Primer Semestre de 2021 Evaluación de cortocircuito de expresiones lógicas 1 Evaluación de cortocircuito de expresiones lógicas Recordemos las tablas de verdad que definen a las operaciones lógicas negación (not), conjunción (and) y disyunción (or): p not p True False False True p q p and q True True True True False False False True False False False False p q p or q True True True True False True False True True False False False 2 Evaluación de cortocircuito de expresiones lógicas Ejercicio: Sea la función f definida de la siguiente manera: 1 def f(s:str): 2 if len(s)>0 and s[0]== 'A': 3 print('Eureka ') 4 else: 5 print('Me aburro ') 1. ¿Qué se imprime con estas invocaciones? (PensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensarPensar las respuestas) a) f('Algoritmos') b) f('Programas') c) f('') 2. Repetir el punto anterior, pero considerando esta definición de f: 1 def f(s:str): 2 if s[0]== 'A' and len(s) >0: 3 print('Eureka ') 4 else: 5 print('Me aburro ') 3 Evaluación de cortocircuito de expresiones lógicas Estas dos expresiones no son equivalentes: I len(s)>0 and s[0]=='A' I s[0]=='A' and len(s)>0 En lenguajes como Python, las expresiones lógicas se evalúan con cortocircuito, de izquierda a derecha: I False and EXP → False I True or EXP → True En ambos casos, la expresión lógica EXP no se llega a evaluar, porque con lo visto hasta ese momento (False and ..., o bien True or ...) ya alcanza para saber el resultado. (Repasar estos casos en las tablas de verdad de and y or.) Volviendo al ejemplo anterior, cuando s es un string vacío: I len(s)>0 and s[0]=='A' → False I s[0]=='A' and len(s)>0 → error El segundo argumento de and y de or sí se evalúa cuando es necesario, en los casos True and... y False or... 4 Evaluación de cortocircuito de expresiones lógicas Esta forma de evaluar expresiones lógicas es muy útil, y permite escribir código como este: 1 s:str = 'intro ' 2 i:int = 0 3 while i<len(s) and s[i]!='x': 4 i = i + 1 5 if i==len(s): 6 print('No hay ninguna x.') 7 else: 8 print('La primera x está en la posición ', i) La última vez que se evalúa la condición del ciclo, i<len(s) and s[i]!='x', la variable i tiene valor igual a len(s). (¿Se ve por qué? Conviene hacer un seguimiento paso a paso del ciclo para sacarse cualquier duda sobre esto.) Por eso, s[i]!='x' nos arrojaría un error. Pero gracias a la evaluación de cortocircuito, ese término no se llega a evaluar, porque antes i<len(s) arroja False, y en ese momento ya sabemos que False and... es False. 5
Compartir