Variáveis, entrada e saída, decisões e repetições
As peças com que se constrói qualquer programa: guardar valores, conversar com o usuário, escolher um caminho e repetir tarefas.
Navegação: ← → trocam de etapa · V alterna entre etapas e página única · M sumário · F tela cheia · + − tamanho do texto · dentro do código, Ctrl+Enter executa.
Todo código desta aula pode ser editado e executado aqui mesmo. Altere os exemplos à vontade; o botão ↺ restaura o original. Suas alterações ficam salvas neste navegador; em Progresso você pode baixá-las em um arquivo e continuar em outro computador.
Nos desafios e exercícios, o botão ✓ Verificar testa seu código com várias entradas e mostra o que está certo e o que falta.
Como um programa executa
O Python executa as linhas de cima para baixo, uma de cada vez. Cada linha trabalha com os valores que existem naquele momento.
x passa a valer 10, o valor de y muda? Por quê?Este quadro é um teste de mesa: cada clique executa uma linha e a tabela registra o valor das variáveis depois dela. Usaremos o mesmo recurso nas decisões e nas repetições.
Variáveis
Uma variável é um nome associado a um valor guardado na memória. Usamos o nome para recuperar o valor depois.
O sinal = é a atribuição: o Python calcula o lado direito e guarda o resultado no nome à esquerda. Não é a igualdade da matemática.
Regras para nomes de variáveis
| Nome | Válido? | Motivo |
|---|---|---|
nota_final | sim | letras, números e _; estilo recomendado em Python |
nota2 | sim | números são permitidos depois da primeira letra |
2nota | não | não pode começar com número |
nota final | não | não pode ter espaço |
nota-final | não | o hífen é lido como subtração |
if | não | palavra reservada da linguagem |
Prefira nomes que expliquem o conteúdo: media diz mais que m ou x1.
O Python diferencia maiúsculas de minúsculas: nota e Nota são variáveis diferentes.
Tipos de dados
| Tipo | Representa | Exemplos |
|---|---|---|
int | números inteiros | 42, -7, 0 |
float | números com parte decimal | 3.14, 2.0, -0.5 |
str | texto, sempre entre aspas | "Quixadá", '42' |
bool | verdadeiro ou falso | True, False |
19.90. Escrever 19,90 cria outra coisa (dois valores separados).type(valor) mostra o tipo de um valor.
Operadores aritméticos
| Operador | Operação | Exemplo |
|---|---|---|
+ | soma | 7 + 2 → 9 |
- | subtração | 7 - 2 → 5 |
* | multiplicação | 7 * 2 → 14 |
/ | divisão real | 7 / 2 → 3.5 |
// | divisão inteira (quociente) | 7 // 2 → 3 |
% | resto da divisão | 7 % 2 → 1 |
** | potência | 7 ** 2 → 49 |
Ordem: primeiro **, depois * / // %, por último + -. Parênteses mudam a ordem.
Funções matemáticas e o módulo math
Além dos operadores, o Python traz funções prontas. Algumas estão sempre disponíveis; outras ficam no módulo math, que precisa ser importado uma vez, no início do programa, com import math.
| Função | O que faz | Exemplo |
|---|---|---|
abs(x) | valor absoluto | abs(-7) → 7 |
round(x, n) | arredonda para n casas | round(3.14159, 2) → 3.14 |
max / min | maior / menor valor | max(4, 9, 2) → 9 |
math.sqrt(x) | raiz quadrada | math.sqrt(81) → 9.0 |
math.floor(x) | arredonda para baixo | math.floor(3.7) → 3 |
math.ceil(x) | arredonda para cima | math.ceil(3.2) → 4 |
math.pi | a constante π | 3.141592653589793 |
130 / 40 dá 3.25, mas não existe um quarto de ônibus: math.ceil(130 / 40) → 4.Aplicação: o teorema de Pitágoras.
round desempata para o número par: round(2.5) → 2 e round(3.5) → 4. Para apenas exibir um valor, prefira a f-string: f"{x:.2f}".Conversão de tipos
O tipo define o que uma operação faz. + entre números soma; entre textos, junta.
Para converter um valor de um tipo para outro, usamos o nome do tipo como função:
int() de um número com casas decimais corta a parte decimal; não arredonda.
Lendo mensagens de erro
Errar faz parte de programar. A mensagem de erro informa o tipo do problema, uma explicação e a linha em que o Python percebeu o erro.
| Erro | Causa mais comum |
|---|---|
SyntaxError | faltou :, aspas ou parêntese; algo não está escrito em Python |
IndentationError | recuo faltando ou desalinhado |
NameError | variável usada antes de ser criada, ou nome digitado diferente |
TypeError | operação entre tipos incompatíveis, como "5" + 3 |
ValueError | tipo certo, valor inválido: int("dez") |
ZeroDivisionError | divisão por zero |
Este programa tem três erros. Execute, leia a mensagem e a dica, corrija e repita até funcionar.
Mostrar a versão corrigida
Atualizando o valor de uma variável
Em pontos = pontos + 5, o Python lê o valor atual de pontos, soma 5 e guarda o resultado de volta no mesmo nome.
Esse padrão é tão comum que existe uma forma abreviada:
| Abreviado | Equivale a |
|---|---|
x += 1 | x = x + 1 |
x -= 3 | x = x - 3 |
x *= 2 | x = x * 2 |
x /= 4 | x = x / 4 |
Saída com print
print() mostra valores na tela e pula para a próxima linha.
Vários valores separados por vírgula são mostrados com um espaço entre eles, e podem ser de tipos diferentes.
| Parâmetro | Controla | Padrão |
|---|---|---|
sep | o que vai entre os valores | um espaço |
end | o que vai no final | quebra de linha |
Formatando a saída com f-strings
Com um f antes das aspas, tudo que estiver entre { } é calculado e inserido no texto.
Depois de dois-pontos, dentro das chaves, indicamos o formato. :.2f significa “número com 2 casas decimais”.
Alinhando a saída em colunas
Dentro das chaves da f-string podemos definir uma largura e um alinhamento. Isso permite montar relatórios e tabelas bem organizados.
| Formato | Significado |
|---|---|
{x:10} | ocupa no mínimo 10 posições |
{x:<10} | alinha à esquerda |
{x:>10} | alinha à direita |
{x:^10} | centraliza |
{x:>10.2f} | à direita, 10 posições, 2 casas |
{x:03d} | inteiro com zeros à esquerda |
{x:,.2f} | separador de milhar |
O separador de milhar sai no padrão americano. Para o padrão brasileiro, troque os sinais com replace (que substitui um texto por outro):
Entrada com input
input("mensagem") mostra a mensagem, espera o usuário digitar e devolve o que foi digitado.
input() devolve sempre um texto (str), mesmo que o usuário digite um número. Para fazer contas, converta com int() ou float().Aqui na aula, os valores digitados ficam no campo Entrada, um por linha. Se o campo estiver vazio, o navegador abre uma caixa para digitar.
Forma usual: converter na mesma linha da leitura.
Entrada, processamento e saída
A maioria dos programas simples segue três etapas:
- Entrada: ler os dados necessários.
- Processamento: fazer os cálculos.
- Saída: mostrar o resultado.
Antes de programar, identifique cada etapa no enunciado. Ex.: “Leia três notas e mostre a média” → entrada: 3 notas; processamento: somar e dividir por 3; saída: a média.
n1 + n2 + n3 / 3. O resultado muda por causa da ordem das operações.Desafio: temperatura e tempo
- Leia uma temperatura em graus Celsius e mostre em Fahrenheit, com uma casa decimal. Fórmula:
F = C * 9 / 5 + 32. - Leia uma quantidade de segundos e mostre no formato horas, minutos e segundos. Ex.: 3725 →
1h 2min 5s.
Dica para o item 2: use // e %. Uma hora tem 3600 segundos.
Mostrar uma solução
Comparações e o tipo bool
| Operador | Pergunta | Exemplo |
|---|---|---|
== | é igual? | 5 == 5 → True |
!= | é diferente? | 5 != 5 → False |
> | é maior? | 7 > 3 → True |
< | é menor? | 7 < 3 → False |
>= | é maior ou igual? | 7 >= 7 → True |
<= | é menor ou igual? | 6 <= 7 → True |
= guarda um valor; == compara dois valores. Trocar um pelo outro é o erro mais comum nesta etapa.if: executar só quando a condição é verdadeira
A estrutura tem três partes: a palavra if, uma condição e dois-pontos. As linhas que pertencem ao if ficam recuadas com 4 espaços.
Se a condição for True, o bloco recuado executa. Se for False, o Python pula o bloco e segue para a próxima linha sem recuo.
Sem o recuo, o Python não sabe quais linhas pertencem ao if:
if e else: dois caminhos
else define o que fazer quando a condição é falsa. Exatamente um dos dois blocos executa, nunca os dois.
else não tem condição: ele cobre todos os casos que o if não cobriu.
Um número é par quando o resto da divisão por 2 é zero.
if, elif e else: vários caminhos
As condições são testadas de cima para baixo. A primeira verdadeira executa e as demais são ignoradas. Acompanhe no teste de mesa quais linhas são puladas.
A ordem importa. Por que a nota 9.5 recebe conceito C aqui?
Decisões aninhadas
Um if pode ficar dentro de outro. O bloco interno só é avaliado quando a condição externa é verdadeira. O recuo mostra quem está dentro de quem.
Use aninhamento quando a segunda pergunta só faz sentido depois da primeira. Na calculadora ao lado, só vale a pena olhar o divisor quando a operação é uma divisão.
else pertence ao if que está no mesmo recuo. Troque tem_titulo para True no teste de mesa mentalmente: qual linha muda?Muitas vezes um aninhamento pode virar and: if idade >= 16 and tem_titulo:. Escolha a forma mais fácil de ler.
Operadores lógicos: and, or, not
| A | B | A and B | A or B |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
and: as duas precisam ser verdadeiras. or: basta uma. not inverte: not True → False.
Armadilhas nas condições
- Intervalos. O Python aceita comparações encadeadas, como na matemática:
18 <= idade < 60equivale aidade >= 18 and idade < 60. - O
orincompleto.cor == "azul" or "verde"está sempre certo, porque um texto não vazio sozinho já valeTrue. Escreva a comparação completa dos dois lados:cor == "azul" or cor == "verde". - Igualdade com
float. Números decimais são guardados de forma aproximada:0.1 + 0.2não é exatamente0.3. Arredonde antes de comparar. - Texto não é número.
"10" > "9"éFalse, porque textos são comparados letra a letra. Converta comint()antes.
Desafio: ano bissexto
Leia um ano e informe se ele é bissexto. Um ano é bissexto quando:
- é divisível por 4 e não é divisível por 100, ou
- é divisível por 400.
“Divisível por” significa resto zero.
Mostre no formato 2024 é bissexto ou 2023 não é bissexto. O botão ✓ Verificar testa com 2024, 2023, 1900 e 2000.
Mostrar uma solução
while: repetir enquanto a condição for verdadeira
O bloco recuado executa, a condição é testada de novo, e assim por diante. Quando a condição fica falsa, o programa segue para depois do laço.
Todo while com contador tem três partes:
- inicialização antes do laço:
i = 1 - condição testada a cada volta:
i <= 4 - atualização dentro do laço:
i = i + 1
while com valor de parada
Quando não sabemos quantas vezes vamos repetir, combinamos um valor de parada com o usuário. Aqui, digitar -1 encerra a leitura.
Repare que a primeira leitura acontece antes do laço e a próxima leitura é a última linha dentro dele.
Mude as entradas e execute de novo. Teste também começando com -1.
Cuidado: laço infinito
Se a condição nunca ficar falsa, o laço nunca termina. No código abaixo falta a atualização: i vale 1 para sempre.
i = 1
while i <= 5:
print(i)
# falta i = i + 1: a condição é sempre TruePergunta para a turma: o que imprime o laço infinito acima? Depois, a versão corrigida:
Validando entradas e menus
O usuário nem sempre digita o que esperamos. O while permite repetir a pergunta enquanto a resposta for inválida:
- leia o valor;
- enquanto for inválido: avise e leia de novo;
- depois do laço, o valor com certeza é válido.
O mesmo raciocínio cria menus: o programa repete as opções até o usuário escolher sair. Você vai usar esse padrão na agenda telefônica da próxima aula.
-1, 10 e 11 na validação? Os limites 0 e 10 são aceitos?for e range
for repete o bloco uma vez para cada valor de uma sequência. range gera sequências de números.
| Chamada | Gera |
|---|---|
range(5) | 0, 1, 2, 3, 4 |
range(2, 6) | 2, 3, 4, 5 (o 6 fica de fora) |
range(0, 10, 3) | 0, 3, 6, 9 (de 3 em 3) |
range(5, 0, -1) | 5, 4, 3, 2, 1 (decrescente) |
for ou while?
for | while | |
|---|---|---|
| Use quando | a quantidade de repetições é conhecida ou há uma sequência para percorrer | a repetição depende de uma condição que muda durante a execução |
| Exemplos | tabuada, ler 10 notas, percorrer um texto | ler até digitar 0, pedir senha até acertar |
| Contador | automático | você cria e atualiza |
Toda tarefa feita com for pode ser feita com while. O for deixa o código menor e evita esquecer a atualização.
break e continue
| Comando | Efeito |
|---|---|
break | encerra o laço imediatamente |
continue | pula o restante desta volta e vai para a próxima |
Um uso comum de break é o laço while True, que repete até alguma condição interna mandar parar.
Padrões: contador, acumulador e maior valor
| Padrão | Começa com | A cada volta |
|---|---|---|
| contador | 0 | pares += 1 quando a condição vale |
| acumulador | 0 | soma += n |
| maior valor | o primeiro lido | troca quando aparece um maior |
Esses três padrões resolvem boa parte dos exercícios de laço. Identifique qual deles cada enunciado pede.
Laços aninhados
Um laço pode ficar dentro de outro. Para cada volta do laço de fora, o laço de dentro executa todas as suas voltas. Aqui são 2 × 3 = 6 impressões.
Laços aninhados aparecem sempre que há linhas e colunas: tabelas, desenhos, tabuleiros e, na próxima aula, matrizes.
No desenho ao lado, a linha 1 tem 1 asterisco, a linha 2 tem 2… O laço de dentro usa a variável do laço de fora.
Desafio: tabuada e contagem
- Leia um número
ne mostre a tabuada dende 1 a 10, no formato7 x 3 = 21. - Leia números até o usuário digitar 0. No final, mostre
Positivos: 2eNegativos: 2(com as quantidades certas).
Qual dos dois pede for e qual pede while?
Mostrar uma solução
Qual será a saída?
Peça para a turma escrever a resposta antes de revelar.
Prática 1: programas sequenciais
Escreva sua solução no editor. ▶ Executar roda com a entrada que você quiser; ✓ Verificar roda os testes automáticos e mostra o que falta. Tente antes de abrir a solução!
1. Calculadora de inteiros básico
Leia dois inteiros e mostre, um por linha, a soma, a diferença, o produto, a divisão real (2 casas), a divisão inteira e o resto.
| Entrada | Saída esperada |
|---|---|
17 5 | Soma: 22 Diferença: 12 Produto: 85 Divisão: 3.40 Divisão inteira: 3 Resto: 2 |
Mostrar uma solução
2. Reajuste salarial básico
Leia um salário e um percentual de aumento. Mostre o valor do aumento e o novo salário, com duas casas decimais.
| Entrada | Saída esperada |
|---|---|
2100 10 | Aumento: R$ 210.00 Novo salário: R$ 2310.00 |
Mostrar uma solução
Prática 2: decisões
3. O maior de três básico
Leia três números inteiros e mostre o maior, sem usar max().
| Entrada | Saída esperada |
|---|---|
3 9 4 | Maior: 9 |
Mostrar uma solução
4. Faixa etária intermediário
Leia uma idade e classifique: criança (0 a 11), adolescente (12 a 17), adulto (18 a 59) ou idoso (60 ou mais). Para idade negativa, mostre Idade inválida.
| Entrada | Saída esperada |
|---|---|
15 | Classificação: adolescente |
-3 | Idade inválida |
Os testes conferem os limites de cada faixa (11, 12, 17, 18, 59, 60).
Mostrar uma solução
Prática 3: repetições
5. Soma e fatorial intermediário
Leia um inteiro n (zero ou positivo). Mostre a soma de 1 até n e o fatorial de n: 5! = 5 × 4 × 3 × 2 × 1 = 120. Por definição, 0! = 1.
| Entrada | Saída esperada |
|---|---|
5 | Soma de 1 a 5: 15 5! = 120 |
Mostrar uma solução
6. Jogo de adivinhação intermediário
O número secreto está na variável secreto. Peça palpites até o usuário acertar. A cada erro, diga O número secreto é maior ou O número secreto é menor. No final, mostre Acertou em N tentativas.
| Entrada | Saída esperada |
|---|---|
50 30 42 | O número secreto é menor O número secreto é maior Acertou em 3 tentativas |
import random no início e troque 42 por random.randint(1, 100).Mostrar uma solução
Prática 4: desafios
Dois problemas clássicos que juntam tudo o que vimos: operadores, decisões e repetições.
7. Caixa eletrônico desafio
Leia o valor inteiro de um saque e mostre a menor quantidade de cédulas de 100, 50, 20, 10, 5 e 2 e de moedas de 1. Mostre só os valores usados, do maior para o menor.
| Entrada | Saída esperada |
|---|---|
388 | 3 x R$ 100 1 x R$ 50 1 x R$ 20 1 x R$ 10 1 x R$ 5 1 x R$ 2 1 x R$ 1 |
70 | 1 x R$ 50 1 x R$ 20 |
Dica: for cedula in (100, 50, 20, 10, 5, 2, 1): percorre os valores entre parênteses, um por volta (é uma tupla, assunto da próxima aula).
Mostrar uma solução
8. Número primo desafio
Leia um inteiro positivo e diga se ele é primo, isto é, se tem exatamente dois divisores: 1 e ele mesmo. Lembre: 1 não é primo.
| Entrada | Saída esperada |
|---|---|
17 | 17 é primo |
18 | 18 não é primo |
Dica: procure um divisor entre 2 e n - 1. Achou um? Já pode parar com break.
Mostrar uma solução
Laboratório livre
Espaço para testar ideias durante a aula. Sugestões: converta o jogo de adivinhação para números aleatórios; desenhe um losango de asteriscos; faça uma calculadora de IMC com classificação.