Estruturas de Controle em Python

PythonBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará as estruturas de controle fundamentais do Python: instruções condicionais e loops. Com base no conhecimento adquirido em laboratórios anteriores, você aprenderá a controlar o fluxo de seus programas usando instruções if-else, loops for e loops while. Esta experiência prática aprofundará sua compreensão dos conceitos centrais do Python e o preparará para escrever programas mais complexos e dinâmicos.

Compreendendo Instruções Condicionais

Nesta etapa, você aprenderá sobre as instruções condicionais em Python, especificamente a estrutura if-else.

Abra o interpretador Python digitando o seguinte comando no seu terminal:

python

Você verá o prompt do Python (>>>), indicando que agora está no shell interativo do Python.

Python Interpreter

Vamos começar com uma instrução if simples. No interpretador Python, digite o seguinte:

age = 20
if age >= 18:
    print("You are an adult.")

Saída:

You are an adult.

Dicas: Tenha cuidado com a indentação, ela é fundamental no Python. Recomenda-se o uso de quatro espaços para a indentação.

A instrução if verifica se a condição age >= 18 é verdadeira. Se for, o bloco de código indentado é executado.

Agora, vamos adicionar uma cláusula else:

age = 15
if age >= 18:
    print("You are an adult.")
else:
    print("You are a minor.")

Saída:

You are a minor.

A cláusula else fornece uma ação alternativa quando a condição é falsa.

Para condições mais complexas, podemos usar cláusulas elif (abreviação de else if):

age = 65
if age < 13:
    print("You are a child.")
elif age < 20:
    print("You are a teenager.")
elif age < 65:
    print("You are an adult.")
else:
    print("You are a senior citizen.")

Saída:

You are a senior citizen.

As cláusulas elif permitem verificar múltiplas condições em sequência.

Lembre-se, a indentação é crucial no Python. Ela define os blocos de código associados a cada condição.

Explorando Loops "For"

Nesta etapa, você aprenderá sobre os loops for, que são usados para iterar sobre sequências (como listas, strings ou intervalos) no Python.

Vamos começar com um loop for simples usando um intervalo (range). No interpretador Python, digite:

for i in range(5):
    print(i)

Saída:

0
1
2
3
4

A função range(5) gera uma sequência de números de 0 a 4, e o loop percorre cada um desses números.

A função range() pode receber vários argumentos para especificar os valores de início, fim e o passo (incremento). Vamos tentar um intervalo diferente:

for i in range(1, 10, 2):
    print(i)

Saída:

1
3
5
7
9
  • A função range(1, 10, 2) gera uma sequência de números começando em 1, indo até (mas não incluindo) 10, com um passo de 2.

Agora, vamos iterar sobre uma lista:

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"I like {fruit}")

Saída:

I like apple
I like banana
I like cherry

Aqui, o loop percorre cada item na lista fruits.

Você também pode usar loops for com strings:

for char in "Python":
    print(char.upper())

Saída:

P
Y
T
H
O
N

Este loop percorre cada caractere da string "Python".

Vamos combinar um loop for com instruções condicionais:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        print(f"{num} is even")
    else:
        print(f"{num} is odd")

Saída:

1 is odd
2 is even
3 is odd
4 is even
5 is odd
6 is even
7 is odd
8 is even
9 is odd
10 is even

Este loop verifica cada número na lista e imprime se ele é par (even) ou ímpar (odd).

Entendendo o operador módulo (%): O símbolo % é chamado de operador módulo. Ele retorna o resto da divisão de um número por outro. Por exemplo:

  • 5 % 2 resulta em 1 (porque 5 dividido por 2 é 2 com resto 1)
  • 4 % 2 resulta em 0 (porque 4 dividido por 2 é 2 com resto 0)
  • 10 % 3 resulta em 1 (porque 10 dividido por 3 é 3 com resto 1)

Quando verificamos num % 2 == 0, estamos perguntando: "A divisão deste número por 2 deixa resto 0?". Se a resposta for sim, o número é par. Se o resto for 1, o número é ímpar. O operador == é o comparador de igualdade que verifica se dois valores são idênticos.

Compreendendo Loops "While"

Nesta etapa, você aprenderá sobre os loops while, que são usados para repetir um bloco de código enquanto uma condição for verdadeira.

Vamos começar com um loop while simples. No interpretador Python, digite:

count = 0
while count < 5:
    print(count)
    count += 1

Saída:

0
1
2
3
4

Este loop continua sendo executado enquanto a variável count for menor que 5.

Os loops while são frequentemente usados quando você não sabe antecipadamente quantas vezes precisará iterar. Veja um exemplo:

import random
number = random.randint(1, 10)
guess = 0
while guess != number:
    guess = int(input("Guess a number between 1 and 10: "))
    if guess < number:
        print("Too low!")
    elif guess > number:
        print("Too high!")
    else:
        print(f"Congratulations! You guessed the number {number}!")

Isso cria um jogo de adivinhação simples onde o usuário continua tentando até acertar o número correto. Quando o palpite do usuário coincide com o número sorteado, a cláusula else é executada e exibe a mensagem de parabéns.

Tenha cuidado com os loops while — se a condição nunca se tornar falsa, você criará um loop infinito. Veja um exemplo (mas não o execute):

while True:
    print("This will print forever!")

Se você acidentalmente executar um loop infinito, pode interrompê-lo pressionando Ctrl+C.

Você pode usar a instrução break para sair de um loop prematuramente:

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break

Saída:

0
1
2
3
4

Este loop normalmente rodaria para sempre, mas a instrução break o encerra quando count atinge 5.

Loops Aninhados e Comandos de Controle de Loop

Nesta etapa, você aprenderá sobre loops aninhados e comandos adicionais de controle de fluxo.

Loops aninhados são loops colocados dentro de outros loops. Aqui está um exemplo de loops for aninhados:

for i in range(3):
    for j in range(2):
        print(f"i: {i}, j: {j}")

Saída:

i: 0, j: 0
i: 0, j: 1
i: 1, j: 0
i: 1, j: 1
i: 2, j: 0
i: 2, j: 1

O loop interno completa todas as suas iterações para cada iteração única do loop externo.

Além do break, o Python oferece a instrução continue, que pula o restante da iteração atual e passa diretamente para a próxima:

for num in range(10):
    if num % 2 == 0:
        continue
    print(num)

Saída:

1
3
5
7
9

Este loop imprime apenas números ímpares, pulando os pares.

Entendendo o operador módulo neste contexto: Aqui, num % 2 == 0 verifica se o número é par. Quando esta condição é verdadeira, o comando continue ignora a linha print(num) e volta para o início do loop para o próximo número. Assim, apenas números ímpares (onde o resto da divisão por 2 é 1) chegam à instrução de impressão.

Você também pode usar cláusulas else com loops. O bloco else é executado se o loop terminar normalmente (ou seja, sem ser interrompido por um break):

for num in range(2, 10):
    for i in range(2, num):
        if num % i == 0:
            print(f"{num} is not prime")
            break
    else:
        print(f"{num} is prime")

Saída:

2 is prime
3 is prime
4 is not prime
5 is prime
6 is not prime
7 is prime
8 is not prime
9 is not prime

Este loop aninhado verifica números primos. A cláusula else associada ao for interno só é executada quando o loop termina sem encontrar nenhum divisor, indicando que o número é primo.

Juntando Tudo

Nesta etapa final, você criará um programa simples que utiliza as estruturas de controle que aprendeu neste laboratório.

Saia do interpretador Python digitando exit() ou pressionando Ctrl+D.

Abra o WebIDE no ambiente VM da LabEx.

Interface WebIDE LabEx VM

Crie um novo arquivo chamado number_analyzer.py no diretório ~/project usando o seguinte comando:

touch ~/project/number_analyzer.py

Abra o arquivo recém-criado no editor do WebIDE.

Copie e cole o seguinte código no arquivo:

def analyze_numbers():
    numbers = []
    while True:
        user_input = input("Enter a number (or 'done' to finish): ")
        if user_input.lower() == 'done':
            break
        try:
            number = float(user_input)
            numbers.append(number)
        except ValueError:
            print("Invalid input. Please enter a number or 'done'.")

    if not numbers:
        print("No numbers entered.")
        return

    total = sum(numbers)
    average = total / len(numbers)
    maximum = max(numbers)
    minimum = min(numbers)

    print(f"\nAnalysis of {len(numbers)} numbers:")
    print(f"Total: {total}")
    print(f"Average: {average:.2f}")
    print(f"Maximum: {maximum}")
    print(f"Minimum: {minimum}")

    print("\nNumber distribution:")
    for num in numbers:
        if num < average:
            print(f"{num} is below average")
        elif num > average:
            print(f"{num} is above average")
        else:
            print(f"{num} is equal to average")

if __name__ == "__main__":
    analyze_numbers()

Este programa demonstra o uso de loops while, loops for, instruções condicionais e tratamento de exceções.

Salve o arquivo (o salvamento automático está ativado) e execute-o usando o seguinte comando no terminal:

python ~/project/number_analyzer.py

Insira alguns números quando solicitado e digite done para ver a análise. Você deverá ver uma saída semelhante a esta:

Enter a number (or 'done' to finish): 10
Enter a number (or 'done' to finish): 20
Enter a number (or 'done' to finish): 30
Enter a number (or 'done' to finish): 40
Enter a number (or 'done' to finish): done

Analysis of 4 numbers:
Total: 100.0
Average: 25.00
Maximum: 40.0
Minimum: 10.0

Number distribution:
10.0 is below average
20.0 is below average
30.0 is above average
40.0 is above average

Se você cometer um erro ao inserir os dados, poderá executar o programa novamente. Esta é uma boa oportunidade para praticar a execução de scripts Python várias vezes com entradas diferentes.

Resumo

Neste laboratório, você explorou as estruturas de controle fundamentais do Python: instruções condicionais (if-else), loops for e loops while. Você aprendeu a controlar o fluxo de seus programas, tomar decisões com base em condições e iterar sobre sequências de dados. Também praticou o uso de loops aninhados e comandos de controle como break e continue.

Essas estruturas de controle formam a espinha dorsal da programação em Python, permitindo a criação de programas mais complexos e dinâmicos. Você viu como esses conceitos podem ser combinados para criar um programa útil que analisa um conjunto de números inseridos pelo usuário.

À medida que você continua sua jornada no Python, descobrirá que essas estruturas são essenciais para resolver uma grande variedade de problemas de programação. Lembre-se de praticar esses conceitos regularmente, experimentando diferentes combinações e casos de uso para reforçar seu aprendizado.