Nesse post iremos ver controle de fluxo em Python usando os seguintes parâmetros: IF ELIF ELSE e, assim, termos controle de decisão.
“if-elif-else” em Python é uma estrutura de controle de fluxo que permite executar diferentes blocos de código com base em condições específicas.
- if significa “se”
- elif vem de “else if” que quer dizer “senão, se”
- else quer dizer “senão”
Vejamos um exemplo,
idade = 18
if idade < 18:
print("Menor de idade")
elif idade == 18:
print("Tem 18 anos")
else:
print("Maior de idade")
Neste exemplo, o programa verifica a idade e imprime uma mensagem com base na condição atendida.
Se a idade for menor que 18 (if idade < 18:), imprime “Menor de idade”. Se a idade for exatamente 18 (ou elif idade == 18:), imprime “Tem 18 anos”. Caso contrário (else:), imprime “Maior de idade”.
Vejamos esse outro exemplo que digitei em um arquivo chamado script.py:
#!/usr/bin/python3 nota = 3 resultado = "" if nota < 7: resultado = "Reprovado" elif nota == 7: resultado = "Aprovado pela nota média" elif nota >= 8 : resultado = "Aprovado com excelência" elif nota > 10: resultado = "Nota inválida!" else: resultado = "Erro desconhecido" print(resultado)
Agora, se executarmos no terminal python3 scrypt.py veremos o resultado “Reprovado”
python3 scrypt.py
O script, chamado de scrypt.py, avalia uma nota e atribui um resultado com base em algumas condições.
- #!/usr/bin/python3 Esta linha é um shebang, que é uma indicação para o sistema operacional de como o script deve ser executado. Neste caso, o script é projetado para ser executado usando o interpretador Python 3.
- Temos as variáveis nota e resultado
- if nota < 7: Se a nota for menor que 7, a variável
resultado
é atualizada para a string “Reprovado”. - elif nota == 7: Se a nota for igual a 7, a variável
resultado
é atualizada para a string “Aprovado pela nota média”. - elif nota >= 8 : Se a nota for maior ou igual a 8, a variável
resultado
é atualizada para a string “Aprovado com excelência”. - elif nota > 10: Se a nota for maior que 10, a variável
resultado
é atualizada para a string “Nota inválida!”. (Nota: Esta condição nunca será verdadeira, já que a nota foi limitada a 10 no início.) - else: Se nenhuma das condições anteriores for verdadeira, a variável
resultado
é atualizada para a string “Erro desconhecido”.
Usamos, ao final, print(resultado) que imprime o valor atual da variável resultado
na tela.
Em Python não tem Swift – Falando de Match-Case
Se você sabe outra linguagem de programação, já deve ter visto muito sobre o swift-case.
Ao invés de Swift, Python usa algo chamado match-case que foi introduzido na versão 3.10 e é semelhante à construção switch-case disponível em C/C++/Java etc.
Se formos traduzir match-case para o português seria algo como “caso de compatibilidade”. Match quer dizer “combinar”. Tem um app de relacionamento por aí, que nunca usei, que dá match entre pessoas.
Match-case oferece uma forma mais concisa e legível de realizar comparações múltiplas em uma única expressão. Você pode substituir o uso extensivo de declarações if-elif-else. É útil para tornar o código mais claro e eficiente.
def verificar_tipo_de_animal(animal): match animal: case "gato": print("Animal é um gato") case "cachorro": print("Animal é um cachorro") case "pássaro": print("Animal é um pássaro") case _: print("Tipo de animal desconhecido") verificar_tipo_de_animal("gato") # Saída: Animal é um gato verificar_tipo_de_animal("peixe") # Saída: Tipo de animal desconhecido
Se executarmos o scrypt acima teremos o resultado:
Animal é um gato
Tipo de animal desconhecido
isso porque, ao chamarmos verificar_tipo_de_animal(…) “gato” está dentro da lista, mas “peixe” não faz parte.
Você deve está se perguntando: “o que é esse diacho de def?” def vem de definir, isso porque serve para definir uma função. Sim, diferentemente de switch-case, match-case é similar mas podemos perceber que se assemelha a uma função.
A última instrução case na função tem “_” como valor a ser comparado. Ele serve como caso curinga e será executado se todos os outros casos não forem verdadeiros.
Veja outro exemplo de match-case com dias da semana:
def dia_semana(n): match n: case 0: return "Segunda" case 1: return "Terça" case 2: return "Quarta" case 3: return "Quinta" case 4: return "Sexta" case 5: return "Sábado" case 6: return "Domingo" case _: return "Numero inválido" print (dia_semana(3)) print (dia_semana(6)) print (dia_semana(7))
O resultado será:
Quinta
Domingo
Número Inválido
Podemos ainda ter mais de uma opção de escolha na decisão; por exemplo, posso dizer que se um usuário for admin ou gerente ele terá acesso total ou full, mas se ele for um convidado somente, terá acesso limitado.
Veja esse exemplo,
def acesso(usuario): match usuario: case "admin" | "gerente": return "Acesso Total" case "convidado": return "Acesso limitado" case _: return "Sem acesso" print(acesso("admin"))
Ao executar essas linhas o resultado será:
Acesso total
Acima, disse que def quer dizer “definição” porque acaba fazendo o match-case parecer, ou servir de função. Veja esse exemplo que peguei do site tutorialpoints:
ef greeting(details):
match details:
case [time, name]:
return f'Good {time} {name}!'
case [time, *names]:
msg=''
for name in names:
msg+=f'Good {time} {name}!\n'
return msg
print (greeting(["Morning", "Ravi"]))
print (greeting(["Afternoon","Guest"]))
print (greeting(["Evening", "Kajal", "Praveen", "Lata"]))