Sequências
e Tabuleiros
Dominar range(start, stop, step), criar passos variáveis e construir tabelas de multiplicação com loops aninhados.
Dominar range(start, stop, step), criar passos variáveis e construir tabelas de multiplicação com loops aninhados.
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.
Gerar sequências com range(start, stop, step)
Usar passo variável — positivo e negativo
Entender loops aninhados (for dentro de for)
Produzir saída tabular formatada — tabuada de multiplicação
Pense num cronômetro de academia. Você configura:
Esses três parâmetros — start, stop e step — são exatamente os ingredientes da função range() do Python.
A função range() gera uma sequência numérica conforme 3 parâmetros:
range(0, 5) vai até 4, não 5. Pra incluir o último, escreva range(0, N+1).
Dica: começa em 2, soma 3 a cada passo, e PARA antes de chegar em 12 (stop é exclusivo).
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
step é positivo, start < stop. Se é negativo, start > stop. Se cruzar errado, o range fica vazio e o for não executa nada.
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!
while, você teria que criar e atualizar uma variável manualmente. Em for com range, isso vem de graça.
Um for dentro de outro for. Para cada volta do laço externo, o laço interno executa completamente.
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)
for interno precisa estar indentado dentro do externo. O print() vazio fora do for interno é o que quebra a linha entre linhas da grade.
…quantas vezes o código dentro do laço interno será executado?
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.
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.
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:
N x M = R com colunas alinhadas{:largura}.
Laço externo: for n in range(1, 11)
Imprima cabeçalho: "Tabuada de N"
Laço interno: for m in range(1, 11)
Imprima f"{n}x{m:2} = {n*m:3}"
Após o for interno, print() vazio para separar
print de cabeçalho fica dentro do externo, mas fora do interno. O print de cálculo fica dentro dos dois.
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
{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.
{valor:largura} → alinha colunas em saídas tabularesEstruturas de repetição aninhadas aplicadas — projetos com matrizes, padrões geométricos e validação de dados.
Dos 3 conceitos de hoje (range, passo variável, loops aninhados), qual fez mais sentido e qual ainda precisa de mais prática?
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:
N (número da tabuada) e limite (até quantos multiplicar)for m in range(1, limite + 1) (atenção ao +1!){:largura}for. Mas reforça range com variável e formatação.
Leia n = int(input(...))
Leia limite = int(input(...))
Imprima cabeçalho f"Tabuada de {n}"
for m in range(1, limite + 1):
Imprima f"{n} x {m:2} = {n*m:4}"
range(1, limite) NÃO inclui limite. Para chegar até ele, use range(1, limite + 1).
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