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
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.