0% acharam este documento útil (0 voto)
23 visualizações8 páginas

Modulo 5 - Expressões Lógicas

Expressões Lógicas

Enviado por

Eloi favero ctic
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
23 visualizações8 páginas

Modulo 5 - Expressões Lógicas

Expressões Lógicas

Enviado por

Eloi favero ctic
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 8

© E.L.

Favero Algoritmos em Python 37

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.

5.1.1 Tipo de dados BOOL


O nome Bool vem de George Boole (1815-1864), matemático inglês, criador da
"Álgebra Booleana" de onde vem a lógica proposicional ou boleana, a lógica das tabelas
verdade. É a lógica do pensamento humano. Sempre utilizamos frases em linguagem
natural com (e), (ou) e (não).
Por exemplo, se dizemos “compre alho e cebola”. Neste caso queremos dizer
“compre alho e também cebola”.
Se dizemos “tempere com sal ou com açúcar”. Queremos dizer “tempere com um
dos dois: ou sal, ou açúcar”.
Podemos fazer frases em linguagem natural com vários conectivos lógicos: “vamos
pescar se faz sol e não venta ou se chove e está quente”. Aqui temos quatro conectivos
lógicos: e, não, ou, e.
O tipo lógico bool é uma especialização do tipo int. Os valores do tipo bool são:
True (int diferente de 0) e False (int igual a 0). True é verdadeiro e False é falso. CUIDADO
True é com T maiúsculo e False é com F maiúsculo, senão dá erro. bool() é a função que
converte inteiro para Bool.

>>> 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

5.2 Operadores lógicos


Os três operadores lógicos da linguagem natural (não, e, ou) são transportados para o
pensamento computacional com os operadores lógicos: not, and, or.

Operadores Lógicos
not and or

Estes três operadores podem ser combinados para fazer expressões lógica complexas,
seguem alguns exemplos.

>>> True and False


False
>>> True and True
True
>>> True and True and not True
False
>>> True or False and True
True
>>>

5.2.1 Tabelas Verdade


Com o auxilio das tabelas verdade, podemos avaliar as expressões lógicas,
reduzindo uma expressão num valor final que será verdadeiro ou falso.

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

Agora se A=B=C=False, o resultado será


((not False) and False) or False=
(True and False) or False=
False or False=
False

Agora se A=C=False, B=True, o resultado será:


((not False) and True) or False=
(True and True) or False=
True or False=
True

5.2.2 Prioridade na parentização implícita


Se temos uma expressão “not A and B or C” sem parenteses, como ela será
avaliada? Por exemplo, se A=False; B= True; C=True. A parentização correta é
((not A) and B) or C. Primeiro o not, depois o and e depois o or, nesta ordem.
Fazendo um paralelo com a aritmética, -A*B+C é parentizado de forma
similar((-A)*B)+C. Se for B+C* -A será parentizada B+(C*(-A)). Assim, B or C and not
A fica B or (C and (not A)).

>>> A=False; B= True; C=True


>>> not A and B or C
True
>>> not (A and B or C)
False
>>> (not A) and (B or C)
True
>>> ((not A) and B) or C
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:

>>> A,B,C=False,True,True # como no exemplo acima


>>> not A and B or C
True
© E.L.Favero Algoritmos em Python 40

5.2.3 Impressão das tabelas verdade


Para nos familiarizar com as tabelas, podemos imprimi-las. Vamos apresentar um pseudo
código para imprimir a tabela verdade do not.

Em pseudo-código (código que não executa):


escreva('Tabela Verdade not:')

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)
>>>

Tabela Verdade not:


not True = False
not False = True

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

True and False = False


False and True = False
False and False = False

Este pseudo código é diretamente traduzido para a linguagem python. De forma similar
podemos imprimir a tabela do or.

print('Tabela Verdade and:')


TF = [True, False]
for a in TF:
for b in TF:
print( a,'and', b, '=', a and b)
>>>
Tabela Verdade and:
True and True = True
True and False = False
False and True = False
False and False = False

print('Tabela Verdade or:')


TF = [True, False]
for a in TF:
for b in TF:
print( a,'or', b, '=', a or b)
>>>
Tabela Verdade or:
True or True = True
True or False = True
False or True = True
False or False = False

5.3 Expressões Relacionais


As expressões relacionais também retornam o tipo de dados lógico, ou bool. Temos 3 tipos
de operadores relacionais: de igualdade, de desilgualdades e de pertinência.

Igualdade Desigualdade Pertinência


== != > < >= <= in not in

5.3.1 Operadores relacionais: quando o igual não é igual


Os operadores lógicos normalmente são combinados em expressões com operadores
relacionais, operadores que comparam valores, como o maior, menor e igual, etc. > < == !=
<= >=.
Muitas linguagens de programação usam o sinal de igual = para atribuição e == para
teste de igualde. Porque a atribuição é utilizada com muita mais frequência que o teste de
igualdade.
Se fizermos a=1;b=2;a=b. O comando a=b não é teste de igualdade: o valor de a é
substituído pelo valor de b. Aqui o (;) é um separador de comandos, quando mais de um
comando são escritos na mesma linha.
© E.L.Favero Algoritmos em Python 42

O diferente é o não igual, representado pelo ponto de exclamação na frente do igual.


Assim, == e != ambos tem dois caracteres, assim ficam símbolos mais similares, no
tamanho.

>>> a=1;b=2
>>> a==b
False
>>> a==1
True
>>> a==2
False
>>> a!=2
True

5.3.2 Prioridade dos tipos de operadores


Na expressão prova1>7 and prova2>7 and prova3>7 temos operadores relacionais e
lógicos. Neste caso os operadores relacionais tem prioridade, são executas antes dos
lógicos. Então esta expressão com os parênteses fica: (prova1>7) and (prova2>7) and
(prova3>7). Se temos operadores aritméticos e relacionais, por exemplo, em x+7>4 os
operadores aritméticos tem prioridade então com parênteses fica: (x+7)>4.

>>> 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

Os operadores de comparação ou relacionais são parentes dos aritméticos. Os aritméticos


sempre retornam um valor numérico e os relacionais sempre retornam um valor Lógico.
Seguem alguns exemplos, de expressões agrupadas num código de programa.

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

5.3.3 Operadores relacionais encadeados


Verificar mais de uma condição é muito comum em linguagens de programação. Se
queremos verificar a condição a <b <c o usual é fazer a<b e b<c. Em Python, há uma
maneira melhor de escrever isso usando operadores relacionais encadeados da seguinte
forma a<b<c.
De acordo com a associatividade e precedência em Python todas as operações de
comparação em Python têm a mesma prioridade. Assim uma expressões como a<b<c têm a
interpretação convencional do uso em matemática. A associatividade é da esquerda para a
direita.

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

5.4 Lista de exercícios (8)


E5.1 Seja uma variável sal=900. Crie uma variável lógica que é verdadeira se
sal>1000. Imprima o valor da variável.

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.

prova1=8; prova2=9; prova3=9.5


aprovado= prova1>7 and prova2>7 and prova3>7
print(aprovado)
>>>
True
E5.4 Crie uma variável aprovado que é verdadeira se todas as três provas (prova1,
prova2, prova3) são maiores que 7. Inicialize uma das provas com valor 6 e
as outras com valor > 7. Escreva o valor da variável aprovado.
© E.L.Favero Algoritmos em Python 44

E5.5 Seja a atribuição múltipla: A,B,C,D=1,2,True,False. Mostre o valor da


expressão 'A>B and C or D'

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'

E5.7 Seja a atribuição múltipla: A,B,C,D=5,1,True,True. 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'

5.4.1 Perguntas conceituais (8)


Responda com no mínimo 10 palavras e no máximo 20 palavras:
C5.1 Quais são os três principais operadores lógicos?
C5.2 O que retorna uma expressão lógica?
C5.3 Qual a diferença = e ==?
C5.4 Qual a diferença de um operador de igualdade e de desigualdade?
C5.5 Quais são os operadores de igualdade?
C5.6 Quais são os operadores de desigualdade?
C5.7 Quais são os operadores de pertinência?
C5.8 O que é um operador relacional?

Você também pode gostar