Estrutura lógica do if
As estruturas de controle de fluxo if, elif e else são usadas para executar diferentes blocos de código com base em condições específicas, permitindo que o programa tome decisões e execute caminhos diferentes conforme necessário.

✔ if condição1:
bloco de código a ser executado se condição1 for verdadeira
✔ elif condição2:
bloco de código a ser executado se condição1 for falsa e condição 2 for verdadeira
O elif nada mais é do que uma abreviação do else if para testar uma condição alternativa e se a condição anterior (if ou elif) for falsa.
Você pode inserir quantos elifs forem necessários.
✔ else:
bloco de código a ser executado se todas as condições anteriores forem falsas
Operadores de comparação

Operadores lógicos
Ao utilizarmos estruturas condicionais, precisaremos utilizar os operadores lógicos para combinar mais de uma condição. Os mais comuns em Python são:
✅ AND: Retorna verdadeiro apenas se todas as condições forem verdadeiras.

✅ OR: Retorna verdadeiro se pelo menos uma das condições for verdadeira.



Em resumo, podemos utilizar:
if
if + elif
if + elif + elif + elif (quantas vezes forem necessárias)
if + elif + else
if + else
if dentro de if
Na imagem abaixo, temos um if iniciando o teste lógico e um else no final, fechando esta condicional, mas dentro deste primeiro if, temos outra estrutura lógica contendo if, elif e else.


Condição If dentro de uma função def
Condição If dentro de uma função def e while (condição de parada)
Try e Except dentro de um if

Sintaxe do Match
Podemos considerar que a instrução match é uma abordagem mais "elegante" para a correspondência de padrões em dados.
match expressão:
case padrão_1:
# Código a ser executado se expressão corresponder a padrão_1
case padrão_2:
# Código a ser executado se expressão corresponder a padrão_2
# ... outros casos ...
case _:
# Código a ser executado se nenhum dos padrões anteriores corresponder. Isso é útil para tratar casos não específicos.
Perceba que recebemos a variável opção_escolhida como parâmetro da instrução match e será feito um comparativo com todos os valores determinados pelos blocos de case, e no final temos uma instrução case _, que é um padrão curinga, que corresponde a qualquer valor que não tenha sido correspondido pelos casos anteriores, ou seja, equivalente ao else da condicional anterior.
Match x if

O if nos proporciona uma maneira eficaz de tomar decisões simples ou complexas em nosso código, adaptando o comportamento do programa de acordo com as circunstâncias determinadas. Ao usar match, podemos simplificar a lógica do código em situações que envolvem múltiplos padrões complexos.
Vantagens if:
Implementação clássica e amplamente conhecida.
Amplamente suportada em todas as versões do Python.
Estrutura simples e direta para lógica condicional básica.
Vantagens match:
Lidar com condições complexas e múltiplos padrões de maneira mais intuitiva.
Sintaxe concisa melhora a legibilidade do código, especialmente em casos complexos.
Permite desestruturação direta, evitando repetição excessiva de variáveis.
Adiciona expressividade ao código, especialmente em situações de correspondência de padrões.