Introdução ao comando de seleção e às expressões lógicas
[ Expressão em Python | Expressão em Python | Operadores | Seleção | Seleções | Exemplo | Par ou ímpar ]
Como ler este texto. Aqui procuro explicar os fundamentos do comando de seleção if-else para a linguagem Python, explicando expressões lógicas e também aninhamento de comandos if-else. Este texto foi produzido principalmente para Python versão 3, mas ao final tem uma explicação sobre a diferença do operador de divisão para o Python 2. |
O que é um comando de seleção?
A existência de comando de seleção é essencial para a construção de algoritmos flexíveis no sentido de poder seguir uma sequência de instruções distintas de acordo com uma condição. Um exemplo simples poderia ser um algoritmo para computar a soma de todas as entradas de um extrato bancário correspondente aos créditos separadas dos lançamentos de débito.Qualquer linguagem de programação dispõe de um comando para desvio de fluxo, geralmente esse tipo de comando é demominado comando if-else. Outra característica comum das linguagens de programação é possibilitar definir dois blocos de comandos subordinados ao if-else, um deles devendo ser executado sempre que a condição resultar verdadeira e o outro, que é opcional, devendo ser executado sempre que resultar falso.
A figura 1 ilustra as duas possibilidades de comando if-else, a figura 1.a apresenta um comando de seleção apenas com o bloco "verdadeiro", enquanto a 1.b ilustra um comando de seleção com os dois blocos.
Na figura 1.a, se o resultado da condição lógica for verdadeiro, segue o caminho indicado pela seta com rótulo
sim e se falso segue o caminho da seta com rótulo não, que é a próxima instrução após o
bloco "verdadeiro".
Na figura 1.b, está o esquema do if-else com os dois blocos:
se o resultado da condição lógica for verdadeiro, segue o caminho para o bloco "verdadeiro" (verde),
mas se resultar falso, segue para o bloco "falso" (laranja).
De modo esquemático, o comando é do tipo
Na linguagem Python existe um tipo específico para resultados de expressões lógicas, que o tipo
Já uma expressão lógica não trivial deve envolver duas expressões aritméticas conectadas por um operador relacional (EL = EA1 <= EA2) ou duas outras expressões lógicas conectadas por um operador lógico (EL = EL1 and EL2). Os operadores relacionais e lógicos são explicados na seção sobre operadores relacionais e lógicos.
|
No código 1 existem duas expressões lógicas, uma subordinada a um comando if-else e a outra subordinada a um comando while.
Mas vale a pena notar que a linguagem Python dispõe de um tipo específico para resultados de expressões lógicas, examinado na seção expressão e valor lógico.
Negação em Python. Pode-se usar o operador not (não) para negar o resultado da expressão lógica (que esteja à sua direita). Por exemplo, os seguintes trechos de código são equivalentes em Python:
|
|
Podemos explorar equivalências para entender a razão dos dois códigos serem equivalentes.
Observe que
!(a-b) é a mesma coisa que negar que a-b seja não nulo, ou seja, !(a-b != 0) e,
!(a-b != 0) é a mesma coisa que afirmar que a-b == 0, e
a-b == 0 é a mesma coisa que a == b.
Expressão e valor lógicos em Python
Em Python existem um particular tipo de variável que é booleano, sendo que uma variável boleana pode ter apenas um dos valores: True ou False. Portanto, é possível definir variáveis que recebam o resultado de uma expressão lógica, que deve ser True ou False.
Assim, se em determinado código for necessário manter o resultado de uma expressão lógica e depois usar esse resultado em um comando
if-else, seria possível fazer de três formas distintas, sendo a mais à esquerda a mais eficiente:
|
|
|
Note que no exemplo acima mais à direita usamos not (varlog == False) que equivale a varlog == True, que portanto também equivale a varlog (pois está essa armazena valor booleano).
Operadores relacionais e lógicos em Python
Os operadores relacionais (relações entre expressões aritméticas) em Python são os seguinte:
Operação | Operador | Exemplo |
---|---|---|
iguais | == | n1 == 4 |
diferentes | != | n1 != 4 |
maior | > | n1 > n2 |
menor | < | n2 < n1 |
maior ou igual | >= | n1 >= 3 |
menor ou igual | <= | n1 <= 33 |
Os operadores lógicos principais em Python são
Operação | Operador | Exemplo |
---|---|---|
conjunção (e) | and | (n1 > 1 and n1 < 10) |
disjunção (ou) | or | (n1 > 1) or (n1 < 10) |
negação (não) | not | not(n1 > 1 or n1 < 10) |
Comando de seleção if-else em Python
O comando de seleção é essencial para qualquer software, é ele que permite que o programa desvie seu fluxo de execução de acordo com os valores dos dados (as já citadas variáveis). Ele está presente em qualquer linguagem de programação e está baseado no cômputo de uma expressão lógica (EXPLOG), se o resultado dela for verdadeiro, o fluxo segue por um "caminho", senão segue por outro. Essa estrutura está ilustrada na figura abaixo:
Existem outras duas características de comando de seleção (em qualquer linguagem) que são:
A linguagem Python, assim como várias outras, usam as masmas palavras reservadas (palavras que não podem ser usados como nomes para variáveis): as palavras if e o else. Sua sintaxe é ilustrada na tabela abaixo.
Além disso, as linguagens permitem que vários comandos (bloco de comandos) sejam subordinados à uma seleção. Em Python isso é feito com o deslocamento horizontal de linhas, ou seja, com "indentação".
A tabela a seguir ilustra a sintaxe do comando de seleção em Python:
Apenas 1 comando | Vários comandos |
---|---|
|
|
Vale destacar que o comando
Em Python os parênteses não são obrigatórios em expressões, quer dizer é válido redigir o comando
Experimente! Construa um exemplo com 2 comandos de "impressão" subordinados ao if, depois experimente remover as "indentações" dos 2 comandos e tente rodar o programa. Você receberá uma mensagem de erro.
Comandos de seleção if-else aninhados em Python
Em geral, toda linguagem de programação de alto-nível permite que os comandos if-else sejam utilizados de modo aninhado, ou seja, qualquer dos comandos acima (comando1... comando4) podem ser um novo if-else. Por exemplo:
Linguagem | if aninhado |
---|---|
Python |
|
O comando
Com elif | Com else-if |
---|---|
|
|
Note que não deve existir else sem um if e a associação entre eles é definida pela indentação.
Por exemplo, na tabela 4, o comando elif (que é um else seguido de um if) está associado ao
primeiro if e não ao segundo
(ou seja, se
Um exemplo para decidir se uma variável inteira armazena um valor par ou ímpar
Utilizando a divisão inteira (quer dizer 7/2 resultando 3) pode-se conseguir determinar se um inteiro é ou não par. Por exemplo, dispondo de uma variável inteira n1, pode-se fazer a divisão inteira por 2 e multiplicar seu resultado também por 2, se recuperar o valor integral de n1, então esse é um valor par (e.g. 7/2 é 3 que multiplicado por 2 resulta "apenas" 6, concluindo daí que 7 não é par - vide explicação estendida).
Código Python 3 |
---|
|
Mas pode-se obter o mesmo resultado utilizando o operador binário % que é "resto da divisão inteira". Este operador devolve o resto da divisão, por exemplo, 7%2 resulta 1 (o quociente é 3: 3 * 2 + 1 = 7). Assim o código fica:
Código Python |
---|
|
Mas por que razão "n1//2*2==n1" é suficiente para decidir se n1 é ou não par?
Bem, isso é um truque computacional baseado na divisão inteira (quociente), como examinamos ao final da seção sobre variáveis e expressões.
Leônidas de Oliveira Brandão
http://line.ime.usp.br