04_TXT_LP
04_TXT_LP
04_TXT_LP
LINGUAGEM DE PROGRAMAÇÃO
Texto base
4
Operadores e expressões relacionais e lógicas,
estruturas de seleção simples e composta
Resumo
Nesta aula os objetivos são: (I) apresentar as estruturas de controle de fluxo de
execução; (II) conhecer as expressões relacionais e lógicas, assim como seus
operadores; (III) entender a associatividade dos operadores relacionais; (IV)
compreender o que são expressões equivalentes e complementares; (V) conceituar a
avaliação de curto-circuito; (VI) construir estruturas de seleção simples e composta.
4.1. Motivação
Os primeiros computadores eletrônicos foram chamados de “cérebros
eletrônicos”, causando a impressão de que poderiam pensar como humanos. Embora
sejam máquinas extremamente complexas, computadores simplesmente executam
aquilo que lhes é instruído, sem autonomia para tomar decisões por conta própria… ao
menos por enquanto. Assim, não há mais inteligência em um computador do que há nas
instruções que lhe são dadas, e sua vantagem está em conseguir executar uma sequência
de instruções de modo mais confiável e rápido do que uma pessoa poderia fazer.
Com estruturas sequenciais de controle de fluxo, já conseguimos resolver
diversos problemas simples, mas muitas vezes precisamos escolher se iremos ou não
executar determinadas instruções com base em dados que só serão conhecidos em
tempo de execução, muitas vezes dependentes de entradas fornecidas pelo usuário do
programa. Para isso, veremos as estruturas de seleção, que permitirão que nossos
programas reajam de acordo com decisões pré-determinadas e com base no que ocorrerá
durante seu fluxo de execução.
Figura 4.1: Estruturas de controle de fluxo básicas. Fonte: Elaborado pelo autor.
No Brasil, para estar habilitado a dirigir, não basta ter 18 anos, é preciso também
ser aprovado pelo Detran, por isso, na Codificação 4.2, pode_dirigir receberá True
apenas se pode_tirar_cnh e (and) aprovado_detran estiverem com o valor True.
Portanto, para compreender as possibilidades de relações verificáveis entre os
operandos nas expressões relacionais e lógicas, é necessário conhecer os operadores
relacionais e lógicos disponíveis na linguagem de programação Python.
👁️🗨️
VOCÊ SABIA?
Os valores lógicos também são conhecidos como valores booleanos por causa de
George Boole, um matemático e filósofo britânico, criador da álgebra booleana no
século XIX, fundamental para o desenvolvimento da computação moderna. Veja mais:
Como matemático inventou há mais de 150 anos a fórmula de buscas usada pelo Google
a NÃO a a b aEb a b a OU b
True False True True True True True True
False True True False False True False True
False True False False True True
False False False False False False
Significado Python
NÃO not
E and
OU or
🏹 VAMOS PRATICAR!
1) Crie na Shell do Python as variáveis a seguir: a = 4; b = 10; c = 50; d = 1; e = 5. Em
seguida faça a avaliação das seguintes expressões (tente antecipar o resultado da Shell):
i) a == c v) a == b ix) c <= c
ii) a < b vi) c < d x) c <= e
iii) d > b vii) b > a xi) d != a
iv) c != e viii) c <= e xii) e != e
>>> True and False >>> (10 < 0) and (10 > 2)
>>> True or False >>> (10 < 0) or (10 > 2)
>>> not True or True >>> not (3 != 0) or (8 > 5)
>>> not (True or True) >>> not (3 != 0 or 8 > 5)
>>> True and not False >>> not not True
==, !=, >, >=, <, <= Operadores relacionais. Não associativos
or OU lógico.
Ordem de
Operador Descrição Associatividade
resolução
1° ** Exponenciação. À direita
==, !=,
5° Operadores relacionais. Não associativos
>, >=, <, <=
8° or OU lógico.
1
O operando entre os dois operadores relacionais só será avaliado uma vez, mesmo que internamente a
expressão relacional encadeada seja transformada em duas expressões menores conectadas por um and. O
valor da avaliação é guardado e usado nas duas expressões. Isso é importante pois garante economia de
recursos computacionais e evita problemas quando, por exemplo, o operando é uma chamada a uma
função ou uma expressão mais complexa, em que uma dupla avaliação poderia modificar o operando.
Essas expressões, quando juntas, cobrem toda a reta dos números reais sem
nenhuma sobreposição (observe que idade < 18 não inclui o número 18), isso
significa que para cada possível valor de idade, se uma das expressões for verdadeira, a
outra será obrigatoriamente falsa. Veja outros exemplos na Codificação 4.5.
>>> 'Maria' != 'Megan' # Expressão A
>>> 'Maria' == 'Megan' # Expressão B (complementar à A)
>>> not('Maria' == 'Megan') # Expressão C (complementar à B)
>>> not('Maria' != 'Megan') # Expressão D (complementar à A)
Codificação 4.5: Exemplo de expressões complementares.
📚 VAMOS LER!
A negação (complementar) de conjunções (E lógico) e disjunções (OU lógico) foi um
assunto tratado por Augustus De Morgan, um importante matemático e lógico britânico,
no século XIX e que originou às “Leis De Morgan”, amplamente usadas para resolver
problemas de lógica. Veja mais: https://pt.wikipedia.org/wiki/Teoremas_de_De_Morgan
a = int(input('Primeiro: '))
b = int(input('Segundo: '))
print(f'{a} é divisível por {b}: {b != 0 and a % b == 0}')
Codificação 4.7: Programa que usufrui do curto-circuito do operador and.
a = int(input('Primeiro: '))
b = int(input('Segundo: '))
print(f'{a} não é divisível por {b}: {b == 0 or a % b != 0}')
Codificação 4.8: Programa que usufrui do curto-circuito do operador or.
2
O Python aceita quantidade qualquer de espaços, desde que todas as instruções do mesmo bloco tenham
o mesmo número de espaços, mas o valor padrão recomendado pela comunidade é de 4 espaços.
Após o comando else não é preciso (nem permitido) colocar uma segunda
condição, pois será considerada automaticamente a condição complementar àquela do
if. Consequentemente, quando a condição do if resultar em True, o bloco 1 será
executado e o bloco 2 ignorado e, quando a condição do if resultar em False, ocorrerá
o oposto, pois o bloco 2 será executado e o bloco 1 ignorado.
Como else é um complemento do if, jamais deve ser escrito isoladamente.
Repare que Python identifica o if correspondente ao else por meio da indentação, a
regra é simples: cada else corresponde ao if mais próximo que o antecede no mesmo
nível de indentação. Só pode existir um else por if.
Como exemplo de programa que utiliza uma estrutura de seleção composta,
insira no editor do IDLE a Codificação 4.12 e teste seu funcionamento.
Um erro frequente com iniciantes em programação é assumir que todo if deve
ser complementado com um else. Não faz sentido! Quando não existem dois blocos de
instruções mutuamente exclusivos (ao executar um bloco o outro deve necessariamente
ser ignorado), usa-se seleção simples que, como já explicado, não tem else. Veja um
exemplo deste erro de lógica na Codificação 4.13.
print('Total:', total)
Codificação 4.13: Exemplo de programa com estrutura de seleção composta inútil.
Na Codificação 4.13, quando o valor é inferior a cem reais, não é preciso fazer
nada especial, portanto o else é desnecessário, veja que seu bloco contém uma
instrução inútil, que consome processamento e não altera o valor da variável.
Bibliografia e referências