Fluxo de Controle em Python

Fluxo de controle em Python

O fluxo de controle é a ordem em que instruções individuais, comandos ou chamadas de função são executados ou avaliados. O fluxo de controle de um programa Python é regulado por instruções condicionais, loops e chamadas de função.

Operadores de Comparação

OperadorSignificado
==Igual a
!=Diferente de
<Menor que
>Maior que
<=Menor ou igual a
>=Maior ou igual a

Estes operadores avaliam para True ou False dependendo dos valores que você lhes atribui.

Exemplos:

42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'dog' != 'cat'
True
42 == 42.0
True
42 == '42'
False
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

A que avalia 'hello' == 'Hello'?
A. True
B. False
C. None
D. Levanta um erro

Operadores Booleanos

Existem três operadores booleanos: and, or e not. Na ordem de precedência, do mais alto para o mais baixo, eles são not, and e or.

Tabela de Verdade do Operador and:

ExpressãoAvalia para
True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

Tabela de Verdade do Operador or:

ExpressãoAvalia para
True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

Tabela de Verdade do Operador not:

ExpressãoAvalia para
not TrueFalse
not FalseTrue

Misturando Operadores

Você pode misturar operadores booleanos e de comparação:

(4 < 5) and (5 < 6)
True
(4 < 5) and (9 < 6)
False
(1 == 2) or (2 == 2)
True

Além disso, você pode misturar e usar múltiplos operadores booleanos em uma expressão, juntamente com os operadores de comparação:

2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
# Na instrução abaixo, 3 < 4 and 5 > 5 é executado primeiro, avaliando para False
# Então, 5 > 4 retorna True, então o resultado após True or False é True
5 > 4 or 3 < 4 and 5 > 5
True
# Agora, a instrução entre parênteses é executada primeiro, então True and False retorna False.
(5 > 4 or 3 < 4) and 5 > 5
False

Instruções if

A instrução if avalia uma expressão e, se essa expressão for True, executa o código indentado seguinte:

# instrução if: execute o bloco de código quando a condição for True
name = 'Debora'

if name == 'Debora':  # Verifica se o nome é igual a 'Debora'
   print('Hi, Debora')  # Esta linha é executada se a condição for True
Hi, Debora
if name != 'George':
   print('You are not George')
You are not George

A instrução else é executada somente se a avaliação da expressão if e de todas as expressões elif forem False:

# if-else: execute código diferente com base na condição
name = 'Debora'

if name == 'George':
   print('Hi, George.')
else:  # Executa se a condição if for False
   print('You are not George')
You are not George
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Quando o bloco else é executado em uma instrução if-else?
A. Sempre
B. Somente quando a condição if (e todas as condições elif, se presentes) forem False
C. Somente quando a condição if for True
D. Nunca

Somente depois que a expressão da instrução if for False, a instrução elif é avaliada e executada:

# if-elif: verifica múltiplas condições em sequência
name = 'George'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':  # Verificado somente se a condição anterior for False
   print('Hi George!')
Hi George!

as partes elif e else são opcionais.

name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')
Who are you?

Operador Condicional Ternário

Muitas linguagens de programação possuem um operador ternário, que define uma expressão condicional. O uso mais comum é criar uma instrução de atribuição condicional simples e concisa. Em outras palavras, oferece código em uma linha para avaliar a primeira expressão se a condição for verdadeira e, caso contrário, avalia a segunda expressão.

<expression1> if <condition> else <expression2>

Exemplo:

age = 15

# esta instrução if:
if age < 18:
   print('kid')
else:
   print('adult')
kid
# Operador ternário: expressão condicional em uma linha
# Sintaxe: valor_se_verdadeiro if condição else valor_se_falso
print('kid' if age < 18 else 'adult')
kid

Operadores ternários podem ser encadeados:

age = 15

# este operador ternário:
print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
teen
# é equivalente a esta instrução if:
if age < 13:
    print('kid')
else:
    if age < 18:
        print('teen')
    else:
        print('adult')
teen

Instrução Switch-Case

Instruções Switch-Case

Em linguagens de programação de computador, uma instrução switch é um tipo de mecanismo de controle de seleção usado para permitir que o valor de uma variável ou expressão mude o fluxo de controle da execução do programa através de pesquisa e mapeamento.

As instruções Switch-Case, ou Structural Pattern Matching, foram introduzidas pela primeira vez em 2020 através da PEP 622, e depois oficialmente lançadas com o Python 3.10 em setembro de 2022.

Tutorial Oficial

A PEP 636 fornece um tutorial oficial para o Pattern Matching do Python ou instruções Switch-Case.

Correspondência de valores únicos

response_code = 201
match response_code:
    case 200:
        print("OK")
    case 201:
        print("Created")
    case 300:
        print("Multiple Choices")
    case 307:
        print("Temporary Redirect")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")
    case 502:
        print("502 Bad Gateway")
Created

Correspondência com o Padrão or

Neste exemplo, o caractere pipe (| ou or) permite que o python retorne a mesma resposta para dois ou mais casos.

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
Internal Server Error

Correspondência pelo comprimento de um Iterável

today_responses = [200, 300, 404, 500]
match today_responses:
    case [a]:
            print(f"One response today: {a}")
    case [a, b]:
            print(f"Two responses today: {a} and {b}")
    case [a, b, *rest]:
            print(f"All responses: {a}, {b}, {rest}")
All responses: 200, 300, [404, 500]

Valor Padrão

O símbolo de sublinhado (_) é usado para definir um caso padrão:

response_code = 800
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")
Invalid Code

Correspondência de Classes Nativas

response_code = "300"
match response_code:
    case int():
            print('Code is a number')
    case str():
            print('Code is a string')
    case _:
            print('Code is neither a string nor a number')
Code is a string

Protegendo Instruções Match-Case

response_code = 300
match response_code:
    case int() if response_code > 99 and response_code < 500:
            print('Code is a valid number')
    case _:
            print('Code is an invalid number')
Code is a valid number

Instruções de Loop while

A instrução while é usada para execução repetida enquanto uma expressão for True:

# loop while: repete o código enquanto a condição for True
spam = 0
while spam < 5:  # Continua enquanto spam for menor que 5
    print('Hello, world.')
    spam = spam + 1  # Incrementa o contador para evitar loop infinito
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que um loop while faz?
A. Repete o código enquanto a condição for True
B. Executa o código exatamente uma vez
C. Executa o código um número fixo de vezes
D. Pula a execução do código

Instruções break

Se a execução atingir uma instrução break, ela sai imediatamente da cláusula do loop while:

# instrução break: sai do loop imediatamente quando encontrada
while True:  # Loop infinito
    name = input('Please type your name: ')
    if name == 'your name':
        break  # Sai do loop imediatamente

print('Thank you!')
Please type your name: your name
Thank you!

Instruções continue

Quando a execução do programa atinge uma instrução continue, a execução do programa salta imediatamente de volta para o início do loop.

# instrução continue: pula o restante da iteração do loop e inicia a próxima iteração
while True:
    name = input('Who are you? ')
    if name != 'Joe':
        continue  # Pula para a próxima iteração, não pede a senha
    password = input('Password? (It is a fish.): ')
    if password == 'swordfish':
        break  # Sai do loop quando a senha estiver correta

print('Access granted.')
Who are you? Charles
Who are you? Debora
Who are you? Joe
Password? (It is a fish.): swordfish
Access granted.

Loop For

O loop for itera sobre uma list, tuple, dictionary, set ou string:

# loop for: itera sobre cada item em uma sequência
pets = ['Bella', 'Milo', 'Loki']
for pet in pets:  # Itera sobre cada pet na lista
    print(pet)  # Imprime cada nome de pet
Bella
Milo
Loki
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

Sobre o que um loop for itera?
A. Apenas números
B. Apenas strings
C. Qualquer sequência iterável (lista, tupla, dicionário, conjunto, string, etc.)
D. Apenas listas

A função range()

A função range() retorna uma sequência de números. Ela começa em 0, incrementa em 1 e para antes de um número especificado:

for i in range(5):
    print(f'Will stop at 5! or 4? ({i})')
Will stop at 5! or 4? (0)
Will stop at 5! or 4? (1)
Will stop at 5! or 4? (2)
Will stop at 5! or 4? (3)
Will stop at 5! or 4? (4)
Quiz

Faça login para responder este quiz e acompanhar seu progresso de aprendizagem

O que range(5) gera?
A. Números de 1 a 5
B. Números de 0 a 4
C. Números de 0 a 5
D. Cinco números aleatórios

A função range() também pode modificar seus 3 argumentos padrão. Os dois primeiros serão os valores de start e stop, e o terceiro será o argumento step. O passo é a quantidade pela qual a variável é aumentada após cada iteração.

# range(start, stop, step)
for i in range(0, 10, 2):
   print(i)
0
2
4
6
8

Você pode até usar um número negativo para o argumento step para fazer o loop for contar regressivamente em vez de progressivamente.

for i in range(5, -1, -1):
    print(i)
5
4
3
2
1
0

Declaração For else

Isso permite especificar uma instrução a ser executada no caso de o loop completo ter sido executado. Só é útil quando uma condição break pode ocorrer no loop:

for i in [1, 2, 3, 4, 5]:
   if i == 3:
       break
else:
   print("only executed when no item is equal to 3")

Encerrando um Programa com sys.exit()

A função exit() permite sair do Python.

import sys

while True:
    feedback = input('Type exit to exit: ')
    if feedback == 'exit':
        print(f'You typed {feedback}.')
        sys.exit()
Type exit to exit: open
Type exit to exit: close
Type exit to exit: exit
You typed exit.