Criar condições complexas com operadores lógicos (e, ou, não)

Concluído

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!")