Módulo 9 - Repetições com for e range()
Tabuada com for: do 7 sozinho ao 1 ao 10 completo
10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Gerar a tabuada de um número com for e range(1, 11).
- Formatar a saída com f-string e alinhar as colunas com :2d.
- Entender o for aninhado: um loop completo rodando dentro de cada volta de outro.
- Imprimir a tabuada completa do 1 ao 10 com dois loops.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Tabuada com for: do 7 sozinho ao 1 ao 10 completo.
Os objetivos desta aula. Gerar a tabuada de um número com for e range(1, 11). Formatar a saída com f-string e alinhar as colunas com :2d. Entender o for aninhado: um loop completo rodando dentro de cada volta de outro. Imprimir a tabuada completa do 1 ao 10 com dois loops.
Veja o essencial, parte por parte.
A tabuada de um número em três linhas. Tabuada do 7: for i in range(1, 11) e um print com f-string calculando 7 * i.
Alinhando as colunas: o truque do :2d. {i:2d}: inteiro com 2 casas reservadas, alinhado à direita. Para números até 99.
O primeiro for aninhado: a tabuada completa. Agora o salto da aula, e ele merece calma, porque é a primeira vez no curso que um loop entra dentro de outro.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
A tabuada de um número em três linhas
Se os loops têm um projeto de estimação, é a tabuada. Ela pede exatamente o que o for oferece: a mesma conta repetida com um número que cresce de 1 a 10. Você já tem todas as peças. O range(1, 11) entrega os números de 1 a 10 (fim exclusivo, sempre ele), e a cada volta o programa calcula e mostra uma linha da tabuada.
numero = 7
for i in range(1, 11):
print(f"{numero} x {i} = {numero * i}")
# 7 x 1 = 7
# 7 x 2 = 14
# ...
# 7 x 10 = 70A tabuada do 7 em três linhas. Troque o valor de numero e rode de novo: qualquer tabuada, o mesmo código.
A novidade na linha do print é a f-string, e vale uma espiada honesta: é uma string com um f antes das aspas, onde tudo que estiver entre chaves é executado como código e o resultado entra no texto. O {numero} vira 7, o {i} vira o número da volta e o {numero * i} faz a multiplicação ali mesmo, dentro da mensagem. É mais limpo que emendar pedaços com vírgulas no print. O módulo 12 destrincha as f-strings por completo; aqui usamos o essencial, porque a tabuada fica muito melhor com elas.
Alinhando as colunas: o truque do :2d
Rode a tabuada e repare num defeito estético: quando o i chega ao 10, a linha fica mais comprida e as colunas desalinham, porque 10 tem dois dígitos e os anteriores têm um. Tabuada de caderno escolar tem colunas retas, e a f-string tem um recurso exatamente para isso: dentro das chaves, depois do nome da variável, dois pontos e uma instrução de formato. O formato 2d significa: trate como número inteiro (d) e reserve 2 casas, preenchendo com espaço à esquerda quando sobrar.
numero = 7
for i in range(1, 11):
print(f"{numero} x {i:2d} = {numero * i}")
# 7 x 1 = 7
# 7 x 2 = 14
# ...
# 7 x 9 = 63
# 7 x 10 = 70Com {i:2d}, o 1 vira espaço + 1 e o 10 ocupa as duas casas: as colunas do x e do igual ficam retas.
Compare as saídas com e sem o :2d no Playground; a diferença salta aos olhos na linha do 10. Esse cuidado parece cosmético, mas formatação de saída é metade da utilidade de um programa de terminal: relatório desalinhado é relatório que ninguém confia. Você vai reutilizar esse truque no projeto final, alinhando a lista de tarefas.
O primeiro for aninhado: a tabuada completa
Agora o salto da aula, e ele merece calma, porque é a primeira vez no curso que um loop entra dentro de outro. O objetivo: imprimir as tabuadas do 1 ao 10, todas, de uma vez. Pense no que isso pede. Para CADA número de 1 a 10, você quer rodar a tabuada COMPLETA daquele número, que por sua vez é um for de 10 voltas. Um for para escolher o número da tabuada, e dentro dele, o for que você já escreveu. Isso é um loop aninhado.
for numero in range(1, 11):
print(f"--- Tabuada do {numero} ---")
for i in range(1, 11):
print(f"{numero} x {i:2d} = {numero * i}")
print()
# --- Tabuada do 1 ---
# 1 x 1 = 1
# ... (10 linhas)
#
# --- Tabuada do 2 ---
# ... e assim até a tabuada do 10O for de fora escolhe a tabuada; o de dentro imprime as 10 linhas dela. O print() vazio pula uma linha entre tabuadas.
Leia o código como um filme. O for de fora começa com numero valendo 1. Antes de avançar para o 2, TUDO que está indentado dentro dele acontece: o título, as dez voltas completas do for de dentro e a linha em branco. Só então numero vira 2 e a história se repete. O loop de dentro roda inteiro 10 vezes, uma para cada volta do de fora, somando 100 linhas de conta. A indentação conta essa história: o for de dentro tem 4 espaços, o print dele tem 8. Cada nível de recuo é um nível de profundidade.
Uma leitura do dia a dia ajuda a fixar: um relógio. O ponteiro das horas é o loop de fora; o dos minutos, o de dentro. Para o ponteiro das horas avançar UMA posição, o dos minutos precisa completar a volta INTEIRA. Sessenta minutos por hora, dez linhas de tabuada por número: a mesma mecânica. Aninhamento aparece em todo canto da programação (tabelas, grades de jogos, comparação de listas), e você acabou de escrever o seu primeiro sem drama.
Teste rápido
Num for aninhado em que o loop de fora dá 10 voltas e o de dentro dá 10, quantas vezes o print mais interno executa?
Perguntas frequentes
- Por que range(1, 11) e não range(1, 10) na tabuada?
- Fim exclusivo: range(1, 10) para no 9, e a tabuada perderia a linha do 10. Para incluir o 10, o fim é 11. É o off-by-one clássico da aula do range(), e a tabuada é o lugar onde ele mais aparece em prova.
- Preciso do f antes das aspas sempre? O que acontece se esquecer?
- Sem o f, as chaves viram texto literal: print("{numero} x {i}") mostra {numero} x {i} na tela, sem substituir nada. Não dá erro, dá resultado errado, então confira o f primeiro quando a saída mostrar chaves. Só strings que usam substituição precisam do f.
- Posso usar o mesmo nome de variável nos dois loops aninhados?
- Não deve. Se os dois usarem i, o de dentro atropela o valor do de fora e o resultado embaralha. Use nomes que contem a história: numero para a tabuada, i para a volta interna. Em aninhamentos, nomes claros deixam de ser estética e viram proteção contra bug.
- O print() vazio no meio do código serve para quê?
- Imprime uma linha em branco, só para separar visualmente uma tabuada da seguinte. Sem ele, as 100 linhas saem coladas e a leitura sofre. Detalhe pequeno, efeito grande: espaçamento é parte da formatação de saída tanto quanto o alinhamento das colunas.
- Existe limite de aninhamento? Posso pôr um terceiro for dentro?
- O Python aceita vários níveis, mas a legibilidade despenca a partir do terceiro: cada nível soma 4 espaços e uma dimensão mental. Neste curso, dois níveis bastam para tudo. Quando um problema pedir mais, costuma ser sinal de que uma função (módulo 13) organizaria melhor.
- A f-string faz conta de verdade dentro das chaves?
- Faz: {numero * i} executa a multiplicação na hora de montar o texto. Dá para chamar funções também, como {len(palavra)}. A recomendação é moderação: contas simples dentro das chaves, contas longas numa variável antes, para o print continuar legível.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.