Criar condições complexas com operadores lógicos (e, ou, não)
Sugestão
Consulte a guia Texto e imagens para obter mais detalhes!
Por vezes, uma única condição não é suficiente para tomar uma decisão. Pode querer verificar se duas coisas são ambas verdadeiras, ou se pelo menos uma delas é verdadeira. Por exemplo, pode precisar de verificar se uma conta está ativa e financiada, ou se um utilizador é administrador ou moderador.
Os operadores lógicos do Python permitem combinar múltiplas condições numa única expressão.
Os três operadores lógicos
| Operador | O que faz | Exemplo | Result |
|---|---|---|---|
and |
True
Apenas se ambos os lados forem True |
True and False |
False |
or |
True se pelo menos um dos lados for True |
True or False |
True |
not |
Inverte um valor booleano | not True |
False |
Usando e (todas as condições devem ser cumpridas)
Use and quando todas as condições devem ser cumpridas para executar um bloco de código:
age = 20
has_ticket = True
if age >= 18 and has_ticket:
print("Entry granted.")
else:
print("Entry denied.")
Output:
Entry granted.
Usar ou (pelo menos uma condição deve ser cumprida)
Use or quando qualquer condição for suficiente para executar um bloco de código. Na linguagem do dia a dia, normalmente "ou" significa "um ou outro, mas não ambos." No entanto, em Python, "ou" significa "um ou outro, ou ambos."
is_weekend = False
is_holiday = True
if is_weekend or is_holiday:
print("The office is closed.")
Output:
The office is closed.
Usar not (inverter uma condição)
O not operador inverte um valor booleano. Se a condição for True, ela torna-se False, e vice-versa. Este operador é útil quando se pretende verificar a ausência de uma condição.
is_logged_in = False
if not is_logged_in:
print("Please log in to continue.")
Output:
Please log in to continue.
Operadores de combinação
Pode combinar and, or, e not numa única expressão. Use sempre parênteses para agrupar condições e tornar o seu código mais fácil de ler:
score = 85
has_extra_credit = True
is_past_due = False
# Example: Pass if (Score is high OR extra credit is earned) AND the work isn't late
if (score >= 90 or has_extra_credit) and not is_past_due:
print("Requirement met.")
Evitar erros de atalho
Ao comparar uma única variável com múltiplos valores, pode sentir-se tentado a escrever algo assim:
# Incorrect: This code will not work as intended
if score == 90 or 100:
print("You got an A!")
Neste caso, o Python avalia score == 90 primeiro, que é ou True ou False. Depois avalia 100, que é sempre True. Números não nulos e cadeias não vazias contam sempre como True em Python. Como resultado, a condição é sempre True, independentemente do valor de score. Compare sempre cada valor explicitamente:
# Correct: Each value is compared explicitly
if score == 90 or score == 100:
print("You got an A!")