Lesson 3
Condições: if-then-else
1. Sintaxe
Todos os programas da primeira lição foram executados sequencialmente, linha após linha. Nenhuma linha pode ser ignorada.
Vamos considerar o seguinte problema: para o inteiro X determinado, determine seu valor absoluto. Se X> 0 então o programa deve imprimir o valor X, caso contrário deve imprimir -X. Esse comportamento não pode ser alcançado usando o programa seqüencial. O programa deve selecionar condicionalmente o próximo passo. É aí que as condições ajudam:
x = int(input()) if x > 0: print(x) else: print(-x)
Este programa usa uma instrução condicional if
. Depois de if
colocarmos uma condição (x > 0)
seguindo por dois pontos. Depois disso, colocamos um bloco de instruções que serão executadas apenas se a condição for verdadeira (ou seja, avaliada como True
). Este bloco pode ser seguido pela palavra else
, cólon e outro bloco de instruções que serão executadas somente se a condição for falsa (ou seja, avaliada como False
). É o caso acima, a condição é falsa, então o bloco 'else' é executado. Cada bloco deve ser recuado usando espaços.
Para resumir, a instrução condicional em Python possui a seguinte sintaxe:
if condition : true-block several instructions that are executed if the condition evaluates to True else: false-block several instructions that are executed if the condition evaluates to False
A palavra-chave else
com o bloco 'false' pode ser omitida caso nada seja feito se a condição for falsa. Por exemplo, podemos substituir a variável x
por seu valor absoluto assim:
x = int(input()) if x < 0: x = -x print(x)
Neste exemplo, a variável x
é atribuída a -x
somente se x < 0
. Em contraste, a instrução print(x)
é executada toda vez, porque não é recuada, então não pertence ao bloco 'true'.
A indentação é uma maneira geral no Python de separar blocos de código. Todas as instruções dentro do mesmo bloco devem ser recuadas da mesma maneira, ou seja, devem ter o mesmo número de espaços no início da linha. Recomenda-se usar 4 espaços para recuo.
O recuo é o que torna o Python diferente da maioria das outras linguagens, nas quais as chaves {
e }
são usadas para formar os blocos.
By the way, há uma função embutida para valor absoluto em Python:
x = int(input()) print(abs(x))
2. Condições aninhadas
Qualquer instrução em Python pode ser colocada em blocos "verdadeiros" e blocos "falsos", incluindo outra instrução condicional. Desta forma, obtemos condições aninhadas. Os blocos de condições internas são recuados usando mais duas vezes espaços (por exemplo, 8 espaços). Vamos ver um exemplo. Dadas as coordenadas do ponto no avião, imprima seu quadrante.
x = int(input()) y = int(input()) if x > 0: if y > 0: # x é maior que 0, y é maior que 0 print("Quadrant I") else: # x é maior que 0, y é menor ou igual a 0 print("Quadrant IV") else: if y > 0: # x é menor ou igual a 0, y é maior que 0 print("Quadrant II") else: # x é menor ou igual a 0, y é menor ou igual a 0 print("Quadrant III")
Neste exemplo, usamos os comentários: o texto explicativo que não tem efeito na execução do programa. Este texto começa com o hash #
e dura até o final da linha.
3. Operadores de comparação
Normalmente, a condição após if
tem um ou mais dos seguintes operadores:
-
<
- Menos - a condição é verdadeira se o lado esquerdo for menor que o lado direito.
-
>
- maior - a condição é verdadeira se o lado esquerdo for maior que o lado direito.
-
<=
- menor ou igual.
-
>=
- maior ou igual.
-
==
- igual.
-
!=
- não igual.
Por exemplo, a condição x * x < 1000
significa “o valor da expressão x * x
é menor que 1000” e a condição 2 * x != y
significa que “o valor duplicado da variável x
não é igual ao valor da variável y
”.
Os operadores de comparação no Python podem ser agrupados assim: a == b == c
ou x <= y >= 10
. É uma coisa rara entre linguagens de programação.
4. Objetos Bool e operadores lógicos
Quando somamos dois objetos inteiros usando o operador +
, como 2 + 5
, obtemos um novo objeto: 7
. Da mesma forma, quando comparamos dois inteiros usando o operador <
, como 2 < 5
, obtemos um novo objeto: True
.
print(2 < 5) print(2 > 5)
True
e False
possuem um tipo especial chamado bool
. Como cada nome de tipo pode ser usado para converter objetos nesse tipo, vamos ver o que esse elenco fornece para números:print(bool(-10)) # Verdade print(bool(0)) # Falso - zero é o único número falso print(bool(10)) # Verdade print(bool('')) # False - string vazia é a única string falsa print(bool('abc')) # Verdade
Às vezes você precisa verificar várias condições de uma só vez. Por exemplo, você pode verificar se um número n
é divisível por 2 usando a condição n % 2 == 0
( n
dá um resto 0
ao dividir por 2
). Se você precisa checar se dois números n
e m
são ambos divisíveis por 2, você deve checar ambos n % 2 == 0
e m % 2 == 0
. Para fazer isso, você se une a eles usando um operador and
(AND lógico): n % 2 == 0 and m % 2 == 0
.
Python possui lógica AND, lógica OR e negação.
Operador and
é um operador binário que avalia como True
se e somente se o lado esquerdo e o lado direito forem True
.
Operador or
é um operador binário que avalia como True
se pelo menos um dos seus lados for True
.
Operador not
é uma negação unária, é seguida por algum valor. É avaliado como True
se esse valor for False
e vice-versa.
Vamos verificar se pelo menos um dos dois números termina com 0:
a = int(input()) b = int(input()) if a % 10 == 0 or b % 10 == 0: print('YES') else: print('NO')
Vamos verificar se o número a
é positivo e o número b
não é negativo:
if a > 0 and not (b < 0):
Em vez de not (b < 0)
, podemos escrever (b >= 0)
.
5. palavra 'elif'
Se você tiver mais de duas opções para diferenciar usando o operador condicional, poderá usar if... elif... else
statement.
Vamos mostrar como funciona reescrevendo o exemplo com o ponto (x, y) no plano e os quadrantes acima:
x = int(input()) y = int(input()) if x > 0 and y > 0: print("Quadrant I") elif x > 0 and y < 0: print("Quadrant IV") elif y > 0: print("Quadrant II") else: print("Quadrant III")
Nesse caso, as condições em if
e elif
são verificadas uma após a outra até que a primeira condição verdadeira seja encontrada. Então apenas o bloco verdadeiro para aquela condição está sendo executado. Se todas as condições forem falsas, o bloco 'else' está sendo executado, se estiver presente.