Introdução à programação
com Python em um contexto visual


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)