01 / 19
Lógica de Programação · Sem 9 · Aula 2/2

Sequências
e Tabuleiros

Dominar range(start, stop, step), criar passos variáveis e construir tabelas de multiplicação com loops aninhados.

ProfessorGuilherme Antunes CursoEnsino Médio Técnico — Informática Duração100 minutos (2 aulas)
02 / 19
Recap + Objetivos

Hoje você vai.

Na aula passada você aprendeu a sintaxe do for, iteração sobre coleções e enumerate(). Hoje vamos a 2 superpoderes do for: controlar o passo e aninhar laços.

01

Gerar sequências com range(start, stop, step)

02

Usar passo variável — positivo e negativo

03

Entender loops aninhados (for dentro de for)

04

Produzir saída tabular formatada — tabuada de multiplicação

03 / 19
Introdução · Analogia

O Cronômetro Digital ⏱️

Pense num cronômetro de academia. Você configura:

  • De onde começa → ex: 0
  • Até onde vai → ex: 60 segundos
  • De quanto em quanto pula → ex: de 5 em 5

Esses três parâmetros — start, stop e step — são exatamente os ingredientes da função range() do Python.

⏱ Cronômetro · step 5
25
0 → 5 → 10 → 15 → 20 → 25 → …
04 / 19
Conceito 1

range() — gerador de sequências

A função range() gera uma sequência numérica conforme 3 parâmetros:

  • start → onde a sequência começa (incluído)
  • stop → onde para — exclusivo, NÃO entra
  • step → de quanto em quanto avança
3
parâmetros
05 / 19
Sintaxe · range

Variações do range

Chamada
Sequência gerada
Observação
range(5)
0, 1, 2, 3, 4
só stop · começa em 0, passo 1
range(2, 8)
2, 3, 4, 5, 6, 7
start + stop · passo 1
range(0, 20, 5)
0, 5, 10, 15
start + stop + step
range(10, 0, -1)
10, 9, 8, 7, 6, 5, 4, 3, 2, 1
passo negativo · regressivo
⚠️ O stop é exclusivo: range(0, 5) vai até 4, não 5. Pra incluir o último, escreva range(0, N+1).
06 / 19
Pause e responda

Qual sequência é gerada por range(2, 12, 3)?

A2, 5, 8, 11
B2, 5, 8, 11, 14
C3, 6, 9, 12
D2, 3, 4, 5, 6, 7, 8, 9, 10, 11

Dica: começa em 2, soma 3 a cada passo, e PARA antes de chegar em 12 (stop é exclusivo).

07 / 19
Conceito 2

Passo variável

O step não precisa ser 1. Pode pular de 2 em 2, de 5 em 5, ou ir para trás com -1:

# Passo positivo: pulando de 2 em 2
for n in range(0, 21, 2):
    print(n, end=" ")

# Saída: 0 2 4 6 8 10 12 14 16 18 20
# Passo negativo: contagem regressiva
for n in range(10, 0, -1):
    print(n, end=" ")

# Saída: 10 9 8 7 6 5 4 3 2 1
🧠 Regra prática: se o step é positivo, start < stop. Se é negativo, start > stop. Se cruzar errado, o range fica vazio e o for não executa nada.
08 / 19
Mão na massa · Prática

🟢 Praticar: Foguete 🚀

Fácil

Situação: simule a contagem regressiva de um foguete. Mostre 10, 9, 8… até 1 e, ao final, imprima "Decolar!". Use range com passo negativo.

for n in range(10, 0, -1):
    print(n)

print("Decolar!")

# Saída:
# 10
# 9
# 8
# ...
# 1
# Decolar!
🧠 Compare com while: em while, você teria que criar e atualizar uma variável manualmente. Em for com range, isso vem de graça.
09 / 19
Conceito 3

Loops aninhados

Um for dentro de outro for. Para cada volta do laço externo, o laço interno executa completamente.

  • É como um tabuleiro: linha por linha, cada linha tem várias colunas
  • Total de execuções = externo × interno
  • Útil para tabelas, matrizes, grades
×
multiplica execuções
10 / 19
Sintaxe · for dentro de for

Cada item do externo gira o interno inteiro

for linha in range(1, 4):       # externo: 1, 2, 3
    for coluna in range(1, 4):  # interno: 1, 2, 3
        print(f"({linha},{coluna})", end=" ")
    print()  # quebra de linha ao terminar a linha

# Saída:
# (1,1) (1,2) (1,3)
# (2,1) (2,2) (2,3)
# (3,1) (3,2) (3,3)
🧠 Atenção à indentação: o for interno precisa estar indentado dentro do externo. O print() vazio fora do for interno é o que quebra a linha entre linhas da grade.
11 / 19
Pause e responda

Em loops aninhados, se o externo executa 4 vezes e o interno 6 vezes

…quantas vezes o código dentro do laço interno será executado?

A4 vezes
B6 vezes
C10 vezes
D24 vezes (4 × 6)

Cuidado: aninhar laços multiplica custo. Um laço de 1000 dentro de outro de 1000 já são 1 milhão de execuções.

12 / 19
Saída tabular

Alinhando colunas com {:largura}

Para tabelas ficarem alinhadas, use o especificador {valor:largura} dentro de uma f-string. Ele reserva um espaço fixo para o número:

# SEM formatação — bagunçado
for i in range(1, 6):
    print(i, i*7)

# Saída (desalinhada):
# 1 7
# 2 14
# 3 21
# 4 28
# 5 35
# COM {:3} — reserva 3 espaços
for i in range(1, 6):
    print(f"{i:3} x 7 = {i*7:3}")

# Saída (alinhada):
#   1 x 7 =   7
#   2 x 7 =  14
#   3 x 7 =  21
#   4 x 7 =  28
#   5 x 7 =  35

{i:3} = ocupa pelo menos 3 colunas. Números pequenos ganham espaços à esquerda.

13 / 19
Projeto Final · AP4

🔴 Desafio: Tabuada Completa

Desafio

Missão: imprimir as tabuadas de 1 a 10, cada uma de 1×N até 10×N, usando loops aninhados e formatação alinhada.

O programa precisa:

  • Percorrer cada tabuada de 1 a 10 (laço externo)
  • Para cada tabuada, percorrer multiplicadores de 1 a 10 (laço interno)
  • Imprimir cada linha no formato N x M = R com colunas alinhadas
  • Separar cada tabuada com uma linha em branco ou um cabeçalho
🧠 Dica: esse desafio combina 3 conceitos da aula — range, loops aninhados e formatação {:largura}.
14 / 19
Plano de ataque

5 passos para resolver

1

Laço externo: for n in range(1, 11)

2

Imprima cabeçalho: "Tabuada de N"

3

Laço interno: for m in range(1, 11)

4

Imprima f"{n}x{m:2} = {n*m:3}"

5

Após o for interno, print() vazio para separar

⚠️ Indentação: o print de cabeçalho fica dentro do externo, mas fora do interno. O print de cálculo fica dentro dos dois.
15 / 19
Resolução · Tabuada

Tabuada completa pronta

for n in range(1, 11):
    print(f"--- Tabuada de {n} ---")
    for m in range(1, 11):
        print(f"{n} x {m:2} = {n*m:3}")
    print()  # linha em branco entre tabuadas

# Saída (trecho):
# --- Tabuada de 7 ---
# 7 x  1 =   7
# 7 x  2 =  14
# 7 x  3 =  21
# 7 x  4 =  28
# ...
# 7 x 10 =  70
🧠 Repare o uso de {m:2} e {n*m:3}: garante que 1, 2, 9 e 10 ocupem o mesmo espaço, deixando as colunas alinhadas. print() sem argumento imprime apenas uma quebra de linha.
16 / 19
Encerramento

O que aprendemos hoje

  • range(start, stop, step) → 3 parâmetros · stop é exclusivo
  • Passo variável → positivo (avança), negativo (regride)
  • Loops aninhados → for dentro de for · execuções multiplicam
  • Formatação {valor:largura} → alinha colunas em saídas tabulares
  • Tabuada → exemplo clássico que combina os 3 conceitos
📚 Próxima semana

Estruturas de repetição aninhadas aplicadas — projetos com matrizes, padrões geométricos e validação de dados.

❓ Pergunta de fechamento

Dos 3 conceitos de hoje (range, passo variável, loops aninhados), qual fez mais sentido e qual ainda precisa de mais prática?

17 / 19
Desafio bônus

🔴 Desafio: Tabuada Interativa

Desafio

Missão: o usuário escolhe um número N e um multiplicador final limite. O programa imprime N × 1, N × 2 … N × limite em formato tabular alinhado.

O programa precisa:

  • Pedir N (número da tabuada) e limite (até quantos multiplicar)
  • Imprimir um cabeçalho com o número escolhido
  • Usar for m in range(1, limite + 1) (atenção ao +1!)
  • Formatar a saída para colunas alinhadas com {:largura}
🧠 Dica: esse exercício não precisa de loops aninhados — só um for. Mas reforça range com variável e formatação.
18 / 19
Plano de ataque

5 passos para resolver

1

Leia n = int(input(...))

2

Leia limite = int(input(...))

3

Imprima cabeçalho f"Tabuada de {n}"

4

for m in range(1, limite + 1):

5

Imprima f"{n} x {m:2} = {n*m:4}"

⚠️ Cuidado com o range: range(1, limite) NÃO inclui limite. Para chegar até ele, use range(1, limite + 1).
19 / 19
Resolução · Bônus

Tabuada interativa pronta

n = int(input("Tabuada de qual número? "))
limite = int(input("Até quantos multiplicar? "))

print(f"--- Tabuada de {n} ---")

for m in range(1, limite + 1):
    print(f"{n} x {m:2} = {n*m:4}")

# Exemplo com n=8, limite=12:
# --- Tabuada de 8 ---
# 8 x  1 =    8
# 8 x  2 =   16
# 8 x  3 =   24
# ...
# 8 x 12 =   96
🧠 Diferença para a tabuada do desafio anterior: agora o n é fixo (escolhido pelo usuário) e só o multiplicador varia — então usamos um único for, não dois aninhados.