Pular para o conteúdo principal

Resumão de Python — Aulas 03 a 08

Este documento é uma referência rápida de tudo que você aprendeu até aqui. Não substitui as aulas — use-o para revisar antes de provas, consultar sintaxe durante exercícios ou identificar lacunas no seu aprendizado.


O que este resumão cobre

AulaTemaSeção aqui
03Tipos, variáveis e operadores§1 e §2
04Estruturas de decisão§3
05Funções e modularização§4
06Bibliotecas e depuração§5
07Estruturas de repetição§6
08Strings§7

1. Tipos de Dados e Variáveis

1.1 Os quatro tipos primitivos

Python identifica automaticamente o tipo pelo valor atribuído (tipagem dinâmica):

TipoO que armazenaExemplo de literal
intNúmeros inteiros (sem casas decimais)42, -7, 0
floatNúmeros reais (com casas decimais)3.14, -0.5, 1.0
strTexto (sequência de caracteres)"olá", 'Python'
boolValor lógicoTrue, False
idade = 21 # int
altura = 1.73 # float
nome = "Diego" # str
ativo = True # bool

print(type(idade)) # <class 'int'>
print(type(altura)) # <class 'float'>
print(type(nome)) # <class 'str'>
print(type(ativo)) # <class 'bool'>

1.2 Conversão entre tipos

Use as funções de conversão quando precisar transformar um tipo em outro — especialmente ao ler entradas do usuário com input(), que sempre retorna str:

FunçãoConverte paraExemplo
int(x)intint("42")42
float(x)floatfloat("3.14")3.14
str(x)strstr(100)"100"
bool(x)boolbool(0)False
entrada = input("Digite sua idade: ") # entrada é str
idade = int(entrada) # converte para int
print(idade + 1) # agora funciona

:::danger Armadilha frequente input() sempre retorna str. Somar "5" + 3 causa TypeError. Sempre converta antes de operar. :::

1.3 Boas práticas para nomes de variáveis

  • Use snake_case: nota_final, nome_aluno, total_itens
  • Nomes descritivos: media_turma em vez de m
  • Evite palavras reservadas do Python: for, if, print, type, list

2. Operadores

2.1 Operadores aritméticos

OperadorOperaçãoExemploResultado
+Soma10 + 313
-Subtração10 - 37
*Multiplicação10 * 330
/Divisão real10 / 33.333…
//Divisão inteira10 // 33
%Resto (módulo)10 % 31
**Potência2 ** 101024
a, b = 10, 3
print(a / b) # 3.3333333333333335 ← sempre float
print(a // b) # 3 ← descarta o decimal
print(a % b) # 1 ← resto da divisão inteira
print(a ** b) # 1000

:::tip Usos comuns de %

  • Verificar paridade: n % 2 == 0 → par
  • Verificar divisibilidade: n % 5 == 0 → múltiplo de 5
  • Rotação de índices em ciclos :::

2.2 Operadores relacionais

Sempre retornam True ou False:

OperadorSignificadoExemplo (a=10, b=3)Resultado
==Iguala == 10True
!=Diferentea != bTrue
>Maior quea > bTrue
<Menor quea < bFalse
>=Maior ou igualb >= 3True
<=Menor ou iguala <= 5False

:::danger Armadilha frequente = é atribuição. == é comparação. Escrever if x = 5: é erro de sintaxe. :::

2.3 Operadores lógicos

Combinam expressões booleanas:

OperadorRegraExemploResultado
andVerdadeiro somente se ambos forem TrueTrue and FalseFalse
orVerdadeiro se pelo menos um for TrueTrue or FalseTrue
notInverte o valor lógiconot TrueFalse
idade = 20
tem_documento = True

pode_entrar = idade >= 18 and tem_documento # True
dia_de_folga = False or True # True
bloqueado = not pode_entrar # False

2.4 Ordem de precedência

Do maior para o menor (operadores na mesma linha têm precedência igual):

Maior prioridade
** (potência)
*, /, //, % (multiplicação / divisão)
+, - (adição / subtração)
==, !=, >, <, >=, <= (relacional)
not (negação lógica)
and (conjunção)
or (disjunção)
Menor prioridade

Use parênteses para tornar a intenção explícita quando houver dúvida:

# Sem parênteses — pode ser confuso
resultado = 2 + 3 * 4 # 14 (multiplicação primeiro)

# Com parênteses — intenção clara
resultado = (2 + 3) * 4 # 20

3. Estruturas de Decisão

3.1 Mapa de uso

SituaçãoEstrutura
Executar algo apenas se uma condição for Trueif simples
Dois caminhos mutuamente exclusivosif / else
Três ou mais faixas/categoriasif / elif / else
Comparar uma variável com valores fixos e conhecidosmatch / case

3.2 Formas do if

# Decisão simples
if idade >= 18:
print("Maior de idade")

# Decisão binária
if nota >= 6.0:
print("Aprovado")
else:
print("Reprovado")

# Múltiplos caminhos — elif é avaliado em ordem; para assim que uma condição for True
if media >= 9:
conceito = "A"
elif media >= 8:
conceito = "B"
elif media >= 7:
conceito = "C"
elif media >= 6:
conceito = "D"
else:
conceito = "F"

:::tip Regra de ouro do elif Os ramos são avaliados de cima para baixo e o primeiro True encerra a busca. Por isso, coloque as faixas mais restritivas (maiores valores) primeiro. :::

3.3 Condições compostas

# AND: as duas devem ser True
if idade >= 18 and tem_documento:
print("Entrada permitida")

# OR: pelo menos uma True
if dia == "sábado" or dia == "domingo":
print("Fim de semana")

# NOT: inverte
if not esta_bloqueado:
print("Acesso liberado")

3.4 match / case (Python 3.10+)

Use quando você compara uma variável com valores fixos e enumeráveis. O case _: é o caso padrão (equivalente ao else):

opcao = 2

match opcao:
case 1:
print("Cadastrar")
case 2:
print("Listar")
case 3:
print("Sair")
case _:
print("Opção inválida")

Múltiplos valores no mesmo case com |:

match dia:
case "sábado" | "domingo":
print("Fim de semana")
case _:
print("Dia útil")

:::note match/case vs if/elif Use match/case para valores discretos e fixos (menu, código de status, nome de comando). Use if/elif para intervalos e condições complexas (faixas de notas, comparações com and/or). :::


4. Funções

4.1 Anatomia de uma função

# ① nome ② parâmetros
def calcular_media(n1, n2, n3):
"""③ Docstring: descreve o que a função faz."""
resultado = (n1 + n2 + n3) / 3 # ④ corpo
return resultado # ⑤ retorno

def — palavra-chave que inicia a definição
Parâmetros — variáveis locais que recebem os argumentos na chamada
Docstring — string de documentação (opcional, mas recomendada)
Corpo — bloco indentado com a lógica da função
return — entrega um valor ao chamador (sem return, a função devolve None)

4.2 Chamada e argumentos

# Definição
def soma(a, b):
return a + b

# Chamadas
resultado = soma(10, 7) # argumentos posicionais
print(resultado) # 17

print(soma(3, soma(4, 5))) # composição: soma(3, 9) → 12

4.3 Parâmetros com valor padrão

Tornam o argumento opcional. Sempre vêm depois dos parâmetros obrigatórios:

def saudacao(nome, periodo="dia"):
print(f"Bom {periodo}, {nome}!")

saudacao("Ana") # Bom dia, Ana!
saudacao("Carlos", "tarde") # Boa tarde, Carlos!

4.4 return vs print — a distinção mais importante

printreturn
O que fazExibe na telaEntrega valor ao chamador
Quem usaO humanoO programa
Valor resultante da chamadaNoneO valor especificado
Permite composição?
def dobro_errado(n):
print(n * 2) # exibe, mas não entrega

def dobro(n):
return n * 2 # entrega

x = dobro_errado(5) # x é None ← bug silencioso
y = dobro(5) # y é 10 ← correto
print(y + 1) # 11

:::danger Armadilha frequente Usar print dentro de uma função quando se precisa do valor para cálculos posteriores é um dos bugs mais comuns em iniciantes. Dentro de funções, prefira return. :::

4.5 Escopo de variáveis

Variáveis criadas dentro de uma função são locais — não existem fora dela:

def quadrado(x):
resultado = x ** 2 # resultado é local
return resultado

print(quadrado(5)) # 25
# print(resultado) # NameError: não existe aqui

Variáveis definidas fora de qualquer função são globais e podem ser lidas dentro de funções, mas não modificadas sem global (evite global — use parâmetros e return):

# ❌ Ruim — usa global
contador = 0
def incrementar():
global contador
contador += 1

# ✅ Bom — parâmetro + return
def incrementar(contador):
return contador + 1

contador = incrementar(contador)

4.6 Composição de funções

A saída de uma função pode ser a entrada de outra — isso é composição:

def calcular_media(n1, n2, n3):
return (n1 + n2 + n3) / 3

def aprovado(media, minima=6.0):
return media >= minima

def formatar(nome, media, situacao):
return f"{nome} | {media:.2f} | {situacao}"

# Programa principal
media = calcular_media(8.0, 7.5, 9.0) # 8.17
status = "Aprovado" if aprovado(media) else "Reprovado"
relatorio = formatar("Ana", media, status)
print(relatorio) # Ana | 8.17 | Aprovado

5. Bibliotecas Padrão e Depuração

5.1 Como importar

import math # importa o módulo inteiro
from math import sqrt, pi # importa nomes específicos
import random # outro módulo

5.2 Módulo math

Função / ConstanteO que fazExemploResultado
math.piConstante πmath.pi3.14159…
math.sqrt(x)Raiz quadradamath.sqrt(25)5.0
math.ceil(x)Arredonda para cimamath.ceil(2.1)3
math.floor(x)Arredonda para baixomath.floor(2.9)2
math.pow(x, y)Potência (retorna float)math.pow(2, 8)256.0
math.log(x)Logaritmo naturalmath.log(math.e)1.0
import math

def area_circulo(raio):
return math.pi * math.pow(raio, 2)

def hipotenusa(a, b):
return math.sqrt(a**2 + b**2)

print(f"Área (r=5): {area_circulo(5):.2f}") # 78.54
print(f"Hipotenusa (3,4): {hipotenusa(3,4)}") # 5.0

5.3 Módulo random

FunçãoO que fazExemplo
random.randint(a, b)Inteiro aleatório entre a e b (inclusive)random.randint(1, 6)
random.random()Float aleatório entre 0.0 e 1.0random.random()
random.choice(seq)Escolhe um elemento aleatóriorandom.choice(["A","B","C"])
random.shuffle(seq)Embaralha a lista no lugarrandom.shuffle(cartas)
import random

def rolar_dado(lados=6):
return random.randint(1, lados)

print(rolar_dado()) # número entre 1 e 6
print(rolar_dado(20)) # número entre 1 e 20

5.4 Outros módulos úteis da biblioteca padrão

MóduloPrincipais recursos
statisticsmean(), median(), mode(), stdev()
datetimedatetime.now(), date.today(), timedelta
osgetcwd(), listdir(), path.exists()
jsondumps(), loads(), dump(), load()
stringascii_letters, digits, punctuation

5.5 Depuração com print

Adicione print temporários com prefixo [DEBUG] para inspecionar valores durante o desenvolvimento:

def calcular_desconto(preco, percentual):
print(f"[DEBUG] preco={preco}, percentual={percentual}")
desconto = preco * (percentual / 100)
print(f"[DEBUG] desconto={desconto}")
return preco - desconto

print(calcular_desconto(200, 15)) # Preço final: 170.0

Remova os [DEBUG] antes de entregar o código. No VS Code, use o atalho Ctrl+H para buscar e substituir todos de uma vez.

5.6 Depuração com o debugger do VS Code

AçãoAtalhoO que faz
Definir breakpointClique na margem esquerdaPausa a execução naquela linha
Iniciar depuraçãoF5Executa até o próximo breakpoint
Step OverF10Executa a linha atual, sem entrar em funções
Step IntoF11Entra dentro da função chamada
ContinueF5Retoma até o próximo breakpoint

6. Estruturas de Repetição

6.1 Mapa de decisão: for ou while?

SituaçãoUse
Quantidade de iterações conhecida antes de começarfor
Percorrer todos os elementos de uma coleção ou stringfor
Repetir enquanto uma condição for verdadeirawhile
Quantidade de iterações desconhecida (depende de entrada)while
Parada antecipada por condição internafor + break
Pular itens específicos mantendo o laçofor + continue

6.2 Laço for

# Percorrer uma lista
frutas = ["maçã", "banana", "laranja"]
for fruta in frutas:
print(fruta)

# Percorrer uma string
for letra in "Python":
print(letra) # P y t h o n (um por linha)

6.3 range() — formas de uso

range(fim) # 0, 1, …, fim-1
range(inicio, fim) # inicio, …, fim-1
range(inicio, fim, passo)
ChamadaSequência gerada
range(5)0 1 2 3 4
range(2, 7)2 3 4 5 6
range(0, 10, 3)0 3 6 9
range(10, 0, -2)10 8 6 4 2

:::danger Armadilha frequente O limite superior do range é exclusivo. range(1, 11) vai de 1 a 10, não de 1 a 11. :::

6.4 Laço while

# Forma básica
contador = 0
while contador < 5:
print(contador)
contador += 1 # ← sem isso, loop infinito!

# Padrão sentinela — leitura antes do while, releitura no fim do corpo
n = int(input())
soma = 0
quantidade = 0

while n != -1:
soma += n
quantidade += 1
n = int(input()) # ← releitura SEMPRE no fim do corpo

if quantidade > 0:
print(f"Média: {soma / quantidade:.2f}")

:::danger Os três erros clássicos do while

  1. Sem atualização da condição no corpo → loop infinito
  2. Releitura no início do corpo → sentinela é processado
  3. Variável não inicializada antes do whileNameError :::

6.5 break e continue

# break — encerra o laço imediatamente
for numero in range(1, 100):
if numero % 7 == 0:
print(f"Primeiro múltiplo de 7: {numero}") # 7
break

# continue — pula para a próxima iteração
for numero in range(1, 11):
if numero % 2 == 0:
continue # pula os pares
print(numero) # imprime 1 3 5 7 9

:::tip break não transforma for em while O for ainda tem um teto máximo definido pelo range ou pelo tamanho da coleção. Use while quando realmente não há limite superior conhecido. :::

6.6 Ciclo de vida das variáveis em laços

Esta é a decisão mais importante ao escrever laços. Responda sobre cada variável:

"Esta variável pertence a um item ou ao conjunto?"

TipoOnde inicializarExemplo
Persistente — acumula ao longo de todas as iteraçõesFora do laçototal_aprovados na turma inteira
Com reset — começa do zero a cada iteraçãoDentro do laçosoma das notas de um aluno
Flag booleana — registra evento em um itemDentro do laçotem_nota_zero desse aluno
num_alunos = int(input())
aprovados = 0 # persistente — pertence à TURMA

for a in range(num_alunos):
soma = 0 # reset — pertence ao ALUNO
tem_zero = False # flag — pertence ao ALUNO

for j in range(3):
nota = float(input())
soma += nota
if nota == 0:
tem_zero = True

media = soma / 3
if media >= 6 and not tem_zero:
aprovados += 1 # atualiza o persistente

print(f"Aprovados: {aprovados} de {num_alunos}")

7. Strings

7.1 Indexação

Strings são sequências indexadas a partir do zero. Índices negativos contam do final:

P y t h o n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
s = "Python"
print(s[0]) # P
print(s[-1]) # n (último)
print(s[-2]) # o (penúltimo)

7.2 Fatiamento (slicing)

Notação: s[inicio:fim:passo] — o fim é exclusivo:

ExpressãoResultadoDescrição
s[1:4]"yth"Índices 1, 2, 3
s[:3]"Pyt"Do início até o índice 2
s[3:]"hon"Do índice 3 até o fim
s[::2]"Pto"Um a cada dois
s[::-1]"nohtyP"String invertida
texto = "algoritmo"
print(texto[:4]) # algo
print(texto[4:]) # ritmo
print(texto[::-1]) # omtirогla

7.3 Métodos de transformação de case

s = "olá, Mundo!"
print(s.upper()) # OLÁ, MUNDO!
print(s.lower()) # olá, mundo!
print(s.capitalize()) # Olá, mundo! (só a 1ª letra maiúscula)
print(s.title()) # Olá, Mundo! (1ª letra de cada palavra)

7.4 Métodos de limpeza

entrada = " dado com espaços "
print(entrada.strip()) # "dado com espaços" (remove das duas bordas)
print(entrada.lstrip()) # "dado com espaços " (só da esquerda)
print(entrada.rstrip()) # " dado com espaços" (só da direita)

7.5 Métodos de busca e substituição

frase = "café com leite e café"
print(frase.count("café")) # 2
print(frase.find("leite")) # 9 (índice da 1ª ocorrência; -1 se não achar)
print("café" in frase) # True
print(frase.replace("café","chá"))# chá com leite e chá

7.6 Métodos de divisão e junção

csv = "Alice,Bob,Carol"
nomes = csv.split(",") # ['Alice', 'Bob', 'Carol']
texto = " | ".join(nomes) # "Alice | Bob | Carol"

frase = "uma frase qualquer"
palavras = frase.split() # divide por espaço (padrão)
print(len(palavras)) # 3

7.7 Métodos de verificação (retornam bool)

MétodoRetorna True se…
s.isalpha()Todos os caracteres são letras
s.isdigit()Todos os caracteres são dígitos
s.isalnum()Todos são letras ou dígitos
s.isspace()Todos são espaços em branco
s.startswith(prefixo)String começa com prefixo
s.endswith(sufixo)String termina com sufixo
s.isupper()Todas as letras são maiúsculas
s.islower()Todas as letras são minúsculas
print("abc".isalpha()) # True
print("123".isdigit()) # True
print("abc123".isalnum()) # True
print("hello".startswith("he")) # True
print("world".endswith("ld")) # True

7.8 Formatação com f-strings

Coloque a variável entre {} após o f. Use especificadores de formato após ::

EspecificadorEfeitoExemploSaída
.2fFloat com 2 casas decimaisf"{3.14159:.2f}""3.14"
.0fFloat sem casas decimaisf"{8.7:.0f}""9"
dInteirof"{42:d}""42"
>10Alinhado à direita em 10 posiçõesf"{'Ana':>10}"" Ana"
<10Alinhado à esquerda em 10 posiçõesf"{'Ana':<10}""Ana "
^10Centralizado em 10 posiçõesf"{'Ana':^10}"" Ana "
nome = "Ana"
nota = 8.756

print(f"Nome: {nome}") # Nome: Ana
print(f"Nota: {nota:.2f}") # Nota: 8.76
print(f"Arredondado: {nota:.0f}") # Arredondado: 9
print(f"{'Item':<12}{'Preço':>8}") # Item Preço
print(f"{'Caneta':<12}{1.50:>8.2f}")# Caneta 1.50

7.9 Iteração e comprimento

nome = "Carolina"
print(len(nome)) # 8

for letra in nome:
print(letra) # C a r o l i n a (um por linha)

# Contar vogais
vogais = sum(1 for c in nome.lower() if c in "aeiou")
print(vogais) # 5

Quadro-resumo: erros mais comuns

ErroCausa típicaComo corrigir
TypeError: can only concatenate str (not "int")Tentou somar str com int sem converterUse int() ou float() na entrada
NameError: name 'x' is not definedVariável usada antes de ser criadaInicialize a variável antes de usá-la
IndentationErrorIndentação inconsistenteUse sempre 4 espaços; nunca misture espaço e tab
SyntaxError próximo a = numa condiçãoUsou = em vez de ==Troque if x = 5: por if x == 5:
Loop infinito (while trava)Condição nunca se torna FalseGaranta que a variável da condição é atualizada no corpo
Sentinela processado no whileReleitura no início do corpoMova a releitura para o fim do corpo
Função retorna NoneEsqueceu o returnAdicione return valor ao final da função
Reset no lugar erradoAcumulador iniciado fora do laço externoMova a inicialização para dentro do laço onde ela deve zerar

Referências

Documentação Oficial

Aprofundamento