Tudo o que
já sabemos
Operadores, condicionais, range, for, while, listas e funções — em um único mapa. Não tem conteúdo novo aqui: tem tudo junto, do jeito que cai na prova e aparece no código real.
Operadores, condicionais, range, for, while, listas e funções — em um único mapa. Não tem conteúdo novo aqui: tem tudo junto, do jeito que cai na prova e aparece no código real.
Tudo que estudamos se encaixa em sete peças. Elas não vivem separadas: um programa de verdade usa todas ao mesmo tempo.
Guardar dados e converter entrada do usuário.
Aritméticos, relacionais e lógicos.
if, elif, else — decidir o caminho.
Gerar a sequência que o laço vai percorrer.
for, while, break, continue, aninhados.
Guardar coleções e percorrer com acumuladores.
def, parâmetros e return — organizar e reaproveitar.
Uma variável é um nome que aponta para um valor guardado na memória. Em Python o tipo é definido pelo valor — você não declara, só atribui.
idade = 17 # int → número inteiro
altura = 1.75 # float → número com vírgula
nome = "Ana" # str → texto
aprovado = True # bool → True ou False
print(type(idade)) # <class 'int'>
# input() SEMPRE devolve texto (str)
idade = input("Idade: ") # "17" ← texto!
print(idade + 1) # ERRO
# Converta na hora de ler:
idade = int(input("Idade: "))
nota = float(input("Nota: "))
int() ou o float() em volta do input(). O programa até roda, mas na hora da conta explode com TypeError — ou pior: soma textos e devolve "17" + "3" = "173".
| Operador | Nome | Exemplo | Resultado |
|---|---|---|---|
| + | Soma | 7 + 2 | 9 |
| - | Subtração | 7 - 2 | 5 |
| * | Multiplicação | 7 * 2 | 14 |
| / | Divisão (sempre float) | 7 / 2 | 3.5 |
| // | Divisão inteira (descarta a parte fracionária) | 7 // 2 | 3 |
| % | Resto da divisão (módulo) | 7 % 2 | 1 |
| ** | Potência | 7 ** 2 | 49 |
% é o operador mais útil da lista. n % 2 == 0 testa se o número é par. n % 5 == 0 testa se é múltiplo de 5. Quase toda questão de "divisível por" se resolve com o resto.
Comparam dois valores e devolvem sempre True ou False. São eles que alimentam o if e a condição do while.
| Operador | Significado | Exemplo | Resultado |
|---|---|---|---|
| == | Igual a | nota == 10 | True / False |
| != | Diferente de | nome != "Ana" | True / False |
| > | Maior que | 7 > 2 | True |
| < | Menor que | 7 < 2 | False |
| >= | Maior ou igual | 6 >= 6 | True |
| <= | Menor ou igual | 5 <= 4 | False |
= atribui um valor à variável; == compara dois valores. Escrever if nota = 10: é erro de sintaxe — o Python nem executa o programa.
Combinam duas ou mais comparações em uma única condição.
Verdadeiro só se as duas forem verdadeiras.
nota >= 6 and faltas <= 10
Verdadeiro se pelo menos uma for verdadeira.
dia == "sab" or dia == "dom"
Inverte o resultado da condição.
not aprovado
| A | B | A and B | A or B | not A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | False | False | True | False |
| False | True | False | True | True |
| False | False | False | False | True |
Lembrando: % devolve o resto da divisão inteira.
17 / 5 → 3.4 (alternativa A), 17 // 5 → 3 (alternativa B) e 17 % 5 → 2. Três operadores, três respostas diferentes para os mesmos números.
A estrutura de decisão testa condições de cima para baixo e executa apenas o primeiro bloco cuja condição for verdadeira. O else é a rede de segurança: roda quando nenhuma das anteriores der certo.
nota = float(input("Nota: "))
if nota >= 6.0:
print("Aprovado")
elif nota >= 4.0: # só testa se a de cima foi False
print("Recuperação")
else: # só roda se todas foram False
print("Reprovado")
if nota >= 4.0 antes de if nota >= 6.0, uma nota 8 cai na recuperação — porque 8 também é maior que 4, e o primeiro que bate vence. Sempre da condição mais restritiva para a mais ampla.
Quando a decisão depende de mais de um fator, combinamos comparações com and / or.
# Aprovação por nota E frequência
nota = 7.5
faltas = 8
if nota >= 6.0 and faltas <= 10:
print("Aprovado")
elif nota >= 6.0 and faltas > 10:
print("Reprovado por falta")
else:
print("Reprovado por nota")
# Faixa de valores — o intervalo
idade = 16
if idade >= 12 and idade <= 17:
print("Adolescente")
# Python aceita o encadeamento:
if 12 <= idade <= 17:
print("Adolescente")
if idade >= 12 or idade <= 17 com or é sempre verdadeiro — qualquer número do mundo satisfaz uma das duas partes. Para intervalo, use and. Para opções alternativas (sábado ou domingo), use or.
if nota >= 6
print("Aprovado")
# SyntaxError + IndentationError
Correto: if nota >= 6: e a linha de dentro com 4 espaços de recuo.
if nota >= 6.0:
print("Aprovado")
if nota >= 4.0: # testa de novo!
print("Recuperação") # nota 8 imprime os dois
Com elif, os testes são exclusivos: um só resultado sai.
if input("Nota: ") >= 6: quebra, porque input devolve str. Converta primeiro: nota = float(input("Nota: ")).
O range não é um laço — é um gerador de sequência de números. Ele só produz a lista de valores; quem percorre é o for.
| Forma | Leitura | Gera |
|---|---|---|
| range(5) | de 0 até antes de 5 | 0 · 1 · 2 · 3 · 4 |
| range(2, 6) | de 2 até antes de 6 | 2 · 3 · 4 · 5 |
| range(0, 10, 2) | de 0 a 9, pulando de 2 em 2 | 0 · 2 · 4 · 6 · 8 |
| range(10, 0, -1) | de 10 até 1, de trás para frente | 10 · 9 · … · 2 · 1 |
| range(len(lista)) | todos os índices válidos da lista | 0 · 1 · … · N−1 |
range(1, 11) gera de 1 a 10 — por isso, para contar de 1 até n, escrevemos range(1, n + 1).
Visualizando range(5) — cinco números, começando no zero, parando antes do 5:
# Contar de 1 a 10 (o jeito certo)
for i in range(1, 11):
print(i) # 1, 2, 3 ... 10
# Tabuada do 7 — pulando de 7 em 7
for n in range(7, 71, 7):
print(n) # 7, 14, 21 ... 70
range(len(lista)) devolve exatamente os índices válidos — de 0 a N−1. O comportamento que parece estranho é o que evita o IndexError.
O for repete um bloco uma vez para cada item de uma sequência. Use quando você já sabe quantas vezes vai repetir.
# Percorrendo os VALORES da lista
frutas = ["maçã", "uva", "pera"]
for fruta in frutas:
print(fruta)
# maçã / uva / pera
# Percorrendo os ÍNDICES da lista
frutas = ["maçã", "uva", "pera"]
for i in range(len(frutas)):
print(i, "->", frutas[i])
# 0 -> maçã / 1 -> uva / 2 -> pera
range(len(...)).
O while repete enquanto uma condição for verdadeira. Use quando não se sabe de antemão quantas repetições serão necessárias.
# Contador — você controla o índice
i = 1
while i <= 5:
print(i)
i = i + 1 # sem isso: laço infinito
# Sentinela — repete até o usuário parar
senha = ""
while senha != "1234":
senha = input("Senha: ")
print("Acesso liberado")
while precisa de saída. Alguma coisa dentro do laço tem que alterar a variável da condição — seja um i += 1, seja um novo input(). Esqueceu? O programa trava e você precisa interromper com Ctrl + C.
· A quantidade de repetições é conhecida
· Você vai percorrer uma lista inteira
· Precisa de uma contagem fixa (1 a 10, tabuada)
· A repetição depende de uma condição
· O usuário decide quando parar
· Você espera uma entrada válida
for pode ser reescrito como while, e vice-versa. A escolha é sobre clareza: quem lê o código deve entender de cara se a repetição é contada ou condicional.
Duas palavras que alteram o fluxo dentro de qualquer laço.
# break — ABANDONA o laço na hora
for n in [4, 9, 7, 2, 8]:
if n == 7:
print("Achei o 7!")
break # sai do for
print(n)
# 4 / 9 / Achei o 7! → 2 e 8 nem são vistos
# continue — PULA para a próxima volta
for n in [4, 9, 7, 2, 8]:
if n % 2 != 0:
continue # ignora os ímpares
print(n)
# 4 / 2 / 8
break encerra o laço inteiro; continue pula só a volta atual e segue para a próxima. O break é o que usamos na busca linear — encontrou, não faz sentido continuar procurando.
Um laço dentro do outro. O de fora dá uma volta; o de dentro dá todas as suas voltas antes de o de fora avançar.
for tabuada in range(1, 4): # externo: 1, 2, 3
print(f"\nTabuada do {tabuada}")
for n in range(1, 11): # interno: 1 a 10, TODA vez
print(tabuada, "x", n, "=", tabuada * n)
for i in range(2, 10, 3):
print(i)
2, avança de 3 em 3 e para antes de 10. A sequência é 2 → 5 → 8; o próximo seria 11, que já passou do limite e nem chega a existir. Alternativa D erra justamente por incluir esse 11.
Uma variável que guarda vários valores. Cada um ocupa uma posição — e a contagem começa no zero.
| Operação | Código | Resultado |
|---|---|---|
| Criar | notas = [7.5, 8.0, 6.5, 9.0] | lista com 4 itens |
| Acessar | notas[2] | 6.5 |
| Alterar | notas[0] = 10.0 | troca o 1º valor |
| Tamanho | len(notas) | 4 |
| Adicionar | notas.append(5.0) | vira 5 itens |
| Último item | notas[len(notas) - 1] | o do fim |
Soma, média, contagem, maior, menor, busca — todos são o mesmo laço. Muda só o que acontece dentro dele.
Antes do laço — criar a variável que acumula: soma = 0, maior = lista[0].
Dentro do laço — atualizar essa variável com o item atual.
Depois do laço — usar o resultado: dividir, comparar, exibir.
notas = [7.5, 8.0, 6.5, 9.0]
soma = 0 # 1 · antes
maior = notas[0]
for i in range(len(notas)): # 2 · dentro
soma = soma + notas[i]
if notas[i] > maior:
maior = notas[i]
media = soma / len(notas) # 3 · depois
print("Média:", media, "| Maior:", maior)
numeros = [3, 8, 5, 12, 7]
total = 0
for n in numeros:
if n % 2 == 0:
total = total + n
print(total)
n % 2 == 0 deixa passar só os pares — 8 e 12. O acumulador soma apenas esses dois: 8 + 12 = 20. Se o teste fosse total = total + 1, aí sim a resposta seria 2 (alternativa D) — contagem em vez de soma.
Uma função é um bloco de código com nome, que executa uma tarefa e pode ser reaproveitado quantas vezes você quiser. Em vez de repetir o mesmo trecho em três lugares, você o empacota e chama pelo nome.
def saudacao(): # DEFINIR = escrever a receita
print("Olá, seja bem-vindo!")
saudacao() # CHAMAR = executar a receita
print("Linha do principal.")
saudacao()
Olá, seja bem-vindo!
Linha do principal.
Olá, seja bem-vindo!
→ três saídas, uma única definição
(). São os parênteses que diferenciam mencionar a função de executá-la — e, ao terminar, o programa volta exatamente para a linha seguinte à chamada.
Parâmetros são as "portas de entrada" da função: variáveis declaradas na definição que recebem valores diferentes a cada chamada.
A variável vazia, escrita na definição.
É o campo em branco da ficha de cadastro.O valor real, passado na chamada.
É o seu nome preenchido na ficha.def media(a, b, c): # a, b, c → PARÂMETROS
return (a + b + c) / 3
print(media(7, 8, 6)) # 7, 8, 6 → ARGUMENTOS → 7.0
media_ana(), media_bia(), media_caio(). Com parâmetro, é uma só — e mudar a regra do cálculo passa a ser mudar uma linha, não três.
O print mostra na tela e o valor acaba ali. O return devolve o valor para quem chamou — e encerra a função na hora.
# Só imprime — o valor se perde
def dobro(n):
print(n * 2)
x = dobro(5) # imprime 10
print(x) # None ← nada voltou
# Retorna — dá para reaproveitar
def dobro(n):
return n * 2
x = dobro(5) # x recebe 10
print(x + 3) # 13
NameError. Se o programa principal precisa do valor, a função tem que return-á-lo.
def soma(a, b):
total = a + b
resultado = soma(3, 4)
print(resultado)
total não existe fora da funçãototaltotal = 7, mas total é local e nunca foi devolvido — função sem return devolve None. A alternativa C só aconteceria se o print fosse de total; aqui imprimimos resultado, que existe e vale None. Conserto: trocar a linha de dentro por return a + b.
Antes de chamar o professor, passe por estas seis linhas. Elas resolvem a maioria dos erros do bimestre:
| Mensagem do Python | O que quase sempre é |
|---|---|
| SyntaxError | Faltou : no fim do if/for/while, ou um parêntese/aspas sem fechar |
| IndentationError | O bloco de dentro não está recuado — ou está com espaços irregulares |
| NameError | Nome escrito errado, ou variável usada antes de ser criada |
| TypeError | Esqueceu o int()/float() no input() — está somando texto com número |
| IndexError | Acessou uma posição que não existe: índices vão de 0 a len(lista) − 1 |
| ZeroDivisionError | Dividiu por zero — normalmente uma média com lista vazia |
print() dentro do laço para ver o valor de cada variável a cada volta. É o jeito mais rápido de descobrir onde a lógica desviou.
Escrevam um programa que use todos os conceitos revisados. Se ele funcionar, você está pronto para a avaliação.
Pergunte quantos números serão digitados e leia cada um, guardando em uma lista (input + int + append).
Percorra a lista e calcule soma, média, maior e menor (for + range + acumulador).
Conte quantos são pares e quantos são ímpares (operador % + if/else).
Pergunte um valor e diga se ele está na lista e em qual posição (busca linear + break).
Repita o programa até o usuário digitar "sair" (while + condição de parada).
Coloque cada tarefa dentro de uma função com return — ler, calcular, contar, buscar (def + parâmetros + return).
Uma solução completa: à esquerda as funções (cada uma faz uma coisa e devolve o resultado), à direita o programa principal que as usa.
def ler_numeros(qtd): # 1 · entrada + lista
lista = []
for i in range(qtd):
lista.append(int(input(f"Nº {i + 1}: ")))
return lista
def media(lista): # 2 · acumulador
soma = 0
for n in lista:
soma += n
return soma / len(lista)
def contar_pares(lista): # 3 · % + if
pares = 0
for n in lista:
if n % 2 == 0:
pares += 1
return pares
def buscar(lista, alvo): # 4 · busca linear
for i in range(len(lista)):
if lista[i] == alvo:
return i # return já encerra o laço
return -1
while True: # 5 · condição de parada
if input("\nEnter ou 'sair': ") == "sair":
break
qtd = int(input("Quantos números? "))
numeros = ler_numeros(qtd)
maior = menor = numeros[0]
for n in numeros:
if n > maior: maior = n
if n < menor: menor = n
pares = contar_pares(numeros)
print("Média:", media(numeros))
print("Maior:", maior, "| Menor:", menor)
print("Pares:", pares,
"| Ímpares:", len(numeros) - pares)
alvo = int(input("Buscar qual número? "))
print("Posição:", buscar(numeros, alvo))
buscar: o return substitui o break, porque devolver já encerra o laço e a função.
input() devolve texto — sempre converta com int() ou float()= atribui · == compara — nunca troque os dois% dá o resto; n % 2 == 0 é o teste de número parand exige as duas condições · or aceita uma · not inverteelif torna os testes exclusivos — e a ordem das condições importarange(a, b) inclui o início e exclui o fim; range(len(lista)) dá os índices válidosfor para repetição contada · while para repetição condicional (com saída garantida)0 a len(lista) − 1 — e todo cálculo em lista é acumulador dentro do laçodef apenas define; o código só roda quando você chama com nome() — parênteses obrigatóriosreturn devolve e encerra a função · print só mostra · sem return, a função vale None — e variável criada dentro é localReabram este deck no celular na véspera da prova — ele funciona offline depois de carregado e vale mais lido em voz alta do que decorado em silêncio.