Condicões aninhadas e outras estruturas condicionais
Se, senão se, senão
É comum encontraramos, além da composição das condições usando operadores lógicos, ìf
dentro de um ìf
ou de um else
.
No caso de repetidos if
, o ‘else + if’ é abreviado elif
.
if a == 0: # se `a` é igual a 0
faz_isto()
elif a == 1: # senão, se `a` é igual a 1
faz_aquilo()
else: # senão...
faz_outra_coisa()
No contexto de um sketch com py5, é comum querer checar, por exemplo, qual tecla foi apertada.
def key_pressed():
if key == ' ': # se a barra de espaço foi apertada
background(200) # limpe a tela de desenho com um fundo cinza
elif key == 'a': # tecla 'a'
background(0, 0, 200) # limpe a tela de desenho com azul
elif key == 'v': # tecla 'v'
background(0, 200, 0) # limpe a tela de desenho com verde
else: # se qualquer outra tecla foi apertada
background(0) # limpe a tela de desenho com preto
Expressões condicionais e atribuição condicional
Muitas linguagens tem uma sintaxe conhecida como * operador condicional ternário * que permite escrever o que em Python é conhecido como uma * expressão condicional*. Esta forma de if
é bastante usada para atribuições ou dentro de outras estruturas:
n = x if cond else y
Isso equivale a:
if cond:
n = x
else:
n = y
Veja um outro exemplo:
a = 50 if is_key_pressed else 100
# A variável a passa a valer 50 se houver uma tecla pressionada
# senão, passa a valer 100
Usando or
para atribuição condicional
O operador lógico or
retorna o valor do lado esquerdo caso este seja considerado algo ‘verdadeiro’, de outra forma, ele retorna o valor do lado direito(que pode ou não ser algo considerado ‘falso’).
Em Python None
, 0
(o número zero), ""
(um string vazio) ou uma coleção vazia(lista, tupla, etc.) são considerados False
. Outros valores são considerados True
.
print(0 or 10) # exibe: 10
print(10 or 0) # exibe: 10
print(None or 10) # exibe: 10
print(10 or None) # exibe: 10
print(None or 0) # exibe: 0
print(0 or None) # exibe: None
Por conta disso, você pode se deparar com a seguinte expressão:
a = a or b # é o mesmo que: a = a if a else b
Essa forma é bastante usada em funções com parâmetros default:
def quadrado(x, y, tamanho=None):
tamanho = tamanho or 10
# Isso significa que se tamanho for 0 ou `None` então tamanho deve passar a valer 10:
# Equivalente a:
# tamanho = tamanho if tamanho else 10
rect(x, y, tamanho, tamanho)
Se 0
for um valor válido para o tamanho, o código anterior não serve,0
é avaliado como False
nesse contexto, melhor então usar assim:
def quadrado(x, y, tamanho=None):
tamanho = tamanho if tamanho is not None else 10
rect(x, y, tamanho, tamanho)
ou, talvez mais legível:
def quadrado(x, y, tamanho=None):
if tamanho is None:
tamanho = 10
rect(x, y, tamanho, tamanho)