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:
faz_isto()
elif a == 1:
faz_aquilo()
else:
faz_outra_coisa()
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 == True:
n = x
else:
n = y
Veja um outro exemplo:
a = 50 if keyPressed 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, melhor usar assim:
def quadrado(x, y, tamanho=None):
tamanho = tamanho if tamanho is not None else 10
rect(x, y, tamanho, tamanho)