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

Concluído(a)

Tip

Consulte a guia Texto e imagens para obter mais detalhes!

Às vezes, uma única condição não é suficiente para tomar uma decisão. Talvez você queira verificar se duas coisas são verdadeiras ou se pelo menos uma delas é verdadeira. Por exemplo, talvez seja necessário verificar se uma conta está ativa e financiada ou se um usuário é administrador ou moderador.

os operadores lógicos do Python permitem combinar várias condições em uma expressão.

Os três operadores lógicos

Operador O que faz Example Result
and True somente se ambos os lados estiverem True True and False False
or True se pelo menos um lado for True True or False True
not Inverte um valor booliano not True False

Uso e (todas as condições devem ser atendidas)

Use and quando todas as condições precisarem ser atendidas 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 atendida)

Use or quando qualquer condição for suficiente para executar um bloco de código. No idioma cotidiano, geralmente "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.

Não usando (inverter uma condição)

O not operador inverte um valor booliano. Se a condição for True, ela se tornará Falsee vice-versa. Esse operador é útil quando você deseja 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.

Combinar operadores

Você pode combinar and, ore not em uma única expressão. Sempre use parênteses para agrupar condições e facilitar a leitura do código:

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 vários valores, você pode ser tentado a escrever algo assim:

# Incorrect: This code will not work as intended
if score == 90 or 100:
    print("You got an A!")

Nesse caso, Python avalia score == 90 primeiro, que é ou TrueFalse. Em seguida, ele é avaliado 100, o que é sempre True. Números diferentes de zero e cadeias de caracteres sem zero sempre contam como True em Python. Como resultado, a condição é sempre True, independentemente do valor de score. Sempre compare cada valor explicitamente:

# Correct: Each value is compared explicitly
if score == 90 or score == 100:
    print("You got an A!")