Logo Studenta

cortocircuito

¡Estudia con miles de materiales!

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

Continuar navegando