Modulo 5 - Expressões Lógicas
Modulo 5 - Expressões Lógicas
Capítulo
5 EXPRESSÕES LÓGICAS
Este capítulo apresenta as expressões lógicas como uma preparação para vermos os
comandos condicionais e de repetição. São apresentadas as tabelas verdade para os
operadores lógicos: and, or, not. São apresentadas as expressões relacionais de
igualdade, desigualdade e pertinência.
>>> bool(1)
True
>>> bool(-10)
True
>>> bool(10)
True
>>> bool(0)
False
>>> a=True
>>> a and bool(2)
True
>>> True + 1
2
>>> False + 1
1
>>> True + True + False
2
© E.L.Favero Algoritmos em Python 38
>>> true+1
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module> true+1
NameError: name 'true' is not defined
>>>
>>> Bool(0)
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module> Bool(0)
NameError: name 'Bool' is not defined
Operadores Lógicos
not and or
Estes três operadores podem ser combinados para fazer expressões lógica complexas,
seguem alguns exemplos.
Tabelas Verdades:
not and or
not True = False True and True = True True or True = True
not False = True True and False = False True or False = True
False and True = False False or True = True
False and False = False False or False = False
© E.L.Favero Algoritmos em Python 39
O not é um operador unário, ele nega o valor. O and é um operador binário, ocorre entre
dois operandos. O and é sempre False exceto quando o valor dos dois operandos for True
então neste caso o valor dele também é True. O or é sempre True exceto quando o valor
dos dois operandos for False então neste caso o valor dele também é False.
Com estas tabelas podemos resolver expressões do tipo “((not A) and B) or C”. Se A=
B=C=True. O resultado será:
((not True) and True) or True =
( False and True ) or True =
False or True =
True
Quando temos múltiplas atribuições numa linha podemos também utilizar o comando de
atribuição múltipla, veja o código abaixo:
VF = [v-verdadeiro, f-falso]
para a em VF:
escreva('not', a, '=', not a)
>>>
Tabela Verdade not:
not True = False
not False = True
O pseudo código serve como uma notação informal para representar algoritmos, baseado
numa linguagem próxima da linguagem natural. A atribuição VF = [v-verdadeiro, f-falso] cria
ula lista com duas opções uma é o verdadeiro a outra é o falso. “para a em VF” é uma
expressão de pertinência: “para a pertencendo a um dos valores de VF”.
Este pseudo código pode ser traduzido para uma linguagem de programação que para nós
é Python.
Em Python:
print('Tabela Verdade not:')
TF = [True, False]
for a in TF:
print( 'not', a,'=', not a)
>>>
De forma similar podemos imprimir a tabela verdade do and e do or. Vamos agora fazer um
pseudo-código com duas variáveis a e b, que podem assumir os valores verdadeiro e falso.
Este comando “para a em VF: para b em VF” permite a combinação duas a duas das
variáveis a e b.
Em pseudo-código:
escreva('Tabela Verdade and:')
VF = [v-verdadeiro, f-falso]
para a em VF:
para b em VF:
escreva(a, 'and', b, '=', a and b)
>>>
Tabela Verdade and:
True and True = True
© E.L.Favero Algoritmos em Python 41
Este pseudo código é diretamente traduzido para a linguagem python. De forma similar
podemos imprimir a tabela do or.
>>> a=1;b=2
>>> a==b
False
>>> a==1
True
>>> a==2
False
>>> a!=2
True
>>> prova1=8;prova2=9;prova3=9.5
>>> prova1>7 and prova2>7 and prova3>7
True
>>> (prova1>7) and (prova2>7) and (prova3>7)
True
>>> x=3
>>> x+7>4
True
>>> (x+7)>4
True
a=4;b=2;c=10;d=5;f=4
print('a==b',a==b)
print('a!=b',a!=b)
print('a<b' ,a<b)
print('b>=a', b>=a)
print('b<=a', b<=a)
print('a==f',a==f)
print('c+1<d',c+1<d)
print('c<d+6',c<d+6)
print('c>=f+6',c>=f+6)
print('f>=c',f>=c)
print('f<=f<=f<=f<=f',f<=f<=f<=f<=f)
print('f<f+1<f+2',f<f+1<f+2)
>>>
© E.L.Favero Algoritmos em Python 43
Uma comparação pode usar vários operadores encadeados, por exemplo, x<=y<=z<=w é
equivalente a x<=y and y<=z and z<=w. Como a equivalência é a uma lista de operações
relacionais conectadas por and, quando a primeira condição for falsa as demais condições
não são testadas (shortcut evaluation).
>>> x = 3
>>> 1 < x < 9
True
>>> 10 < 3*x < 18
False
>>> x < 10 < x*10 < 50 > 12*x
True
>>> 9 > x <= 3
True
>>> 5 == x < 4
False
sal=900
salMaiorMil=sal>1000
print('maior que mil: ', salMaiorMil)
>>>
maior que mil: False
E5.2 Seja uma variável sal=2000. Crie uma variável lógica que é verdadeira se
sal>1000. Imprima o valor da variável.
E5.3 Crie uma variável aprovado que é verdadeira se todas as três provas (prova1,
prova2, prova3) são maiores que 7. Inicialize as variáveis com valor maior
que sete.
A,B,C,D=1,2,True,False
print('A>B and C or D =', A>B and C or D)
>>>
A>B and C or D = False
E5.6 Seja a atribuição múltipla: A,B,C,D=10,3,False,False. Mostre o valor da
expressão 'A>B and C or D'
A,B,C,D=5,1,True,True
print('A>B and C or D =', A>B and C or D)
>>>
A>B and C or D = True
E5.8 Seja a atribuição múltipla: A,B,C,D=5,1,False,False. Mostre o valor da
expressão 'A>B and C or D'