Decisões

As decisões alteram o fluxo normal de um programa que é de cima para baixo.

Uma decisão é o resultado da avaliação de uma expressão lógica e/ou relacional. As expressões lógicas/relacionais retornam sempre True ou False.

Dependendo desse resultado uma decisão pode executar um bloco de instruções ou outro ou nenhum.

Sintaxe:

if condição:
   bloco código

A condição é uma expressão lógica/relacional que retorna True ou False.

Se a condição fôr verdadeira o bloco de código é executado, caso contrário não é.

Exemplo:

nr = 34

#A condição retorna True logo, executa o bloco de código:
if nr > 30:
	nr += 3
	print( nr )

#A condição retorna False logo, não executa o bloco de código:	
if nr < 10 or nr > 50:
	nr = nr * 2
	print( nr )

Sintaxe:

if condição:
	bloco código 1
else:
	bloco código 2

Se a condição retornar True executa o bloco de código 1. Caso contrário, executa o bloco de código 2.

Exemplo:

lst = [2, 4, 6, 8]

#A condição retorna False e, logo, executa o bloco de código do else:
if lst[2] == 5:
	lst[2] += 2
else:
    lst[2] -= 2

Sintaxe:

if condição_1:
   bloco código 1
[elif condição_2:
   bloco código 2]
...
[elif condição_n:
   bloco código n]
[else:
   bloco código else]

A instrução elif permite avaliar várias condições e executar o respetivo bloco de código caso alguma delas retorne True.

Se todas as condições avaliadas retornarem False, é executado o bloco de código da instrução else.

Numa decisão múltipla podem haver várias instruções elif mas só uma instrução else que deve ser a última e é opcional.

Exemplo:

nota = int( input("Digite a sua nota: ") )

if nota < 10:
    print("Chumbou")
elif nota < 13:
    print("Suficiente")
elif nota < 16:
    print("Bom")
elif nota < 18:
    print("Muito bom")
elif nota <= 20:
    print("Excelente")
else:
    print("Nota inválida")

A instrução match foi introduzida no Python 3.10 e oferece uma alternativa moderna, legível e poderosa à instrução if...elif...else, permitindo comparar valores e padrões de maneira clara e eficiente.

match é uma estrutura de controle de fluxo que compara o valor de uma expressão com diferentes padrões definidos em blocos case. Ele funciona de forma semelhante ao switch-case de outras linguagens, mas com recursos avançados de correspondência de padrões.

match <expressão>:
    case <valor_1>:
        # instruções para valor_1
    case <valor_2>:
        # instruções para valor_2
    case _:
        # instruções padrão (caso nenhum valor anterior seja compatível)

_ é equivalente ao else da decisãoif...elif...else ou ao default da estrutura switch...case em C.

Não é necessário usar break após cada case; o Python encerra a verificação após o primeiro valor compatível.

Exemplo 1:

opcao = 'a'

match opcao:
    case 'a':
        print("Opção A selecionada")
    case 'b':
        print("Opção B selecionada")
    case _:
        print("Opção inválida")

Neste exemplo, se opcao for 'a', imprime “Opção A selecionada”. Se for 'b', imprime “Opção B selecionada”. Para qualquer outro valor, imprime “Opção inválida”.

Exemplo 2:

day = input("Digite o dia da semana: ").capitalize()

match day:
    case "Sábado" | "Domingo":
        print(f"{day} é fim de semana.")
    case "Segunda" | "Terça" | "Quarta" | "Quinta" | "Sexta":
        print(f"{day} é dia útil.")
    case _:
        print("Dia inválido.")

Neste exemplo, tanto “Sábado” quanto “Domingo” acionam o mesmo bloco de código.

Exemplo 3:

def calcular_desconto(valor):
    match valor:
        case v if v < 1000:
            return v * 0.05
        case v if 1000 <= v < 5000:
            return v * 0.10
        case v if v >= 5000:
            return v * 0.15

Neste exemplo, cada bloco case avalia uma condição específica sobre o valor recebido.