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.