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


Instruções condicionais e operadores lógicos

As bifurcações no caminho de execução do código

Imagine o seguinte cenário…

Saindo de casa, se (if) está chovendo, a condição “chovendo” é verdadeira (True), então levo o guarda-chuva;

Opcionalmente, podemos definir que, senão (else), quando a condição “chovendo” é falsa (False), devo levar óculos de sol.

Sintaxe if e if/else

# a condição "chovendo" é avaliada como True (verdadeiro) ou False (falso)
if chovendo:
    # se verdadeira a condição, então este bloco de código será executado
    levarGuardaChuva()  
# termina o bloco do “se/então”, continua o passeio.

# a condição "chovendo" é avaliada como True (verdadeiro) ou False (falso)
if chovendo:
    # se verdadeira a condição, então este bloco de código será executado
    levarGuardaChuva() 
else:               # termina o “se/então” e começa o “senão”
    levarOculos()   # este bloco será executado apenas quando "chovendo" é falso
# termina o bloco do “senão”, continua o passeio.

Comparações com operadores relacionais e operadores lógicos

Os valores True (verdadeiro) e False (falso) são o resultado de expressões booleanas (boolean, em homenagem a George Boole) como as comparações com operadores relacionais, == (igualdade), > (maior que) ou ainda operações lógicas e (and), ou (or) e não (not).

True e False podem ser armazenados em variáveis, representando um estado no programa, são os mesmos valores que obtemos quando usamos as variáveis de sistema mousePressed e keyPressed, por exemplo.

Um exemplo completo

No exemplo a abaixo usamos uma estrutura if/ else para escolher a cor de preenchimento dos círculos, como resultado da comparação mouseY < 128. Usamos o valor booleano de mousePressed (True ou False) em um if que determina se algum círculo é desenhado ou não. Por fim usamos um if que combina dois valores usando and(e), keyPressed e a comparação de igualdade ==, para decidir se deve apagar o desenho (keyPressed and key == 'a').

def setup():
    size(256, 256)
    background(0, 100, 0)  # fundo verde

def draw():
    # se a posição Y do mouse for menor que 128 (mouse na metade de cima da tela)
    if mouseY < 128:    
        fill(255)  # então pede preenchimento branco (se mouseY é menor que 128)
    else:          # termina o bloco “se/então” e começa o do “senão”
        fill(100)  # preenchimento cinza 100 (se mouseY não é menor que 128)
                   # termina o bloco do “senão”
                   
    # Se o mouse estiver pressionado
    if mousePressed:                    
        ellipse(mouseX, mouseY, 50, 50) # desenha um círculo na posição do mouse
    # termina o bloco (repare que não faz nada se o mouse estiver solto)
    
    # Se uma tecla foi precionada E a tecla foi o caractere 'a'
    if keyPressed and key == 'a':    
        background(0, 100, 0)  # apague a tela com um fundo verde

exemplo condicional

Quadro de operadores

operador uso descrição
> a > b verdadeiro se a maior que b
>= a >= b verdadeiro se a maior ou igual a b
< a < b verdadeiro se a menor que b
<= a <= b verdadeiro se a menor ou igual a b
== a == b verdadeiro se a igual a b
!= a != b verdadeiro se a diferente de b
and a and b verdadeiro se a e b forem ambos verdadeiros
or a or b verdadeiro se a ou b forem verdadeiros
not not a não a verdadeiro resulta falso, e não a falso resulta verdadeiro
in a in b verdadeiro se elemento a existe dentro da coleção b
is a is b verdadeiro se a é o mesmo objeto do que b, não bastando serem iguais

Alguns exemplos e considerações

# maior que
n = 12
n_maior_que_10 = n > 10  # True
n = 5
n_maior_que_10 = n > 10  # False
# maior ou igual a
n = 10
n_maior_ou_ingual_a_10 = n >= 10  # True
# menor que / menor ou igual a
n = 5
n_menor_que_10 = n < 10 # True
n_menor_ou_igual_a_4 = n <= 4  # False

# igualdade e diferença
n, m = 10, 10.0    # n é int, m é float
numeros_iguais = n == m  # True  10 é igual a 10.0
numeros_diferentes = n != m  # False
numeros_diferentes = n != 11  # True, 10 não é igual a 11

# operador in (contido em, existe em)
contem_a = 'a' in 'abacaxi'  # True
contem_1 = 1 in [0, 1, 2, 3]  # True
nao_contem_4 = 4 not in [0, 1, 2, 3] # True

Para efeitos de operações lógicas, e no uso com if, por exemplo, os valores 0, None, "" (string vazio), [] lista vazia, ou qualquer coleção vazia, são considerados como “falso” (False), mas se comparados diretamente entre si não são a mesma coisa!

tamanho = 0  # ou tamanho = None
print(tamanho == False)  # exibe False!
print(tamanho == True)  # exibe False!
print(bool(tamanho) == False)  # exibe True

if not tamanho:   # será acionado se tamanho for 0 ou None
   tamanho = 10
   
print(bool(""))    # exibe False  (um string, texto, vazio)
print(bool("oi"))  # exibe True   (qualquer outro string)
print(bool(0))     # exibe False  (o número zero)
print(bool(2))     # exibe True   (qualquer outro número)
print(bool([]))    # exibe False  (uma lista vazia)
print(bool([0]))   # exibe True   (uma lista com um zero dentro)

Sobre o operador is, não acredito que você vá precisar dele tão cedo (na dúvida, não use!) mas já que ele estava no quadro, veja o exemplo a seguir, pois demonstra uma característica importante do Python chamada aliasing, ou “apelidamento”.

ponto_a = (10, 20)
ponto_b = (10, 20)
ponto_c = ṕonto_a  # ponto_c é um outro "apelido" (alias) para o objeto que chamamos de ponto_a

print(ponto_a == ponto_b)  # exibe True, as coordenadas são iguais
print(ponto_a is ponto_b)  # exibe False, são objetos diferentes na memória 
print(ponto_a is ponto_c)  # exibe True, são o mesmo objeto na memória

Assuntos relacionados

Glossário

expressão booleana Uma expressão cujo valor é True (verdadeiro) ou False (falso).

operador relacional Um destes operadores, que compara seus operandos: ==, !=, >, <, >= e <=.

operador lógico Um destes operadores, que combina expressões booleanas: and (e), or (ou) e not (não).

instrução condicional Uma instrução que controla o fluxo de execução, dependendo de alguma condição (como por exemplo o if).

condição A expressão booleana em uma instrução condicional que determina qual ramo deve ser executado.


Este material é baseado no material do curso https://arteprog.space/programacao-criativa/


Texto e imagens / text and images: CC BY-NC-SA 4.0; Código / code: GNU GPL v3.0 exceto onde explicitamente indicado por questões de compatibilidade.